截止到今天,我已經在博客中給大家介紹了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》之"踽踽獨行"(七)中的第三部分:程序測試。
------------------------------大功告成,如有疑問,敬請留言----------------------------------------