天天看點

安裝hadoop僞分布式模式(Single Node Cluster)

目的

本文檔介紹如何去安裝單節點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