1. 程式人生 > >Hadoop分散式叢集安裝配置步驟

Hadoop分散式叢集安裝配置步驟

之前介紹過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

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