【hadoop】4.僞分佈式模式

簡介

前面咱們講到了hadoop擁有3種運行模式,搭建了最簡答的本地運行模式並在其上運行了兩個簡單案例。本章節咱們學習僞分佈模式。顧名思義,該模式外在看起來像是分佈式,實際上只有一個節點。java

僞分佈模式的有不一樣的搭建方式,具體取決於咱們須要用到什麼樣的功能。前面提到過,Hadoop主要有3大模塊:HDFS、YARN以及MapReduce。接下來咱們經過該模式搭建hadoop不一樣的模塊。node

從本章節你能夠學習到:web

  1. hadoop的僞分佈式運行模式。
  2. HDFS環境搭建
  3. YARN環境搭建及本地臨時文件存儲目錄
  4. 在僞分佈模式下運行wordcount案例。

一、搭建HDFS環境

本小節咱們將搭建HDFS組件,並在其上運行一個案例。shell

1.1 基礎環境搭建

安裝jdk以及hadoop,安裝方式參考本系列第二章節。如今咱們已經準備好了和本地模式如出一轍的環境,接下來開始建立DFS須要的namenode以及datanode。apache

注意:在此以前最好配置好本身所搭建環境的主機名關係,例如我搭建的環境共有5臺機器,他們的/etc/hosts文件以下:分佈式

192.168.102.131 h131
192.168.102.132 h132
192.168.102.133 h133
192.168.102.134 h134
192.168.102.135 h135

同時主機名也最好設置一下,經過命令hostname h131進行設置。oop

注意,僞分佈模式只需一臺機器就能夠,上面的列表只是爲了後面的集羣模式準備的,因此提早準備這樣的環境也不是不行,不過本教程暫時用不到。學習

1.2 配置集羣

配置文件的位置都位於/opt/module/hadoop-2.7.2/etc/hadoop下。配置內容放在<configuration>配置節中,其中h131是個人這臺主機的主機名,記住寫本身的主機名便可。測試

一、配置hadoop-env.sh,修改JAVA_HOME 路徑,若是您已經參考了本系列教程的第2章內容,此處能夠不作。網站

二、配置core-site.xml,添加配置

<!-- 指定HDFS中NameNode的地址 -->
<property>
	<name>fs.defaultFS</name>
    <value>hdfs://h132:8020</value>
</property>

fs.defaultFS使用本地文件協議,查看官方文檔可知其默認值爲file:///;

三、配置hdfs-site.xml

<!-- 指定HDFS副本的數量 -->
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>

dfs.replication默認值爲3。

1.3 啓動集羣

經過2咱們已經完成了基本的hdfs配置。咱們如今配置了數據節點的信息,同時指定了文件的副本數,接下來咱們啓動集羣。

一、格式化namenode(第一次啓動時須要格式化)

# hdfs namenode -format

hdfs位於bin下,因爲咱們配置了環境變量,能夠在任何地方直接調用。

二、啓動namenode

# hadoop-daemon.sh start namenode

hadoop-daemon.sh位於hadoop/sbin下,因爲咱們一樣配置的環境變量,能夠直接調用。

三、啓動datanode

# hadoop-daemon.sh start datanode

四、查看結果:經過命令jps查看當前啓動的java進行,能夠看出,兩個節點都已經啓動。

9731 NameNode
9893 Jps
9822 DataNode

1.4 查看集羣

前面咱們成功的啓動了兩個節點:HDFS的namenode和datanode。接下來咱們查看該集羣的具體狀況。

一、經過命令:查看當前啓動的節點信息

# jps

二、經過日誌:當咱們啓動一個節點服務以後,在hadoop的文件夾下就會生成一個logs文件,在該文件中每個節點都有對應的日誌信息,咱們能夠經過該文件獲取本身想要獲取的信息,例如 hadoop-root-datanode-h132.log

三、經過可視化web:咱們也能夠經過namenode開放的50070查看hadoop的管理網站——IP:50070. HDFS集羣信息

若是沒法正常訪問該網站,嘗試關閉50070端口的防火牆限制。另外,hadoop須要開放的端口目前沒有仔細統計,既然是用做本身練習,最好仍是直接關閉防火牆好些。(systemctl stop firewalld)。到了生產環境中,這些端口的開放仍是須要具體的文檔規範的,如今不必去糾結這些。

1.5 操做集羣

接下來咱們往DFS文件系統中進行文件操做並運行一個簡單案例。

一、在HDFS上建立一個user/zhaoyi文件夾

# hadoop fs -mkdir -p /user/zhaoyi

經過該命令咱們在HDFS文件系統中建立了/user/zhaoyi

想要學習更多的命令,請參考官方文檔。

二、查看文件夾信息

# hadoop fs -ls -R /

獲得以下的輸出

drwxr-xr-x   - root supergroup          0 2018-04-25 23:41 /user
drwxr-xr-x   - root supergroup          0 2018-04-25 23:41 /user/zhaoyi

