《Hadoop》之"踽踽獨行"(十)快速搭建一個Hadoop完全分佈式集羣

截止到今天,我已經在博客中給大家介紹了hadoop的本地模式、僞分佈式搭建,並且在《Hadoop》之"踽踽獨行"(四)中也總結了在CentOS6.5平臺上搭建的hadoop2.7.3集羣的步驟。在那篇文章中,會涉及到一些原理,比如節點之間的SSH無密碼登錄,時間同步,防火牆設置以及在多節點之間的文件傳輸等等。當然,那樣的集羣搭建很適合理解搭建原理。

現在呢,hadoop集羣的搭建原理,我們也知道了,因此,我們可以通過一些手段,來快速的搭建hadoop多節點的完全分佈式集羣。

完全分佈式集羣(Fully-Distributed Cluster)的原理:

Hadoop的守護進程運行在由多臺主機搭建的集羣上,是真正的生產環境。我們需要在所有的主機上安裝JDK和Hadoop,組成相互連通的網絡。在主機間設置SSH免密碼登錄,把各從節點生成的公鑰添加到主節點的信任列表。

一、準備工作:

1、VMware軟件
2、操作平臺:CentOS-6.10-x86_64-bin-DVD1.iso
3、jdk-8u172-linux-x64.tar.gz
4、hadoop-2.7.3.tar.gz

二、快速搭建一個hadoop集羣

1、基本需求設置

第一步:在VMware上安裝一臺CentOS6.10虛擬機,命名爲CentOS_6.10_64_Fully_master。設置主機名爲master

創建普通用戶michael

第二步:如果沒有在第一步中創建普通用戶,那麼就可以root身份創建一個普通用戶michael。

[root@master ~]# useradd michael
[root@master ~]# passwd michael
New password:

第三步:配置網絡服務。配置NAT模式下的靜態IP。我配置的ip爲:192.168.80.10,你的ip需要查看你自己機器上的VMnet8虛擬網卡。測試虛擬機與物理機是否互通。不會配置的話可以查看文章《Linux系統》之"皮毛系列"(七) 網絡通信設置.

