目的
本文檔介紹如何去安裝單節點hadoop叢集,以便你可以的了解和使用hadoop的HDFS和MapReduce.
環境:
os: CentOS release 6.5 (Final)
ip: 172.16.101.58
user:root
hadoop-2.9.0.tar.gz
SSH無密碼登入配置
因為本文檔使用root使用者安裝,是以需要配置好root使用者ssh無密碼登入本地節點
[root@sht-sgmhadoopdn-01 ~]#ssh-keygen -t rsa
[root@sht-sgmhadoopdn-01 .ssh]#cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[root@sht-sgmhadoopdn-01 ~]# ssh localhost
Java安裝和配置
[root@sht-sgmhadoopdn-01 ~]# cd /usr/java
[root@sht-sgmhadoopdn-01 java]# tar xf jdk-8u111-linux-x64.tar.gz
[root@sht-sgmhadoopdn-01 java]# chown -R root:root jdk1.8.0_111/
[root@sht-sgmhadoopdn-01 bin]# /usr/java/jdk1.8.0_111/bin/java -version
java version "1.8.0_111"
[root@sht-sgmhadoopdn-01 ~]# vim ~/.bash_profile
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
export JAVA_HOME=/usr/java/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export LD_LIBRARY_PATH=/home/bduser/hadoop/hadoop-2.7.3/lib/native/:$LD_LIBRARY_PATH
[root@sht-sgmhadoopdn-01 ~]# source .bash_profile
[root@sht-sgmhadoopdn-01 ~]# which java
/usr/java/jdk1.8.0_111/bin/java
下載下傳和解壓hadoop
[root@sht-sgmhadoopdn-01 local]# wget
http://www-us.apache.org/dist/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz[root@sht-sgmhadoopdn-01 local]# tar xf hadoop-2.9.0.tar.gz
[root@sht-sgmhadoopdn-01 ~]#vim .bash_profile
export HADOOP_HOME=/usr/local/hadoop-2.9.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
[root@sht-sgmhadoopdn-01 ~]# which hadoop
/usr/local/hadoop-2.9.0/bin/hadoop
[root@sht-sgmhadoopdn-01 local]# hadoop version
Hadoop 2.9.0
......
hadoop jar指令解析
jar <jar> run a jar file,如果是yarn,則需要使用hadoop yarn jar
将 input 檔案夾中的所有檔案作為輸入,篩選當中符合正規表達式 dfs[a-z.]+ 的單詞并統計出現的次數,最後輸出結果到 output 檔案夾中:
正規表達式:
[a-z]表示比對包含在a-z之中的任意一個字元
+ 表示比對之前的項1次或者多次
[root@sht-sgmhadoopdn-01 ~]# cd /usr/local/hadoop-2.9.0
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# cp etc/hadoop/*.xml input/
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar grep input output 'dfs[a-z.]+'
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# cat output/*
1dfsadmin
Hadoop配置檔案說明
(1)Hadoop 的運作方式是由配置檔案決定的(運作 Hadoop時會讀取配置檔案),是以如果需要從僞分布式模式切換回非分布式模式,需要删除 core-site.xml 中的配置項。
(2)僞分布式雖然隻需要配置 fs.defaultFS 和 dfs.replication 就可以運作(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數,則預設使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重新開機時有可能被系統清理掉,導緻必須重新執行 format 才行。是以我們進行了設定,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯
修改配置檔案
Hadoop 可以在單節點上以僞分布式的方式運作,Hadoop 守護程序以分離的 Java 程序來運作,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的檔案。
Hadoop 的配置檔案位于 /usr/local/hadoop/etc/hadoop/ 中,僞分布式需要修改2個配置檔案 core-site.xml 和 hdfs-site.xml 。Hadoop的配置檔案是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實作。
[root@sht-sgmhadoopdn-01 hadoop]#cat /usr/local/hadoop-2.9.0/etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.9.0/tmp</value>
<description>Abase for other temporary directories.</description>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
[root@sht-sgmhadoopdn-01 hadoop]#cat /usr/local/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
<name>dfs.replication</name>
<value>1</value>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-2.9.0/tmp/dfs/name</value>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-2.9.0/tmp/dfs/data</value>
[root@sht-sgmhadoopdn-01 hadoop]# vim /usr/local/hadoop-2.9.0/etc/hadoop/hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME}
啟動hadoop叢集
#NameNode 的格式化:
[root@sht-sgmhadoopdn-01 hadoop]# hdfs namenode -format
#開啟NameNode 和DataNode 守護程序,(這一步會啟動三個程序,分别是namenode,datanode,secondarynamenode)
[root@sht-sgmhadoopdn-01 hadoop]# /usr/local/hadoop-2.9.0/sbin/start-dfs.sh
#通過jps指令檢視程序号和程序名稱
[root@sht-sgmhadoopdn-01 logs]# jps
12704 DataNode
14273 Jps
12580 NameNode
27988 -- process information unavailable
13015 SecondaryNameNode
27832 -- process information unavailable
#也可以通過stop-dfs.sh停止守護程序,(下次啟動hadoop時,無需進行NameNode的初始化,隻需要運作start-dfs.sh就可以)
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# /usr/local/hadoop-2.9.0/sbin/stop-dfs.sh
成功啟動程序後可以通過浏覽器通路,檢視 NameNode 和 Datanode 資訊,還可以線上檢視 HDFS 中的檔案:
NameNode
http://172.16.101.58:50070運作hadoop僞分布執行個體MapReduce Job
#建立hdfs目錄/user/root/input,并把本地的檔案拷貝到hdfs上
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hdfs dfs -mkdir -p /user/root/input
[root@sht-sgmhadoopdn-01 ~]# hdfs dfs -ls
drwxr-xr-x - root supergroup 0 2017-12-24 15:20 input
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hdfs dfs -put /usr/local/hadoop-2.9.0/etc/hadoop/*.xml /user/root/input
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hdfs dfs -ls /user/root/input
Found 8 items
-rw-r--r-- 1 root supergroup 7861 2017-12-24 15:20 /user/root/input/capacity-scheduler.xml
-rw-r--r-- 1 root supergroup 1040 2017-12-24 15:20 /user/root/input/core-site.xml
-rw-r--r-- 1 root supergroup 10206 2017-12-24 15:20 /user/root/input/hadoop-policy.xml
-rw-r--r-- 1 root supergroup 1091 2017-12-24 15:20 /user/root/input/hdfs-site.xml
-rw-r--r-- 1 root supergroup 620 2017-12-24 15:20 /user/root/input/httpfs-site.xml
-rw-r--r-- 1 root supergroup 3518 2017-12-24 15:20 /user/root/input/kms-acls.xml
-rw-r--r-- 1 root supergroup 5939 2017-12-24 15:20 /user/root/input/kms-site.xml
-rw-r--r-- 1 root supergroup 690 2017-12-24 15:20 /user/root/input/yarn-site.xml
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hadoop jar /usr/local/hadoop-2.9.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar grep input output 'dfs[a-z]+'
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hdfs dfs -cat output/*
#預設不會覆寫結果檔案,是以再次運作上面執行個體會提示出錯:hdfs://localhost:9000/user/root/output already exists,需要先将output 删除。
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hdfs dfs -rm -r /user/root/output
Deleted /user/root/output
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hadoop jar /usr/local/hadoop-2.9.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar grep input output 'dfs[a-z.]+'
1dfs.replication
1dfs.namenode.name.dir
1dfs.datanode.data.dir
#也可以從hdfs上拷貝檔案到本地
[root@sht-sgmhadoopdn-01 hadoop-2.9.0]# hdfs dfs -get /user/root/output /usr/local/hadoop-2.9.0/
運作YARN在單節點上
(1)新版的 Hadoop 使用了新的 MapReduce 架構(MapReduce V2,也稱為 YARN,Yet Another Resource Negotiator)。
(2)YARN 是從 MapReduce 中分離出來的,負責資源管理與任務排程。YARN 運作于 MapReduce 之上,提供了高可用性、高擴充性,
上述通過 ./sbin/start-dfs.sh 啟動 Hadoop,僅僅是啟動了 MapReduce 環境,我們可以啟動 YARN ,讓 YARN 來負責資源管理與任務排程。
(3)如果不想啟動 YARN,務必把配置檔案 mapred-site.xml 重命名,改成 mapred-site.xml.template,需要用時改回來就行。否則在該配置檔案存在,而未開啟 YARN 的情況下,運作程式會提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的錯誤,這也是為何該配置檔案初始檔案名為 mapred-site.xml.template。
(4)但 YARN 主要是為叢集提供更好的資源管理與任務排程,然而這在單機上展現不出價值,反而會使程式跑得稍慢些。是以在單機上是否開啟 YARN 就看實際情況了
[root@sht-sgmhadoopdn-01 hadoop]# mv /usr/local/hadoop-2.9.0/etc/hadoop/mapred-site.xml.template mapred-site.xml
[root@sht-sgmhadoopdn-01 hadoop]# cat mapred-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
[root@sht-sgmhadoopdn-01 hadoop]# cat yarn-site.xml
<!-- Site specific YARN configuration properties -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
[root@sht-sgmhadoopdn-01 hadoop]# jps
30341 DataNode
32663 Jps
30188 NameNode
30525 SecondaryNameNode
#前提是已經使用start-dfs.sh腳本啟動過
[root@sht-sgmhadoopdn-01 hadoop]# /usr/local/hadoop-2.9.0/sbin/start-yarn.sh
#相比使用MapReduce多了ResourceManager和NodeManager這兩個程序
32758 ResourceManager
855 Jps
411 NodeManager
#啟動後可以通過浏覽器通路:
ResourceManager -
http://172.16.101.58:8088停止hadoop叢集
[root@sht-sgmhadoopdn-01 hadoop]# /usr/local/hadoop-2.9.0/sbin/stop-yarn.sh
[root@sht-sgmhadoopdn-01 hadoop]#/usr/local/hadoop-2.9.0/sbin/stop-dfs.sh
[root@sht-sgmhadoopdn-01 hadoop]# /usr/local/hadoop-2.9.0/sbin/mr-jobhistory-daemon.sh stop historyserver
no historyserver to stop
參考連結:
http://www.powerxing.com/install-hadoop/ http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-common/SingleCluster.html