即咱們已經在根目錄下建立了一個文件夾user以及其子文件夾zhaoyi.

你也能夠經過前面提到的web訪問進行查看,在最後一個菜單項utilities的下拉菜單項Browse the file system獲取HDFS文件系統可視化信息。

三、刪除文件夾 接下來咱們測試一下如何刪除文件夾,即將user下的zhaoyi文件夾刪掉

# hadoop fs -rm -r /user/zhaoyi

1.6 wordcount案例

以前咱們都是用本地文件來進行mapreduce的,此次咱們經過HDFS文件系統來幫咱們完成文件的輸入與計算輸出,測試案例選用wordcount。

一、在HDFS中建立一個input文件夾

# hadoop fs -mkdir /user/input

二、建立一個文件something,並往裏面寫入一些內容,例如

this is a beautiful flower?
yes, but I love FGO better.

三、將該文件上傳到HDFS的input文件夾下

# hadoop fs -put something /user/input

你也能夠多建立幾個文件,並上傳到input文件夾下面進行計算。

四、調用wordcount案例,輸入爲咱們HDFS的input文件夾,輸出也在該目錄下。

# hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/input /user/output

該命令前面咱們已經解釋過各個參數的含義,不一樣的是input的output指代的路徑再也不是本地路徑,而是HDFS協議的路徑。

五、查看輸出的結果

# hadoop fs -cat /user/output/part-r-00000

能夠獲得以下的輸出:

FGO	1
I	1
a	1
beautiful	1
better.	1
but	1
flower?	1
is	1
love	1
this	1
yes,	1

一樣,你也能夠經過web管理網站查看這些文件的信息。

獲得本身想要的結果以後,記得刪除output文件夾,避免指定相同輸出環境的計算用例會由於有同名文件夾而失敗:hadoop fs -rf -r /user/output

二、搭建YARN環境

前面咱們提到過,YARN是Hadoop中負責資源調度的模塊,1.x版本中甚至沒有他的蹤跡,可見這是2.x新增的組件。他包含了4個模塊,接下來,咱們將準備在以前的基礎上搭建YARN環境,建立資源管理節點(1)ResourceManager RM)以及節點管理節點(NodeManager NM)。

注意這是基於咱們1建立的HDFS環境之上的。

2.1 配置集羣

注:Hadoop的配置文件都是位於/opt/module/hadoop-2.7.2/etc/hadoop下。

一、配置yarn的環境配置文件:yarn-env.sh,添加JAVA_HOME的具體路徑信息

export JAVA_HOME=/opt/module/jdk1.8.0_131

/opt/module/jdk1.8.0_131echo $JAVA_HOME輸出的值,根據的您的環境進行設置。

二、配置yarn的配置文件:yarn-site.xml,添加以下內容

<!-- reducer獲取數據的方式 -->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>h132</value>
</property>

h132是我本臺主機的主機名,請按您本身的主機名進行填寫。一樣是放在<configuration>配置節中。

三、配置mapreduce的環境配置文件,一樣加入JAVA_HOME的具體信息

export JAVA_HOME=/opt/module/jdk1.8.0_131

四、配置mapreduce的配置文件:mapred-site.xml,你會發現這個文件不存在。其實他有一個模板文件的:mapred-site.xml.template,將其從新命名爲mapred-site.xml,而後在進行配置便可:

# mv mapred-site.xml.template mapred-site.xml

指定mapreduce從默認的local運行變爲yarn上運行,往mapred-site.xml中添加:

<!-- 指定mr運行在yarn上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

查看官方文檔可知mapreduce.framework.name的默認值爲local,咱們如今將其修改成yarn.

至此,咱們的配置就完成了。以上步驟看起來不少,其實很簡單,無非就是配置yarn以及mapreduce的相關參數。

2.2 啓動集羣

以前咱們已經啓動了HDFS的datanode和namenode,接下來咱們啓動yarn的RM(ResourceManager)以及NM(NodeManager)。

一、啓動yarn的resourcemanager

# yarn-daemon.sh start resourcemanager

查看是否啓動成功

# jps
9731 NameNode
10629 ResourceManager
9822 DataNode
10782 Jps

二、啓動yarn的nodemanager

# yarn-daemon.sh start nodemanager

查看是否啓動成功

# jps
9731 NameNode
10629 ResourceManager
10971 Jps
10877 NodeManager
9822 DataNode

2.3 集羣查看

以上過程完成後,咱們的單臺機器中就已經添加了yarn組件,接下來咱們查看添加yarn以後的變化,一樣的,咱們能夠經過jps命令查看,也能夠經過web可視化界面查看。

前面咱們已經經過IP:50070查看HDFS的管理信息,接下來咱們能夠經過8088端口查看集羣的監控信息,包括mapreduce執行任務的具體記錄等等,均可以從這個web服務中查看到。

集羣監控地址

2.4 wordcount案例

