Hadoop 集群搭建

目錄

  • 集群簡介
  • 服務(wù)器準(zhǔn)備
  • 環(huán)境和服務(wù)器設(shè)置
  • JDK環(huán)境安裝
  • Hadoop安裝部署
  • 啟動(dòng)集群
  • 測試

集群簡介

在進(jìn)行集群搭建前,我們需要大概知道搭建的集群都是些啥玩意。

HADOOP集群具體來說包含兩個(gè)集群:HDFS集群和YARN集群,兩者在邏輯上分離,但物理上常在一起(啥意思?就是說:HDFS集群和YARN集群,他們倆是兩個(gè)不同的玩意,但很多時(shí)候都會(huì)部署在同一臺(tái)物理機(jī)器上)

  • HDFS集群:負(fù)責(zé)海量數(shù)據(jù)的存儲(chǔ),集群中的角色主要有
  • NameNode (DataNode的管理者,負(fù)責(zé)保存元數(shù)據(jù))
  • DataNode (負(fù)責(zé)保存具體的數(shù)據(jù)內(nèi)容)
  • YARN集群:負(fù)責(zé)海量數(shù)據(jù)運(yùn)算時(shí)的資源調(diào)度,集群中的角色主要有
  • ResourceManager (NodeManager的管理者,負(fù)責(zé)NodeManager的調(diào)用等)
  • NodeManager (當(dāng)ResourceManager進(jìn)行調(diào)用時(shí),負(fù)責(zé)調(diào)用本地的運(yùn)算資源等)

那mapreduce是什么呢?它其實(shí)是集群中一個(gè)應(yīng)用程序開發(fā)包,放在yarn集群上面跑。

搭建構(gòu)思

本集群搭建案例,以3節(jié)點(diǎn)為例進(jìn)行搭建,角色分配如下:

服務(wù)器 角色1 角色2 角色3
note1 NameNode ResourceManager
note2 DataNode NodeManager SecondaryNameNode
note3 DataNode NodeManager

解析:
note1服務(wù)器擔(dān)任的角色為NameNode和ResourceManager(即note1服務(wù)器為HDFS集群的NameNode節(jié)點(diǎn),同時(shí)也是YARN集群的ResourceManager節(jié)點(diǎn))
note2 服務(wù)器擔(dān)任的角色為 DataNode 、 NodeManager 和 SecondaryNameNode(同上)
note3 服務(wù)器擔(dān)任的角色為 DataNode 和 NodeManager(同上)

(ps:本來節(jié)點(diǎn)名字想打node的,錯(cuò)打成note,懶得改.)

服務(wù)器準(zhǔn)備

本案例使用虛擬機(jī)服務(wù)器來搭建HADOOP集群,所用軟件及版本:

  • Vmware12.0
  • Centos6.5 64bit

下載安裝過程就省略啦,網(wǎng)上鏈接和教程一大把。

環(huán)境和服務(wù)器設(shè)置

在進(jìn)行網(wǎng)絡(luò)準(zhǔn)備的前提,是安裝Vmware,新建三臺(tái)虛擬機(jī)。

