Hadoop分散式叢集安裝配置步驟
阿新 • • 發佈:2019-01-04
之前介紹過Hadoop偽分散式模式的安裝配置步驟,現在記錄一下分散式叢集的安裝配置步驟,本文使用3臺測試伺服器,下面是各伺服器的角色:
- node1:NameNode, DataNode, NodeManager
- node2:SecondaryNameNode, DataNode, NodeManager, ResourceManager
- node3:DataNode, NodeManager, JobHistoryServer
1. 配置hosts檔案
本文使用RedHat是在 /etc/hosts,新增3臺測試伺服器的ip/hostname對應關係(根據伺服器實際情況修改下面的值):
$ vi /etc/hosts
分別修改所有的伺服器
2. 依賴軟體
2.1 Java
Hadoop 2.7及以上版本需要Java 7,之前的版本支援Java 6,本文使用Hadoop 2.7.3版本,Java 8(本文省略安裝步驟)
下載連結:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.2 SSH
叢集、單節點模式都需要用到SSH登陸,本文省略安裝步驟
3. 建立使用者和群組
使用groupadd和useradd建立需要的群組和使用者:
$ groupadd hadoop
$ useradd -g hadoop hdfs
$ useradd -g hadoop yarn
$ useradd -g hadoop mapred
使用passwd修改使用者的密碼:
$ passwd hdfs
$ passwd yarn
$ passwd mapred
分別修改所有的伺服器
4. SSH無密碼登入驗證配置
4.1 在NameNode節點切換到hdfs使用者,su - hdfs
# su - hdfs
$ pwd
/home/hdfs
4.2 在NameNode節點執行以下命令在hdfs使用者的主資料夾生成金鑰和加入授權
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
4.3 把生成的授權檔案複製到其餘的DataNode節點伺服器,用於在NameNode可以通過start-dfs.sh啟動所有DataNode節點
$ scp ~/.ssh/authorized_keys [email protected]:/home/hdfs/.ssh/
$ scp ~/.ssh/authorized_keys [email protected]:/home/hdfs/.ssh/
注意,如果目標伺服器的authorized_keys檔案是非空的,需要複製生成的授權檔案文字追加到目標伺服器的authorized_keys檔案,否則原檔案會被覆蓋
4.4 在ResourceManager節點切換到yarn使用者,su - yarn
# su - yarn
$ pwd
/home/yarn
4.5 在ResourceManager節點執行4.2的命令在yarn使用者的主資料夾生成金鑰和加入授權
4.6 把生成的授權檔案複製到其餘的NodeManager節點伺服器,用於在ResourceManager可以通過start-yarn.sh啟動所有NodeManager節點
$ scp ~/.ssh/authorized_keys [email protected]:/home/yarn/.ssh/
$ scp ~/.ssh/authorized_keys [email protected]:/home/yarn/.ssh/
同樣地,如果目標伺服器的authorized_keys檔案是非空的,需要複製生成的授權檔案文字追加到目標伺服器的authorized_keys檔案,否則原檔案會被覆蓋
5. 下載和解壓Hadoop
5.1 下載連結
http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
* 上面的下載link使用的是其中一個映象
* 可自行修改上面的link下載相應的版本
* 如果不能訪問公網,則需要自行下載然後上傳到伺服器
5.2 執行以下命令解壓
# tar xvf hadoop-2.7.3.tar.gz
6. 修改環境變數
6.1 修改解壓目錄下面的etc/hadoop/hadoop-env.sh、yarn-env.sh和mapred-env.sh ,根據伺服器實際情況,新增或新增下面2行
# 指定JAVA安裝根目錄
export JAVA_HOME=/usr/java/latest
# 指定HADOOP安裝根目錄(上述解壓的目錄)
export HADOOP_PREFIX=/usr/local/hadoop-2.7.3
6.2 執行以下命令測試一下環境變數是否配置成功
$ cd hadoop-2.7.3
$ bin/hadoop
如果出現類似以下結果證明配置成功
7. 修改配置檔案
7.1 修改解壓目錄下面的etc/hadoop/core-site.xml,定義一些基本的配置,例如NameNode的ip、啟動的埠等等:
7.2 修改解壓目錄下面的etc/hadoop/hdfs-site.xml,定義複製的數量,本文使用2,定義secondary namenode的伺服器和埠,預設是和namenode部署在一起,但最好分開:
7.3 修改解壓目錄下面的etc/hadoop/yarn-site.xml,定義ResourceManager的伺服器ip等:
7.4 修改解壓目錄下面的etc/hadoop/mapred-site.xml:
7.5 分別在NameNode和ResourceManager節點修改解壓目錄下面的etc/hadoop/slaves,分別把對應的所有DataNode和NodeManager節點新增進去:
xxx.100
xxx.101
xxx.102
8. 在NameNode節點執行以下命令格式化Hadoop的檔案系統
$ su - hdfs
$ bin/hdfs namenode -format
* 檢查一下輸出的日誌,如果沒有出現ERROR就證明格式化成功
* 關鍵INFO是common.Storage: Storage directory xxx has been successfully formatted和util.ExitUtil: Exiting with status 0
9. 在NameNode節點執行以下命令啟動NameNode、SecondaryNameNode和所有的DataNode
$ su - hdfs
$ sbin/start-dfs.sh
* 日誌檔案預設儲存在$HADOOP_HOME/logs
* 檢查一下輸出的日誌,如果沒有出現ERROR就證明啟動成功
10. 檢視NameNode和SecondaryNameNode狀態
10.1 啟動成功後可以分別訪問http://namenodeip:50070/和http://secondarynamenodeip:50090/ 檢視狀態
10.2 執行下面命令檢視狀態
$ bin/hdfs dfsadmin -report
$ bin/hdfs fsck /
11. 在ResourceManager節點執行以下命令啟動ResourceManager和所有的NodeManager
$ su - yarn
$ sbin/start-yarn.sh
* 日誌檔案預設儲存在$HADOOP_HOME/logs
* 檢查一下輸出的日誌,如果沒有出現ERROR就證明啟動成功
注意,此版本的start-yarn.sh是不會啟動ProxyServer的,因為已經被註釋掉,而且yarn-default.xml裡面沒有定義yarn.web-proxy.address,那麼ResourceManager時會同時作為ProxyServer執行
# start proxyserver
#"$bin"/yarn-daemon.sh --config $YARN_CONF_DIR start proxyserver
12. 檢視ResourceManager資訊頁面
啟動成功後可以訪問http://ip:8088/ 檢視資訊
13. 啟動JobHistoryServer
13.1 執行以下命令在HDFS建立/tmp/臨時目錄並修改許可權,這裡為了方面設定777
$ bin/hdfs dfs -mkdir -p /tmp/
$ bin/hdfs dfs -chmod -R 777 /tmp/
13.2 在JobHistoryServer節點執行以下命令啟動JobHistoryServer
$ su - mapred
$ sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver
* $HADOOP_CONF_DIR是$HADOOP_PREFIX/etc/hadoop/目錄
* 該命令會在HDFS建立/tmp/hadoop-yarn/staging/history/done和/tmp/hadoop-yarn/staging/history/done_intermediate目錄,如果之前沒有修改目錄許可權會遇到以下錯誤(檢視日誌mapred-mapred-historyserver-xxx.log):
13.3 檢視JobHistory資訊頁面
啟動成功後可以訪問http://ip:19888/ 檢視資訊
14. 停止命令
14.1 停止NameNode、SecondaryNameNode和所有DataNode
$ su - hdfs
$ sbin/stop-dfs.sh
14.2 停止ResourceManager和所有NodeManager
$ su - yarn
$ sbin/stop-yarn.sh
14.3 停止JobHistoryServer
$ su - mapred
$ sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver
* $HADOOP_CONF_DIR是$HADOOP_PREFIX/etc/hadoop/目錄
END...O(∩_∩)O
- node1:NameNode, DataNode, NodeManager
- node2:SecondaryNameNode, DataNode, NodeManager, ResourceManager
- node3:DataNode, NodeManager, JobHistoryServer
1. 配置hosts檔案
本文使用RedHat是在 /etc/hosts,新增3臺測試伺服器的ip/hostname對應關係(根據伺服器實際情況修改下面的值):
$ vi /etc/hosts
xxx.100 node1
xxx.101 node2
xxx.102 node3
分別修改所有的伺服器
2. 依賴軟體
2.1 Java
Hadoop 2.7及以上版本需要Java 7,之前的版本支援Java 6,本文使用Hadoop 2.7.3版本,Java 8(本文省略安裝步驟)
下載連結:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.2 SSH
叢集、單節點模式都需要用到SSH登陸,本文省略安裝步驟
3. 建立使用者和群組
使用groupadd和useradd建立需要的群組和使用者:
$ groupadd hadoop
$ useradd -g hadoop hdfs
$ useradd -g hadoop yarn
$ useradd -g hadoop mapred
使用passwd修改使用者的密碼:
$ passwd hdfs
$ passwd yarn
$ passwd mapred
分別修改所有的伺服器
4. SSH無密碼登入驗證配置
4.1 在NameNode節點切換到hdfs使用者,su - hdfs
# su - hdfs
$ pwd
/home/hdfs
4.2 在NameNode節點執行以下命令在hdfs使用者的主資料夾生成金鑰和加入授權
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Your identification has been saved in /home/hdfs/.ssh/id_rsa.
Your public key has been saved in /home/hdfs/.ssh/id_rsa.pub.
The key fingerprint is:
xxxxxx [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| xxx |
+-----------------+
4.3 把生成的授權檔案複製到其餘的DataNode節點伺服器,用於在NameNode可以通過start-dfs.sh啟動所有DataNode節點
$ scp ~/.ssh/authorized_keys [email protected]:/home/hdfs/.ssh/
$ scp ~/.ssh/authorized_keys [email protected]:/home/hdfs/.ssh/
注意,如果目標伺服器的authorized_keys檔案是非空的,需要複製生成的授權檔案文字追加到目標伺服器的authorized_keys檔案,否則原檔案會被覆蓋
$ scp ~/.ssh/authorized_keys [email protected]:/home/hdfs/.ssh/
The authenticity of host 'xxx (xxx)' can't be established.
RSA key fingerprint is xxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (RSA) to the list of known hosts.
[email protected]'s password: (此處輸入被訪問伺服器的密碼)
authorized_keys 100% 397 0.4KB/s 00:00
4.4 在ResourceManager節點切換到yarn使用者,su - yarn
# su - yarn
$ pwd
/home/yarn
4.5 在ResourceManager節點執行4.2的命令在yarn使用者的主資料夾生成金鑰和加入授權
4.6 把生成的授權檔案複製到其餘的NodeManager節點伺服器,用於在ResourceManager可以通過start-yarn.sh啟動所有NodeManager節點
$ scp ~/.ssh/authorized_keys [email protected]:/home/yarn/.ssh/
$ scp ~/.ssh/authorized_keys [email protected]:/home/yarn/.ssh/
同樣地,如果目標伺服器的authorized_keys檔案是非空的,需要複製生成的授權檔案文字追加到目標伺服器的authorized_keys檔案,否則原檔案會被覆蓋
5. 下載和解壓Hadoop
5.1 下載連結
http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
* 上面的下載link使用的是其中一個映象
* 可自行修改上面的link下載相應的版本
* 如果不能訪問公網,則需要自行下載然後上傳到伺服器
5.2 執行以下命令解壓
# tar xvf hadoop-2.7.3.tar.gz
6. 修改環境變數
6.1 修改解壓目錄下面的etc/hadoop/hadoop-env.sh、yarn-env.sh和mapred-env.sh ,根據伺服器實際情況,新增或新增下面2行
# 指定JAVA安裝根目錄
export JAVA_HOME=/usr/java/latest
# 指定HADOOP安裝根目錄(上述解壓的目錄)
export HADOOP_PREFIX=/usr/local/hadoop-2.7.3
6.2 執行以下命令測試一下環境變數是否配置成功
$ cd hadoop-2.7.3
$ bin/hadoop
如果出現類似以下結果證明配置成功
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
fs run a generic filesystem user client
version print the version
jar <jar> run a jar file
checknative [-a|-h] check native hadoop and compression libraries availability
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath prints the class path needed to get the
credential interact with credential providers
Hadoop jar and the required libraries
daemonlog get/set the log level for each daemon
trace view and modify Hadoop tracing settings
or
CLASSNAME run the class named CLASSNAME
Most commands print help when invoked w/o parameters.
7. 修改配置檔案
7.1 修改解壓目錄下面的etc/hadoop/core-site.xml,定義一些基本的配置,例如NameNode的ip、啟動的埠等等:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://xxx.100:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> </configuration>
7.2 修改解壓目錄下面的etc/hadoop/hdfs-site.xml,定義複製的數量,本文使用2,定義secondary namenode的伺服器和埠,預設是和namenode部署在一起,但最好分開:
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>xxx.101:50090</value> </property> <property> <name>dfs.namenode.secondary.https-address</name> <value>xxx.101:50091</value> </property> </configuration>
7.3 修改解壓目錄下面的etc/hadoop/yarn-site.xml,定義ResourceManager的伺服器ip等:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>xxx.101</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
7.4 修改解壓目錄下面的etc/hadoop/mapred-site.xml:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
7.5 分別在NameNode和ResourceManager節點修改解壓目錄下面的etc/hadoop/slaves,分別把對應的所有DataNode和NodeManager節點新增進去:
xxx.100
xxx.101
xxx.102
8. 在NameNode節點執行以下命令格式化Hadoop的檔案系統
$ su - hdfs
$ bin/hdfs namenode -format
* 檢查一下輸出的日誌,如果沒有出現ERROR就證明格式化成功
* 關鍵INFO是common.Storage: Storage directory xxx has been successfully formatted和util.ExitUtil: Exiting with status 0
9. 在NameNode節點執行以下命令啟動NameNode、SecondaryNameNode和所有的DataNode
$ su - hdfs
$ sbin/start-dfs.sh
* 日誌檔案預設儲存在$HADOOP_HOME/logs
* 檢查一下輸出的日誌,如果沒有出現ERROR就證明啟動成功
10. 檢視NameNode和SecondaryNameNode狀態
10.1 啟動成功後可以分別訪問http://namenodeip:50070/和http://secondarynamenodeip:50090/ 檢視狀態
10.2 執行下面命令檢視狀態
$ bin/hdfs dfsadmin -report
$ bin/hdfs fsck /
11. 在ResourceManager節點執行以下命令啟動ResourceManager和所有的NodeManager
$ su - yarn
$ sbin/start-yarn.sh
* 日誌檔案預設儲存在$HADOOP_HOME/logs
* 檢查一下輸出的日誌,如果沒有出現ERROR就證明啟動成功
注意,此版本的start-yarn.sh是不會啟動ProxyServer的,因為已經被註釋掉,而且yarn-default.xml裡面沒有定義yarn.web-proxy.address,那麼ResourceManager時會同時作為ProxyServer執行
# start proxyserver
#"$bin"/yarn-daemon.sh --config $YARN_CONF_DIR start proxyserver
12. 檢視ResourceManager資訊頁面
啟動成功後可以訪問http://ip:8088/ 檢視資訊
13. 啟動JobHistoryServer
13.1 執行以下命令在HDFS建立/tmp/臨時目錄並修改許可權,這裡為了方面設定777
$ bin/hdfs dfs -mkdir -p /tmp/
$ bin/hdfs dfs -chmod -R 777 /tmp/
13.2 在JobHistoryServer節點執行以下命令啟動JobHistoryServer
$ su - mapred
$ sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver
* $HADOOP_CONF_DIR是$HADOOP_PREFIX/etc/hadoop/目錄
* 該命令會在HDFS建立/tmp/hadoop-yarn/staging/history/done和/tmp/hadoop-yarn/staging/history/done_intermediate目錄,如果之前沒有修改目錄許可權會遇到以下錯誤(檢視日誌mapred-mapred-historyserver-xxx.log):
FATAL org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer: Error starting JobHistoryServer
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Error creating done directory: [hdfs://xxx.100:9000/tmp/hadoop-yarn/staging/history/done]
at org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager.tryCreatingHistoryDirs(HistoryFileManager.java:638)
at org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager.createHistoryDirs(HistoryFileManager.java:584)
at org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager.serviceInit(HistoryFileManager.java:552)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
at org.apache.hadoop.mapreduce.v2.hs.JobHistory.serviceInit(JobHistory.java:94)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:107)
at org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer.serviceInit(JobHistoryServer.java:143)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
at org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer.launchJobHistoryServer(JobHistoryServer.java:221)
at org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer.main(JobHistoryServer.java:231)
13.3 檢視JobHistory資訊頁面
啟動成功後可以訪問http://ip:19888/ 檢視資訊
14. 停止命令
14.1 停止NameNode、SecondaryNameNode和所有DataNode
$ su - hdfs
$ sbin/stop-dfs.sh
14.2 停止ResourceManager和所有NodeManager
$ su - yarn
$ sbin/stop-yarn.sh
14.3 停止JobHistoryServer
$ su - mapred
$ sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver
* $HADOOP_CONF_DIR是$HADOOP_PREFIX/etc/hadoop/目錄
END...O(∩_∩)O