接下來咱們運行wordcount案例,咱們和使用hdfs同樣的操做方式便可。使用yarn處理的不一樣在於其內部的處理,咱們之後會學到具體的內容,如今咱們看看運行過程當中的特色。

一、運行計算

# hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/input /user/output

和以前的沒有任何區別。

二、查看網站的輸出結果,咱們在任務開始的時候,不一樣的刷新網站,能夠看到以下的界面 yarn處理任務過程1

如今咱們看到,任務開始了,剛執行了一段。

yarn處理任務過程2 如今處理了一部份內容。

yarn處理任務過程3 任務完成。

相比較以前的HDFS處理方式,這個稍微慢了些。是由於任務調度的問題,並且目前咱們處理的東西也不多,當任務量大了以後,就能夠獲得其帶來的實惠了。

另外,咱們也能夠經過日誌查看整個執行過程,好比下面這段比較有意思

FO mapreduce.Job:  map 0% reduce 0%
18/04/26 01:32:45 INFO mapreduce.Job:  map 100% reduce 0%
18/04/26 01:32:56 INFO mapreduce.Job:  map 100% reduce 100%
18/04/26 01:32:56 INFO mapreduce.Job: Job job_1524676888858_0001 completed successfully
18/04/26 01:32:56 INFO mapreduce.Job: Counters: 49

咱們能夠看到mapreduce的過程。

2.5 修改本地文件存儲目錄

前面咱們提到,數據節點以及名稱節點的數據都是存儲在/tmp/下,查看/tmp下的目錄能夠發現,目錄爲tmp/hadoop-xxx(xxx爲使用者用戶名)。這顯然不便於管理,咱們接下來學習一下如何修改此路徑,將其放在咱們的/opt/module/hadoop-2.7.2路徑下,方便統一管理。

一、查看官方文檔,咱們能夠了解到,配置存儲目錄的配置項位於core-site.xml中的hadoop.tmp.dir配置項,其默認值爲/tmp/hadoop-${user.name},如今咱們來修改這個配置項,編輯core-site.xml,添加此配置項

<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

能夠看到,咱們將臨時存儲目錄修改成/opt/module/hadoop-2.7.2/data/tmp了,接下來爲了使這個配置生效,咱們須要重啓集羣,讓集羣從新讀取配置文件。重啓過程分爲中止和啓動兩個步驟。

二、中止集羣,按順序依次中止各個節點:

# yarn-daemon.sh stop resourcemanager
# yarn-daemon.sh stop nodemanager
# hadoop-daemon.sh stop namenode
# hadoop-daemon.sh stop datanode

yarn-daemon.shhadoop-daemon.shshell腳本都位於/opt/module/hadoop-2.7.2/sbin目錄下。

三、刪除舊集羣的臨時目錄,避免啓動新集羣的時候發生錯誤

# cd /tmp
# rm -rf hadoop-{your-user-name}

hadoop-{your-user-name}文件夾根據當前用戶名命名,若是你使用root用戶操做,這個文件夾會形如hadoop-root.若是你是aqua用戶,該文件夾形如hadoop-aqua.

四、格式化名稱節點。而後啓動集羣,按順序依次啓動各個節點:

# hadoop namenode -format
# hadoop-daemon.sh start namenode
# hadoop-daemon.sh start datanode
# yarn-daemon.sh start resourcemanager
# yarn-daemon.sh start nodemanager

操做的過程當中,每執行一步都不要忘了使用jps等命令查看是否達到預期的效果

如今,咱們就能夠看到,臨時文件夾在/opt/module/hadoop-2.7.2下面生成了,命名方式也受咱們的配置所制約。咱們查看一下當前的data的目錄結構

# ls -R data
data:
tmp
data/tmp:
dfs  nm-local-dir
data/tmp/dfs:
data  name
data/tmp/dfs/data:
current  in_use.lock
data/tmp/dfs/data/current:
BP-191797622-192.168.102.132-1524740656851  VERSION
...

比較多默認生成的文件,讓人眼花繚亂,具體每一個文件的用途,隨着咱們學習的推動能夠慢慢了解到,如今知道有這麼一些文件就能夠了。

接下來,咱們能夠測試一下建立文件夾以及上傳文件等操做是否正常便可。

五、測試集羣是否正常

# hadoop fs -mkdir -p /user/zhaoyi
# touch test.txt 
# hadoop fs -put text.txt /user/zhaoyi

咱們遞歸建立了/user/zhaoyi文件夾,並往其中上傳了一個/user/zhaoyi文件,下面咱們查看這些文件的信息便可:

# hadoop fs -ls -R /user
drwxr-xr-x   - root supergroup          0 2018-04-26 19:13 /user/zhaoyi
-rw-r--r--   1 root supergroup          0 2018-04-26 19:13 /user/zhaoyi/test.txt

能夠看到,集羣運行正常。

參考

  1. http://hadoop.apache.org/
  2. https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
  3. http://hadoop.apache.org/docs/r2.7.2/
相關文章
相關標籤/搜索