注:以下操作在root用戶下操作。

  • 配置虛擬機(jī)橋接方式,采用NAT方式聯(lián)網(wǎng)

  • 配置Linux的網(wǎng)絡(luò)配置文件,具體設(shè)置步驟如下:

  • 1、配置/etc/sysconfig/network-scripts/ifcfg-eth0

     `shell> su root #切換為root用戶`  
     `shell> vi /etc/sysconfig/network-scripts/ifcfg-eth0 #編輯配置文件`
     
     配置內(nèi)容如下(修改下面有值的項(xiàng),沒有的加上):
     > DEVICE="..."  
     > BOOTPROTO="static" #設(shè)置為靜態(tài)IP  
     > HWADDR="....."  
     > IPV6INIT="..."  
     > NM_CONTROLLED="...."  
     > ONBOOT="yes"  
     > TYPE="......"  
     > UUID=".........."  
     > IPADDR="192.168.88.3" #IP地址  
     > NETMASK="255.255.255.0" # 子網(wǎng)掩碼  
     > GATEWAY="192.168.88.1" #網(wǎng)關(guān)地址
    
  • 2、重啟網(wǎng)絡(luò)服務(wù),使配置生效。

     `shell> service network restart # 重啟網(wǎng)絡(luò)服務(wù)`
    
  • 添加hadoop用戶并添加sudo權(quán)限

    shell> useradd hadoop #添加用戶hadoop
    shell> passwd hadoop #設(shè)置用戶hadoop的密碼
    shell> chmod u+w /etc/sudoers # 添加寫權(quán)限
    shell> vi /etc/sudoers

    進(jìn)入編輯模式,找到這一 行:"root ALL=(ALL) ALL"在起下面添加"hadoop ALL=(ALL) ALL",然后保存退出。

    shell> chmod u-w /etc/sudoers #撤銷寫權(quán)限

  • 設(shè)置服務(wù)器時(shí)間同步
    date -s "2016-08-18 12:21:00

  • 修改主機(jī)名
    shell> vi /etc/sysconfig/network

    配置內(nèi)容如下:

    NETWORKING=yes
    HOSTNAME=note1

  • 配置內(nèi)網(wǎng)域名映射
    配置/etc/hosts配置文件:

    shell> vi /etc/hosts

    配置內(nèi)容如下:

    192.168.88.3 note1
    192.168.88.4 note2
    192.168.88.5 note3

  • 配置ssh免密登陸
    生成ssh免登陸密鑰
    shell> cd ~/.ssh #進(jìn)入到我的home目錄
    shell> ssh-keygen -t rsa #(四個(gè)回車)

    執(zhí)行完這個(gè)命令后,會(huì)生成兩個(gè)文件id_rsa(私鑰)、id_rsa.pub(公鑰)
    將公鑰拷貝到要免密登陸的目標(biāo)機(jī)器上
    shell> ssh-copy-id localhost

  • 配置防火墻
    因?yàn)樾枰M(jìn)行免密登錄,所以要對(duì)防火墻進(jìn)行關(guān)閉。
    shell> service iptables status #查看防火墻狀態(tài)
    shell> service iptables stop #關(guān)閉防火墻
    shell> chkconfig iptables --list #查看防火墻開機(jī)啟動(dòng)狀態(tài)
    shell> chkconfig iptables off #關(guān)閉防火墻開機(jī)啟動(dòng)
    shell> reboot # 重啟

JDK環(huán)境安裝

  • 解壓jdk
    創(chuàng)建一個(gè)目錄app來放置解壓后的文件
    shell> mkdir /home/hadoop/app #創(chuàng)建文件夾
    shell> tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app #解壓

  • 配置環(huán)境變量
    解壓完畢后需要將java添加到環(huán)境變量中,并使其生效
    shell> vi /etc/profile
    在文件最后添加一下內(nèi)容:

    export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
    export PATH=$PATH:$JAVA_HOME/bin

    刷新配置,使其生效
    shell> source /etc/profile

