Hadoop是一個(gè)能夠讓用戶輕松架構(gòu)和使用的分布式計(jì)算平臺(tái)。為了更好演示集群分布,本文沒(méi)有使用一臺(tái)電腦上構(gòu)建多個(gè)虛擬機(jī)的方法來(lái)模擬集群,而是使用三臺(tái)電腦來(lái)搭建一個(gè)小型分布式集群環(huán)境安裝。本文記錄如何搭建并配置Hadoop分布式集群環(huán)境。
一臺(tái)Ubuntu主機(jī)系統(tǒng)作Master,一臺(tái)Ubuntu主機(jī)系統(tǒng)做slave01,一臺(tái)Ubuntu主機(jī)系統(tǒng)做slave02。三臺(tái)主機(jī)機(jī)器處于同一局域網(wǎng)下。
這里使用三臺(tái)主機(jī)搭建分布式集群環(huán)境,更多臺(tái)機(jī)器同樣可以使用如下配置。
IP在不同局域網(wǎng)環(huán)境下有可能不同,可以用ifconfig命令查看當(dāng)前主機(jī)打IP。
ifconfig
Shell 命令
即可獲得當(dāng)前主機(jī)的IP在局域網(wǎng)地址,如下圖:
主機(jī)名稱 | IP地址 |
---|---|
master | 192.168.1.104 |
slave01 | 192.168.1.107 |
slave02 | 192.168.1.108 |
三臺(tái)電腦主機(jī)的用戶名均為hadoop.
三臺(tái)機(jī)器可以ping雙方的ip來(lái)測(cè)試三臺(tái)電腦的連通性。
在master節(jié)點(diǎn)主機(jī)上的Shell中運(yùn)行如下命令,測(cè)試能否連接到slave01節(jié)點(diǎn)主機(jī)
ping 192.168.1.107
如果出現(xiàn)如下圖,說(shuō)明連接成功
sudo vim /etc/hostname
Shell 命令
master的/etc/hostname添加如下配置:
master
同樣slave01的/etc/hostname添加如下配置:
slave01
同樣slave02的/etc/hostname添加如下配置:
slave02
重啟三臺(tái)電腦,重啟后在終端Shell中才會(huì)看到機(jī)器名的變化,如下圖:
sudo vim /etc/hosts
Shell 命令
配置如下:
127.0.0.1 localhost192.168.1.104 master192.168.1.107 slave01192.168.1.108 slave02
三臺(tái)主機(jī)電腦分別運(yùn)行如下命令,測(cè)試能否連接到本地localhost
ssh localhost
Shell 命令
登錄成功會(huì)顯示如下結(jié)果:
Last login: Mon Feb 29 18:29:55 2016 from ::1
如果不能登錄本地,請(qǐng)運(yùn)行如下命令,安裝openssh-server,并生成ssh公鑰。
sudo apt-get openssh-server
ssh-keygen -t rsa -P ''
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
Shell 命令
在保證了三臺(tái)主機(jī)電腦都能連接到本地localhost后,還需要讓master主機(jī)免密碼登錄slave01和slave02主機(jī)。在master執(zhí)行如下命令,將master的id_rsa.pub傳送給兩臺(tái)slave主機(jī)。
scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@slave02:/home/hadoop/
Shell 命令
在slave01,slave02主機(jī)上分別運(yùn)行l(wèi)s命令
ls ~
Shell 命令
可以看到slave01、slave02主機(jī)分別接收到id_rsa.pub文件
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
Shell 命令
如果master主機(jī)和slave01、slave02主機(jī)的用戶名一樣,那么在master主機(jī)上直接執(zhí)行如下測(cè)試命令,即可讓master主機(jī)免密碼登錄slave01、slave02主機(jī)。
ssh slave01
Shell 命令
如果master主機(jī)和slave01主機(jī)的用戶名不一樣,還需要在master修改~/.ssh/config文件,如果沒(méi)有此文件,自己創(chuàng)建文件。
Host master user RuanrcHost slave01 user hadoop
然后master主機(jī)再執(zhí)行免密碼登錄:
ssh slave01
Shell 命令
分別在master主機(jī)和slave01、slave02主機(jī)上安裝JDK和Hadoop,并加入環(huán)境變量。
分別在master主機(jī)和slave01,slave02主機(jī)上執(zhí)行安裝JDK的操作
sudo apt-get install default-jdk
Shell 命令
編輯~/.bashrc文件,添加如下內(nèi)容:
export JAVA_HOME=/usr/lib/jvm/default-java
接著讓環(huán)境變量生效,執(zhí)行如下代碼:
source ~/.bashrc
Shell 命令
先在master主機(jī)上做安裝Hadoop,暫時(shí)不需要在slave01,slave02主機(jī)上安裝Hadoop.稍后會(huì)把master配置好的Hadoop發(fā)送給slave01,slave02.
在master主機(jī)執(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/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
接著讓環(huán)境變量生效,執(zhí)行如下代碼:
source ~/.bashrc
Shell 命令
修改master主機(jī)修改Hadoop如下配置文件,這些配置文件都位于/usr/local/hadoop/etc/hadoop目錄下。
修改slaves:
這里把DataNode的主機(jī)名寫入該文件,每行一個(gè)。這里讓master節(jié)點(diǎn)主機(jī)僅作為NameNode使用。
slave01slave02
修改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ù)制到各個(gè)節(jié)點(diǎn)上。之前有跑過(guò)偽分布式模式,建議在切換到集群模式前先刪除之前的臨時(shí)文件。在 master 節(jié)點(diǎn)主機(jī)上執(zhí)行:
cd /usr/local/
rm -rf ./hadoop/tmp # 刪除臨時(shí)文件
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é)點(diǎn)上執(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 命令
在master主機(jī)上執(zhí)行如下命令:
cd /usr/local/hadoop
bin/hdfs namenode -format
sbin/start-all.sh
Shell 命令
運(yùn)行后,在master,slave01,slave02運(yùn)行jps命令,查看:
jps
Shell 命令
master運(yùn)行jps后,如下圖:
聯(lián)系客服