Hadoop集群配置

  • Hadoop 集群的安裝配置大致為如下流程:
  1. 選定一臺機器作為 Master
  2. 在 Master 節點上配置 hadoop 用戶、安裝 SSH server、安裝 Java 環境
  3. 在 Master 節點上安裝 Hadoop,并完成配置
  4. 在其他 Slave 節點上配置 hadoop 用戶、安裝 SSH server、安裝 Java 環境
  5. 將 Master 節點上的 /usr/local/hadoop 目錄復制到其他 Slave 節點上
  6. 在 Master 節點上開啟 Hadoop
  • 為便于區分,首先修改各個主機的主機名
sudo vim /etc/hostname

將Master主機的主機名修改為Master,Slave主機的主機名修改為Slave1.

  • 然后更改兩個主機的映射
sudo vim /etc/hosts

將文件內容改為

192.168.128.128   Master
192.168.128.129   Slave1

完成后應保證Master與Slave節點之間能ping通。

ping Master -c 3   # 只ping 3次,否則要按 Ctrl+c 中斷
ping Slave1 -c 3
  • 設置SSH免密碼登陸
    首先在Master節點中生成共鑰
cd ~/.ssh               # 如果沒有該目錄,先執行一次ssh localhost
rm ./id_rsa*            # 刪除之前生成的公匙(如果有)
ssh-keygen -t rsa       # 一直按回車就可以

然后將公鑰添加到Master節點的信任列表,使得Master可以SSH到本機

eversilver@debian:~/.ssh$ cat ./id_rsa.pub >> ~/.ssh/authorized_keys
eversilver@debian:~/.ssh$ ssh Master
The authenticity of host 'master (192.168.128.128)' can't be established.
ECDSA key fingerprint is 67:e8:69:98:28:91:04:20:5c:00:bb:6b:e8:bb:51:94.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'master,192.168.128.128' (ECDSA) to the list of known hosts.
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Mon May  8 09:59:42 2017 from 192.168.128.1
eversilver@debian:~$ 

同樣將公鑰傳遞給Slave1節點,并在Slave1上將其加入到其信任列表上。

eversilver@debian:~$ scp /home/eversilver/.ssh/id_rsa.pub eversilver@Slave1:/home/eversilver
The authenticity of host 'slave1 (192.168.128.129)' can't be established.
ECDSA key fingerprint is 67:e8:69:98:28:91:04:20:5c:00:bb:6b:e8:bb:51:94.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave1,192.168.128.129' (ECDSA) to the list of known hosts.
eversilver@slave1's password: 
id_rsa.pub                                                                                                                                                   100%  399     0.4KB/s   00:00    

在Slave1上執行

eversilver@debian:/usr/local/hadoop$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
eversilver@debian:/usr/local/hadoop$ rm ~/id_rsa.pub 
eversilver@debian:/usr/local/hadoop$ 

再在Master進行登陸

eversilver@debian:~$ ssh Slave1
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Mon May  8 12:05:08 2017 from 192.168.128.1
eversilver@debian:~$ 

說明配置成功

  • 配置Hadoop環境變量
HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:/$HADOOP_HOME/sbin:$PATH
  • 配置分布式環境
    集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這里僅設置了正常啟動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
  1. 文件 slaves,將作為 DataNode 的主機名寫入該文件,每行一個,默認為 localhost,所以在偽分布式配置時,節點即作為 NameNode 也作為 DataNode。分布式配置可以保留 localhost,也可以刪掉,讓 Master 節點僅作為 NameNode 使用。
    本教程讓 Master 節點僅作為 NameNode 使用,因此將文件中原來的 localhost 刪除,只添加一行內容:Slave1。
  2. 文件 core-site.xml 改為下面的配置:
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>
  1. 文件 hdfs-site.xml,dfs.replication 一般設為 3,但我們只有一個 Slave 節點,所以 dfs.replication 的值還是設為 1
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>
  1. 文件 mapred-site.xml
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>
  1. 文件 yarn-site.xml:
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
  • 將 Master 上的 /usr/local/Hadoop 文件夾復制到各個節點上。因為之前有跑過偽分布式模式,建議在切換到集群模式前先刪除之前的臨時文件。在 Master 節點上執行:
