hadoop系列之偽分散式環境搭建及測試驗證
Hadoop2.x 偽分散式環境搭建及測試驗證
作者:Dennis 日期:2018-08-09
前置條件:
Linux 虛擬機器一臺,版本為 CentOS 7.4,假設 IP 地址為 192.168.159.181,並修改如下:
- 修改/etc/hostname 的內容為 hadoop01 說明:修改了主機名之後需要重啟才能生效。
- 修改/etc/hosts 的內容為
備註:配置這裡主要是想通過域名或者IP地址找到相應的機器
127.0.0.1 localhost
192.168.159.181 hadoop01
- 已安裝好 Oracle JDK,且 JAVA_HOME 值為/usr/java/jdk1.8.0_171-amd64/jre。安裝過程可參考部落格:
第一步: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
- 配置 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而報錯。
- 配置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 作業系統重啟後,這個目錄會被清空,這可能導致資料丟失,因此需要修改。
- 配置 hdfs-site.xml
備註:HDFS系統的配置檔案
編輯 etc/hadoop/hdfs-site.xml,修改如下:
<!-- 指定HDFS副本的數量 -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
- 配置 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.]+'
說明:
- 這種模式是在本地執行 MapReduce 任務,如果需要在 YARN 上執行,請看本文後面的
YARN 配置;
- 這個例子是計算某個目錄下所有檔案中包含某個字串的次數,這裡是匹配'dfs[a-z.]+' 的次數;
- 中間有報如下錯誤, 可忽略。"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