Hadoop2.x 偽分散式環境搭建及測試驗證

作者:Dennis 日期:2018-08-09

前置條件:

Linux 虛擬機器一臺,版本為 CentOS 7.4,假設 IP 地址為 192.168.159.181,並修改如下:

  1. 修改/etc/hostname 的內容為 hadoop01 說明:修改了主機名之後需要重啟才能生效。
  2. 修改/etc/hosts 的內容為

    備註:配置這裡主要是想通過域名或者IP地址找到相應的機器

127.0.0.1 localhost

192.168.159.181 hadoop01

  1. 已安裝好 Oracle JDK,且 JAVA_HOME 值為/usr/java/jdk1.8.0_171-amd64/jre。安裝過程可參考部落格: https://blog.csdn.net/gobitan/article/details/80993354 CentOS7_64 位作業系統模板搭建

第一步:Hadoop 安裝包下載

上傳安裝包到/root 目錄

第二步:解壓 hadoop 包

[[email protected] ~]# cd /opt

[[email protected] opt]# tar zxf /root/hadoop-2.7.3.tar.gz

[[email protected] opt]# cd hadoop-2.7.3/

第三步:配置Hadoop

  1. 配置 hadoop-env.sh

編輯 etc/hadoop/hadoop-env.sh,修改 JAVA_HOME 的值如下: # The java implementation to use.

export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64/jre

備註:這樣做是避免,Hadoop配置檔案中讀不到$JAVA_HOME而報錯。

  1. 配置core-site.xml

  備註:hadoop公共模組基本配置檔案

編輯 etc/hadoop/core-site.xml,修改如下:

<!-- 指定HADOOP所使用的檔案系統schema(URI),HDFS的老大(NameNode)的地址 -->

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://localhost:9000</value>

</property>

<property>

 <!-- 指定hadoop執行時產生檔案的儲存目錄 -->

<name>hadoop.tmp.dir</name>

<value>/opt/hadoop-2.7.3/hadoop-tmp</value>

</property>

</configuration>

說明:hadoop.tmp.dir 預設值為"/tmp/hadoop-${user.name}"。Linux 作業系統重啟後,這個目錄會被清空,這可能導致資料丟失,因此需要修改。

  1. 配置 hdfs-site.xml

  備註:HDFS系統的配置檔案

編輯 etc/hadoop/hdfs-site.xml,修改如下:

<!-- 指定HDFS副本的數量 -->

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

  1. 配置 SSH 無密登入本機

在執行啟動指令碼的時候,系統會提示要輸入密碼驗證,它其實是一個遠端登入啟動指令碼的機制。

通過SSH遠端到你配置的節點上去啟動程序。即便你的節點是在本地,它也是一樣的方式。

因此當節點N多的時候,要N次以上輸入密碼驗證。為了解決這個問題,可以配置SSH免登入,

[[email protected] hadoop-2.7.3]# ssh-keygen -t rsa

[[email protected] hadoop-2.7.3]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

執行如下命令驗證 SSH 配置

[[email protected]7 hadoop-2.7.3]# ssh localhost

這個過程不需要輸入密碼了,但之前是需要的。

第四步:格式化HDFS 檔案系統

[[email protected] hadoop-2.7.3]# bin/hdfs namenode -format  如果執行成功,會在日誌末尾看到格式化成功的提示,如下:

INFO common.Storage: Storage directory /opt/hadoop-2.7.3/hadoop-tmp/dfs/name has been successfully formatted.

第五步:啟動HDFS 的NameNode 節點和 DataNode 節點

[[email protected] hadoop-2.7.3]# sbin/start-dfs.sh

Starting namenodes on [centos7]

centos7: starting namenode, logging to /opt/hadoop-2.7.3/logs/hadoop-root-namenode- centos7.out

localhost: starting datanode, logging to /opt/hadoop-2.7.3/logs/hadoop-root-datanode- centos7.out

Starting secondary namenodes [0.0.0.0]

0.0.0.0: starting secondarynamenode, logging to /opt/hadoop-2.7.3/logs/hadoop-root- secondarynamenode-centos7.out

檢視啟動的程序

[[email protected] hadoop-2.7.3]# jps

11301 SecondaryNameNode

11175 DataNode

11419 Jps

11087 NameNode [[email protected] hadoop-2.7.3]#

上面的啟動命令啟動了 HDFS 的管理節點 NameNode 和資料節點 DataNode,以及

NameNode 的輔助節點,即 SecondaryNameNode。

第六步:檢視HDFS 的NameNode 的Web 介面

http://192.168.159.181:50070

第七步:建立HDFS 目錄,以便執行 MapReduce 任務

[[email protected] hadoop-2.7.3]# bin/hdfs dfs -mkdir -p /user/root 注意:這裡的 root,如果你是其他使用者就換成相應的使用者名稱。

第八步:拷貝輸入檔案到分散式檔案系統

[[email protected] hadoop-2.7.3]# bin/hdfs dfs -put etc/hadoop input