cd /usr/local
sudo rm -r ./hadoop/tmp     # 刪除 Hadoop 臨時文件
sudo rm -r ./hadoop/logs/*   # 刪除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先壓縮再復制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop

在 Slave1 節點上執行:

sudo rm -r /usr/local/hadoop    # 刪掉舊的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

如果有其他 Slave 節點,也要執行將 hadoop.master.tar.gz 傳輸到 Slave 節點、在 Slave 節點解壓文件的操作。

  • 首次啟動需要先在 Master 節點執行 NameNode 的格式化:
hdfs namenode -format       # 首次運行需要執行初始化,之后不需要
  • 接著可以啟動 hadoop 了,啟動需要在 Master 節點上進行:
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

通過命令 jps 可以查看各個節點所啟動的進程。正確的話,在 Master 節點上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程,如下:

eversilver@debian:/usr/local/hadoop$ jps
24178 NameNode
24356 SecondaryNameNode
24501 ResourceManager
13974 QuorumPeerMain
21607 NodeManager
19880 DataNode
24809 JobHistoryServer
24842 Jps

而在Slave1節點中可以看到DataNode以及NodeManager:

eversilver@debian:/usr/local/hadoop$ jps
6579 QuorumPeerMain
9044 DataNode
9141 NodeManager
7176 Kafka
9244 Jps

還需要在 Master 節點上通過命令 hdfs dfsadmin -report 查看 DataNode 是否正常啟動,如果 Live datanodes 不為 0 ,則說明集群啟動成功。

eversilver@debian:/usr/local/hadoop$ hdfs dfsadmin -report
Configured Capacity: 20091629568 (18.71 GB)
Present Capacity: 10727268352 (9.99 GB)
DFS Remaining: 10727243776 (9.99 GB)
DFS Used: 24576 (24 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Live datanodes (1):
Name: 192.168.128.129:50010 (Slave1)
Hostname: Slave1
Decommission Status : Normal
Configured Capacity: 20091629568 (18.71 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 9364361216 (8.72 GB)
DFS Remaining: 10727243776 (9.99 GB)
DFS Used%: 0.00%
DFS Remaining%: 53.39%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Mon May 08 14:11:54 CST 2017
eversilver@debian:/usr/local/hadoop$ 

上面顯示的DataNode數量為1.

  • 也可以通過 Web 頁面看到查看 DataNode 和 NameNode 的狀態:http://Master:50070/
  • 偽分布式、分布式配置切換時的注意事項
  1. 從分布式切換到偽分布式時,不要忘記修改 slaves 配置文件;
  2. 在兩者之間切換時,若遇到無法正常啟動的情況,可以刪除所涉及節點的臨時文件夾,這樣雖然之前的數據會被刪掉,但能保證集群正確啟動。所以如果集群以前能啟動,但后來啟動不了,特別是 DataNode 無法啟動,不妨試著刪除所有節點(包括 Slave 節點)上的 /usr/local/hadoop/tmp 文件夾,再重新執行一次 hdfs namenode -format,再次啟動試試。
  • 執行分布式實例
    首先創建 HDFS 上的用戶目錄:
hdfs dfs -mkdir -p /user/hadoop

將 /usr/local/hadoop/etc/hadoop 中的配置文件作為輸入文件復制到分布式文件系統中.并通過查看 DataNode 的狀態(占用大小有改變),輸入文件確實復制到了 DataNode 中:

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

接著就可以運行 MapReduce 作業了:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

運行時的輸出信息與偽分布式類似,會顯示 Job 的進度。


同樣可以通過 Web 界面查看任務進度 http://master:8088/cluster,在 Web 界面點擊 “Tracking UI” 這一列的 History 連接,可以看到任務的運行信息,如下圖所示:

執行完畢后的輸出結果:

關閉 Hadoop 集群也是在 Master 節點上執行的:

stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver

同偽分布式一樣,也可以不啟動 YARN,但要記得改掉 mapred-site.xml 的文件名。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容