Hadoop安裝部署

  • 解壓Hadoop安裝包

    解壓到app目錄下
    shell> tar -zxvf hadoop-2.7.3.tar.gz -C /home/hadoop/app #解壓

  • 修改配置文件
    配置文件都放在解壓目錄下的etc/hadoop/目錄下(我這里的目錄為/home/hadoop/app/hadoop-2.7.3/etc/hadoop/),但我們只對(duì)一部分的項(xiàng)進(jìn)行配置,沒有配置的項(xiàng)都將使用默認(rèn)值。配置項(xiàng)是以xml的格式來進(jìn)行的,最簡化配置如下:

  • 配置hadoop-env.sh
    shell> vi hadoop-env.sh

    在hadoop-env.sh配置文件中加入以下內(nèi)容:

    export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51 # JDK路徑

  • 配置core-site.xml
    shell> vi core-site.xml

    在core-site.xml配置文件中加入以下內(nèi)容:

    <configuration>
    `<property>` `<name>fs.defaultFS</name>` `<value>hdfs://note1:9000</value>` `</property>`
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/HADOOP/apps/hadoop-2.6.1/tmp</value>
    </property>
    </configuration>

  • 配置hdfs-site.xml
    在用戶目錄下(/home/hadoop)創(chuàng)建一個(gè)data目錄,用來存放HDFS產(chǎn)生的數(shù)據(jù)。然后對(duì)hdfs-site.xml進(jìn)行配置
    shell> mkdir /home/hadoop/data
    shell> vi hdfs-site.xml

    在hdfs-site.xml配置文件中加入以下內(nèi)容:

    <configuration>
    `<property>` `<name>dfs.namenode.name.dir</name>` `<value>/home/hadoop/data/name</value>` `</property>`
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop/data/data</value>
    </property>
    `<property>` `<name>dfs.replication</name>` `<value>3</value>` `</property>`
    <property>
    <name>dfs.secondary.http.address</name>
    <value>note2:50090</value>
    </property>
    </configuration>

  • 配置mapred-site.xml
    shell> vi mapred-site.xml

    在mapred-site.xml配置文件中加入以下內(nèi)容:

    <configuration>
    ``
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>

  • 配置yarn-site.xml
    shell> vi yarn-site.xml

    在yarn-site.xml配置文件中加入以下內(nèi)容:

    <configuration>
    `<property>` `<name>yarn.resourcemanager.hostname</name>` `<value>hadoop01</value>` `</property>`
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>

  • 配置salves
    salves文件配置的內(nèi)容是集群的主機(jī)地址
    shell> vi salves

    在salves配置文件中加入以下內(nèi)容:

    note1 #主機(jī)名,通過/etc/hosts文件映射為IP地址
    note2
    note3

注意:以上所有配置(除了免密登錄外,免密登錄只需要在NameNode節(jié)點(diǎn)配置即可)都要在所有節(jié)點(diǎn)服務(wù)器進(jìn)行配置。

啟動(dòng)集群

  • 初始化HDFS集群
    bin/hadoop namenode -format
  • 啟動(dòng)HDFS集群
    sbin/start-dfs.sh
  • 啟動(dòng)YARN集群
    sbin/start-yarn.sh

當(dāng)然,你也可以使用sbin/start-all.sh這個(gè)命令同時(shí)把HDFS和YARN集群啟動(dòng),但是在做實(shí)驗(yàn)時(shí)不建議這樣做,因?yàn)檫@樣啟動(dòng)出現(xiàn)問題就不好定位了。在實(shí)際生產(chǎn)中,如果集群數(shù)量比較大,可以使用腳本進(jìn)行啟動(dòng)。

注意:一般情況下HDFS和YARN集群的主節(jié)點(diǎn)(NameNode和ResourceManager物理上都是在同一服務(wù)器的)使用命令進(jìn)行啟動(dòng)即可,其他節(jié)點(diǎn)會(huì)被主節(jié)點(diǎn)通過免密登錄自動(dòng)啟動(dòng)的。

測試

1、啟動(dòng)HDFS集群成功,通過jps命令查看,進(jìn)程2521 為NameNode進(jìn)程


啟動(dòng)HDFS集群

2、啟動(dòng)Yarn集群成功,通過jps命令查看,進(jìn)程2803位 ResourceManager進(jìn)程


啟動(dòng)yarn集群

3、在瀏覽器查看HDFS集群(訪問主節(jié)點(diǎn)的50070端口即可),瀏覽器中輸入192.168.88.3:50070


HDFS集群信息

4、停止Hadoop集群,可以分別停止(分別使用stop-dfs.shstop-yarn.sh),當(dāng)然你也可以一步停止集群(使用stop-all.sh

停止集群

至此,Hadoop集群搭建完畢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容