Hadoop是一個能夠讓用戶輕松架構(gòu)和使用的分布式計算平臺。為了更好演示集群分布,本文沒有使用一臺電腦上構(gòu)建多個虛擬機的方法來模擬集群,而是使用三臺電腦來搭建一個小型分布式集群環(huán)境安裝。本文記錄如何搭建并配置Hadoop分布式集群環(huán)境。
集群機器一臺Ubuntu主機系統(tǒng)作Master,一臺Ubuntu主機系統(tǒng)做slave01,一臺Ubuntu主機系統(tǒng)做slave02。三臺主機機器處于同一局域網(wǎng)下。 這里使用三臺主機搭建分布式集群環(huán)境,更多臺機器同樣可以使用如下配置。 IP在不同局域網(wǎng)環(huán)境下有可能不同,可以用ifconfig命令查看當(dāng)前主機打IP。
Shell 命令 即可獲得當(dāng)前主機的IP在局域網(wǎng)地址,如下圖:
 三臺機器的名稱和IP如下, 主機名稱 | IP地址 |
---|
master | 192.168.1.104 | slave01 | 192.168.1.107 | slave02 | 192.168.1.108 |
三臺電腦主機的用戶名均為hadoop. 三臺機器可以ping雙方的ip來測試三臺電腦的連通性。 在master節(jié)點主機上的Shell中運行如下命令,測試能否連接到slave01節(jié)點主機 ping 192.168.1.107
如果出現(xiàn)如下圖,說明連接成功
 為了更好的在Shell中區(qū)分三臺主機,修改其顯示的主機名,執(zhí)行如下命令
Shell 命令 master的/etc/hostname添加如下配置: master
同樣slave01的/etc/hostname添加如下配置: slave01
同樣slave02的/etc/hostname添加如下配置: slave02
重啟三臺電腦,重啟后在終端Shell中才會看到機器名的變化,如下圖:
 修改三臺機器的/etc/hosts文件,添加同樣的配置:
Shell 命令 配置如下: 127.0.0.1 localhost
192.168.1.104 master
192.168.1.107 slave01
192.168.1.108 slave02
配置ssh無密碼登錄本機和訪問集群機器三臺主機電腦分別運行如下命令,測試能否連接到本地localhost Shell 命令 登錄成功會顯示如下結(jié)果: Last login: Mon Feb 29 18:29:55 2016 from ::1
如果不能登錄本地,請運行如下命令,安裝openssh-server,并生成ssh公鑰。 sudo apt-get openssh-server ssh-keygen -t rsa -P '' cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
Shell 命令 在保證了三臺主機電腦都能連接到本地localhost后,還需要讓master主機免密碼登錄slave01和slave02主機。在master執(zhí)行如下命令,將master的id_rsa.pub傳送給兩臺slave主機。 scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop/ scp ~/.ssh/id_rsa.pub hadoop@slave02:/home/hadoop/
Shell 命令 在slave01,slave02主機上分別運行l(wèi)s命令
Shell 命令 可以看到slave01、slave02主機分別接收到id_rsa.pub文件
 接著在slave01、slave02主機上將master的公鑰加入各自的節(jié)點上,在slave01和slave02執(zhí)行如下命令: cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub
Shell 命令 如果master主機和slave01、slave02主機的用戶名一樣,那么在master主機上直接執(zhí)行如下測試命令,即可讓master主機免密碼登錄slave01、slave02主機。
Shell 命令 如果master主機和slave01主機的用戶名不一樣,還需要在master修改~/.ssh/config文件,如果沒有此文件,自己創(chuàng)建文件。 Host master
user Ruanrc
Host slave01
user hadoop
然后master主機再執(zhí)行免密碼登錄:
Shell 命令 JDK和Hadoop安裝配置分別在master主機和slave01、slave02主機上安裝JDK和Hadoop,并加入環(huán)境變量。 安裝JDK分別在master主機和slave01,slave02主機上執(zhí)行安裝JDK的操作 sudo apt-get install default-jdk
Shell 命令 編輯~/.bashrc文件,添加如下內(nèi)容: export JAVA_HOME=/usr/lib/jvm/default-java
接著讓環(huán)境變量生效,執(zhí)行如下代碼: Shell 命令 安裝Hadoop先在master主機上做安裝Hadoop,暫時不需要在slave01,slave02主機上安裝Hadoop.稍后會把master配置好的Hadoop發(fā)送給slave01,slave02. 在master主機執(zhí)行如下操作: sudo tar -zxf ~/下載/hadoop-2.7.3.tar.gz -C /usr/local # 解壓到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.7.3/ ./hadoop # 將文件夾名改為hadoop sudo chown -R hadoop ./hadoop # 修改文件權(quán)限
Shell 命令 編輯~/.bashrc文件,添加如下內(nèi)容: export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
接著讓環(huán)境變量生效,執(zhí)行如下代碼:
Shell 命令 Hadoop集群配置修改master主機修改Hadoop如下配置文件,這些配置文件都位于/usr/local/hadoop/etc/hadoop目錄下。 修改slaves: 這里把DataNode的主機名寫入該文件,每行一個。這里讓master節(jié)點主機僅作為NameNode使用。 slave01
slave02
修改core-site.xml <configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
修改hdfs-site.xml: <configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
修改mapred-site.xml(復(fù)制mapred-site.xml.template,再修改文件名) <configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml <configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
配置好后,將 master 上的 /usr/local/Hadoop 文件夾復(fù)制到各個節(jié)點上。之前有跑過偽分布式模式,建議在切換到集群模式前先刪除之前的臨時文件。在 master 節(jié)點主機上執(zhí)行: cd /usr/local/ rm -rf ./hadoop/tmp # 刪除臨時文件 rm -rf ./hadoop/logs/* # 刪除日志文件 tar -zcf ~/hadoop.master.tar.gz ./hadoop cd ~ scp ./hadoop.master.tar.gz slave01:/home/hadoop scp ./hadoop.master.tar.gz slave02:/home/hadoop
Shell 命令 在slave01,slave02節(jié)點上執(zhí)行: sudo rm -rf /usr/local/hadoop/ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local sudo chown -R hadoop /usr/local/hadoop
Shell 命令 啟動hadoop集群在master主機上執(zhí)行如下命令: cd /usr/local/hadoop bin/hdfs namenode -format sbin/start-all.sh
Shell 命令 運行后,在master,slave01,slave02運行jps命令,查看:
Shell 命令 master運行jps后,如下圖:
 slave01、slave02運行jps,如下圖:


|