[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
.........
ONBOOT=yes           #修改成yes,開機自動啓用
..........
BOOTPROTO=static     #修改成static/none
..........
IPADDR=192.168.80.10    #追加IP地址,設置成與VMnet8虛擬網卡同一段位的地址
NETMASK=255.255.255.0   #追加子網掩碼,
GATEWAY=192.168.80.2    #追加網關,設置成VMnet8提供的網關,一般結尾都是2
DNS1=192.168.80.2       #追加DNS1,設置成與網關一致即可

第四步:修改/etc/hosts文件。在裏面追加

[root@master ~]# vim /etc/hosts
192.168.80.10  master       #綁定好名稱節點的ip與host
192.168.80.11  slave1       #綁定好數據節點的ip和host,這些爲克隆linux做準備
192.168.80.12  slave2
192.168.80.13  slave3
192.168.80.10  slave4

第五步:關閉防火牆

[root@master michael]# chkconfig iptables off           #永久關閉
[root@master michael]# chkconfig iptables --list        #查看狀態
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

第六步:配置SSH無密碼登錄。到這一步一定要切回普通用戶michael。之前都是root身份。

[michael@master ~]$ ssh-keygen -t rsa       #一路回車下去
[michael@master ~]$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys    #更名成authorized_keys
[michael@master ~]$ chmod 600 ~/.ssh/authorized_keys               #修改權限爲0600

第七步:準備jdk和hadoop安裝包。

在~/目錄下創建目錄apps,將jdk-8u172-linux-x64.tar.gz和hadoop-2.7.3.tar.gz 上傳到 ~/apps/目錄下。

第八步:解壓jdk和hadoop。(普通用戶身份)

#解壓軟件包
[michael@master apps]$ tar -zxv -f jdk-8u172-linux-x64.tar.gz
[michael@master apps]$ tar -zxv -f hadoop-2.7.3.tar.gz
#創建軟鏈接
[michael@master apps]$ ln -s jdk1.8.0_172/  jdk
[michael@master apps]$ ln -s hadoop-2.7.3 hadoop
#刪除軟件包,釋放空間
[michael@master apps]$ rm jdk-8u172-linux-x64.tar.gz
[michael@master apps]$ rm hadoop-2.7.3.tar.gz

第九步:配置jdk和hadoop的環境變量

[michael@master apps]$ vim ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export JAVA_HOME=/home/michael/apps/jdk                #jdk env
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
 
export HADOOP_HOME=/home/michael/apps/hadoop           #hadoop env
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

[michael@master apps]$ source ~/.bash_profile          #導入到當前bash,使環境變量生效

到此爲止,基本需求已經安裝完畢,建議重啓,使防火牆設置生效

2、配置Hadoop

第一步:在hadoop的根目錄~/apps/hadoop/下創建一個目錄tmp,用於設置配置文件信息和存儲以後產生的數據

[michael@master hadoop]$ pwd
/home/michael/apps/hadoop
[michael@master hadoop]$ mkdir tmp

第二步:修改core-site.xml

<configuration>
  <property>
        <name>fs.defaultFS</name>      #默認文件系統名稱,用於指定host,post
       <value>hdfs://master:9000</value>
  </property>
  <property>
       <name>hadoop.tmp.dir</name>  #指定臨時文件的存儲路徑
       <value>file:/home/michael/apps/hadoop/tmp</value>
  </property>
</configuration>

第三步:修改hdfs-site.xml

<configuration>
       <property>
            <name>dfs.replication</name>           #用於指定副本個數
            <value>3</value>
       </property>
       <property>
           <name>dfs.namenode.name.dir</name>      #用於指定namenode存儲路徑
           <value>file:/home/michael/apps/hadoop/tmp/dfs/name</value>
       </property>
       <property>
           <name>dfs.datanode.data.dir</name>      #用於指定datenode存儲路徑
           <value>file:/home/michael/apps/hadoop/tmp/dfs/data</value>
       </property>
</configuration>

第四步:修改mapred-site.xml。此目錄下沒有該文件,我們需要將mapred-site.xml.template 複製一份,改成此名,然後再修改。

<configuration>
         <property>
                <name>mapreduce.framework.name</name>     #使用yarn運行框架
                <value>yarn</value>
       </property>
       <property>
               <name>mapreduce.jobhistory.address</name>  # Server IPC host:port
               <value>master:10020</value>
       </property>
       <property>
                <name>mapreduce.jobhistory.webapp.address</name>
               <value>master:19888</value>      # Server Web UI host:port
       </property>
</configuration>

第五步:修改yarn-site.xml

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

第六步:修改hadoop-env.sh。打開此文件,重新設置JAVA_HOME的值,否則不能啓動。  

[michael@master hadoop]$ vim ~/apps/hadoop/etc/hadoop/hadoop-env.sh
# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/home/michael/apps/jdk

第七步:修改slaves文件。打開此文件,刪除默認的localhost,增加四個數據節點

[michael@master hadoop]$ vim ~/apps/hadoop/etc/hadoop/slaves
slave1
slave2
slave3
slave4

第八步:修改yarn-env.sh。我們最好也重新設置一下此文件的java_home。

# exportJAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/home/michael/apps/jdk         #增加內容
if ["$JAVA_HOME" != "" ]; then

3、克隆Linux

主機名master的虛擬機上完成了基本需求設置和配置hadoop這兩大步,剩下的就是克隆多個虛擬機,然後分別進行網絡配置和修改成主機名爲slave1,slave2,slave3,slave4了。

關閉虛擬機master,然後右鍵點擊master>>管理>>克隆>>下一步>>下一步>>創建完整克隆>>命名爲:CentOS_6.10_64_Fully_slave1>>等待完成。

第一步:修改網卡信息

修改/etc/udev/rules.d/70-persistent-net.rules。註釋掉eth0這一行,然後將eth1的name屬性改爲eth0。即如下:

[michael@master ~]$ vim /etc/udev/rules.d/70-persistent-net.rules
..........
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:79:95:88", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:78:66:9f", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

然後記住新的eth0的MAC地址,去修改/etc/sysconfig/network-scripts/ifcfg-eth0裏的信息,因此一會要重啓虛擬機,所以重啓網絡服務可以不進行。

ONBOOT=yes
.............
BOOTPROTO=static
HWADDR=00:0C:29:78:66:9f     #改成新的MAC地址
..........
IPADDR=192.168.80.11         #改成192.168.80.11
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=192.168.80.2

第二步:修改主機名

打開/etc/sysconfig/network文件,修改主機名爲slave1

[michael@master ~]$ vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=slave1      #改爲slave1

第三步:重啓機器。

再重複上面三步,分別配置主機名:

虛擬機名:CentOS_6.10_64_Fylly_slave2,主機名:slave2,ip:192.168.80.12。
虛擬機名:CentOS_6.10_64_Fylly_slave3,主機名:slave3,ip:192.168.80.13。
虛擬機名:CentOS_6.10_64_Fylly_slave4,主機名:slave4,ip:192.168.80.14。

原理分析:因爲是克隆,所有的克隆機器中就已有了jdk和hadoop,也不需要再生成公鑰和私鑰了,這些克隆機器上已經有了一對公鑰和私鑰。即master虛擬機上的那一對。可以直接進行無密登錄。

這裏有個建議:因爲是同一套公鑰和私鑰,建議在master虛擬機上ssh一下所有的克隆機器,測試一下是否是無密登錄。全部測試完,就ok了。(不連一遍的話,有可能對下面的操作有影響)

4、啓動和測試

第一步:格式化集羣

[michael@master ~]$ hdfs namenode -format
#這一步是格式化namenode,用於創建dfs/name/fsimage和edit文件

第二步:啓動集羣

[hyxy@master ~]$ start-all.sh
#使用這個腳本,啓動所有的守護線程,如:namenode,datenode,resourcemanager,datamanager,secondarynamenode

第三步:檢查守護線程

在master虛擬機下運行jps指令,應該至少有四個線程

[michael@master ~]$ jps
7845 Jps
6901 SecondaryNameNode
6709 NameNode
7047 ResourceManager

在slave虛擬機下運行jps指令,應該至少有三個線程

[michael@slave1 ~]$ jps
4262 Jps
3837 NodeManager
3726 DataNode

或者,在虛擬機內的瀏覽器上輸入master:50070   /   master:8088

再或者,在物理機的瀏覽器上輸入192.168.80.10:50070   /192.168.80.10:8088

第四步:測試項目    

測試就再累述了。可以參考《Hadoop》之"踽踽獨行"(七)中的第三部分:程序測試。

------------------------------大功告成,如有疑問,敬請留言----------------------------------------

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章