這裡舉例拷貝et/hadoop 目錄下的檔案到HDFS 中。

檢視拷貝結果

[[email protected] hadoop-2.7.3] # bin/hdfs dfs -ls input

這個命令也可以:bin/hadoop fs -ls input     

第九步:執行Hadopo 自帶的WordCount 例子

[[email protected] hadoop-2.7.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'

說明:

  1. 這種模式是在本地執行 MapReduce 任務,如果需要在 YARN 上執行,請看本文後面的

YARN 配置;

  1. 這個例子是計算某個目錄下所有檔案中包含某個字串的次數,這裡是匹配'dfs[a-z.]+' 的次數;
  2. 中間有報如下錯誤, 可忽略。"18/05/14 00:03:54 WARN io.ReadaheadPool: Failed readahead on ifile EBADF: Bad file descriptor"

第十步:將結果從分散式檔案系統拷貝到本地

[[email protected] hadoop-2.7.3]# bin/hdfs dfs -get output output [[email protected] hadoop-2.7.3]# cat output/*

6 dfs.audit.logger

4 dfs.class

3 dfs.server.namenode.

2 dfs.period

2 dfs.audit.log.maxfilesize

2 dfs.audit.log.maxbackupindex

1 dfsmetrics.log

1 dfsadmin

1 dfs.servers

1 dfs.replication

1 dfs.file

或者直接檢視

[[email protected] hadoop-2.7.3]# bin/hdfs dfs -cat output/*

這裡可以看到每個包含dfs 的關鍵詞在 etc/hadoop 的所有檔案中出現的次數的統計。

第十一步:驗證結果

用 linux 命令來統計一下"dfs.class"的次數,結果為 4 次,與 mapreduce 統計的一致。[[email protected] hadoop-2.7.3]# grep -r 'dfs.class' etc/hadoop/

etc/hadoop/hadoop- metrics.properties:dfs.class=org.apache.hadoop.metrics.spi.NullContext etc/hadoop/hadoop- metrics.properties:#dfs.class=org.apache.hadoop.metrics.file.FileContext etc/hadoop/hadoop-metrics.properties:# dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext etc/hadoop/hadoop-metrics.properties:# dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 [[email protected] hadoop-2.7.3]#

另外,還可以通過YARN 來提交 job 任務。步驟如下:

第十二步:配置mapred-site.xml

[[email protected] hadoop-2.7.3]# 

mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

編輯 etc/hadoop/mapred-site.xml,修改如下:

備註:指定執行mapreduce的環境是yarn

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

第十三步:配置yarn-site.xml

編輯 etc/hadoop/yarn-site.xml,修改如下:

<configuration>

<property>

<!-- A comma separated list of services where service name should only contain a- zA-Z0-9_ and can not start with numbers -->

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

第十四步:啟動 YARN 的兩個節點ResourceManager 和NodeManager 注意:執行下面的命令之前,先確保已執行"sbin/start-dfs.sh"。[[email protected] hadoop-2.7.3]# sbin/start-yarn.sh

starting yarn daemons

starting resourcemanager, logging to /opt/hadoop-2.7.3/logs/yarn-root-resourcemanager- centos7.out

localhost: starting nodemanager, logging to /opt/hadoop-2.7.3/logs/yarn-root- nodemanager-centos7.out

第十五步:啟動 historyserver

Hadoop自帶了一個歷史伺服器,可以通過歷史伺服器檢視已經執行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等資訊。預設情況下,Hadoop歷史伺服器是沒有啟動的,我們可以通過下面的命令來啟動Hadoop歷史伺服器

[[email protected] hadoop-2.7.3]# sbin/mr-jobhistory-daemon.sh start historyserver

starting historyserver, logging to /opt/hadoop-2.7.3/logs/mapred-root-historyserver- centos7.out

確認程序已啟動

[[email protected] hadoop-2.7.3]# jps 1670 ResourceManager

1272 NameNode

1769 NodeManager

1370 DataNode

2234 Jps

1501 SecondaryNameNode

1838 JobHistoryServer [[email protected] hadoop-2.7.3]#

第十六步:檢視ResourceManager 的 Web 介面http://192.168.159.181:8088

第十七步:檢視 Job History Server 的web 頁面http://192.168.159.181:19888/

第十八步:執行 MapReduce job 任務

跟前面的命令一樣,但是我們將結果輸出目錄改為output-yarn,如下:

[[email protected] hadoop-2.7.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-2.7.3.jar grep input output-yarn 'dfs[a-z.]+'

檢視結果

[[email protected] hadoop-2.7.3]# bin/hdfs dfs -cat output-yarn/* 可以看到結果與之前執行的一致,這裡就不列出。

第十九步:停止 YARN

[[email protected] hadoop-2.7.3]# sbin/stop-yarn.sh

第十一步:閉主程式

最後,如果使用完畢,可以關閉 Hadoop。[[email protected] hadoop-2.7.3]# sbin/stop-dfs.sh

[[email protected] ~]# sbin/mr-jobhistory-daemon.sh stop historyserver