【hadoop】3.本地運行模式

簡介

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

  1. hadoop的三大運行模式的簡單介紹。
  2. 本地模式下的兩個經典案例。

一、hadoop的運行模式

(1)本地模式(local(standaolne) mode):不須要啓用任何守護進程,全部程序都在同一個JVM上執行。在獨立模式下測試和調試MapReduce程序都很方便,解壓以後直接能夠運行。很是適合咱們進行測試和開發使用。分佈式

(2)僞分佈式模式(Pseudo-Distributed Mode):等同於徹底分佈式,但全部的守護進程只運行在一臺機器上,經過啓動不一樣的守護進程模擬集羣節點。oop

(3)徹底分佈式模式(Full-Distributed Mode):Hadoop的守護進程運行在多臺機器上(集羣)。學習

二、本地模式運行hadoop案例

2.1 grep匹配案例

grep案例是用來進行單詞匹配的案例。咱們按照官方教程來走一遍具體流程。測試

一、在hadoop-2.7.2文件下面建立一個input文件夾,並將hadoop的xml配置文件複製到裏面:this

# cd /opt/module/hadoop-2.7.2
# mkdir input
# cp etc/hadoop/*.xml input/

二、能夠看到input目錄下擁有差很少5個xml文件,如今咱們想要知道在這些文件夾中究竟有多少個以dfs開頭並至少還有一個其餘的字母的單詞,例如dfsu。只需執行官方爲咱們提供的參考jar包結合hadoop命令便可:調試

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

其中:code

  • hadoop是bin/hadoop,因爲咱們以前配置的環境變量,能夠直接使用
  • jar後跟指定須要運行的jar包,grep在官方的share案例文件夾下面。
  • grep傳入參數,告訴jar包中程序運行參數爲grep,使用grep模塊計算
  • input爲輸入文件夾的信息
  • output爲輸出結果的文件夾
  • 'dfs[a-z.]+' 爲grep所需的正則匹配參數

三、運行以後,咱們會發如今當前目錄下生成了一個output文件夾,進入後發現有2個文件其中一個大小爲0,表名運行是否正確,你會看到其名字爲'_SUCCESS',另一個,就是咱們想要的輸出結果了。查看輸出結果:orm

# cat part-r-00000

輸出xml

1  dfsadmin

即匹配結果單詞有'dfsadmin',匹配次數爲1次。

2.2 wordcount單詞統計案例

接下來咱們在測試一個簡單的統計單詞的案例,和grep案例同樣,咱們先構建一個輸入文件夾,往裏面放多個文件,隨意的放入各類單詞信息。

一、構建輸入

# cd /opt/module/hadoop-2.7.2
# mkdir winput
# cd winput
# touch 1.txt
# touch 2.doc
# touch 3.xml

別忘了往文件裏隨便寫些單詞(有空格分離)

二、執行命令

# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount winput/ woutput
  • winput指定咱們須要統計的輸入文件夾的路徑
  • woutput則是輸出結果的位置

三、執行完成以後,一樣來到輸出結果的文件夾woutput,查看統計結果:

beautiful	1
best	1
for	1
good	1
haha	3
is	2
item	1
learn.	1
my	1
place.	1
this	2
to	1

能夠看到咱們寫入的單詞的統計信息。

經過以上兩個例子,相信你得到了很多經驗,好比

  1. 輸入文件夾和輸出文件夾能夠隨意命名,可是在運行實例的時候,要確保output處指定的文件夾不存在,不然會出錯。
  2. hadoop-mapreduce-examples-2.7.2.jar中包含了很多的功能案例,經過傳入不一樣的參數提供不一樣的服務,例如wordcount等。
  3. 確保輸入路徑不包含多級目錄,也就是說,多個文件必須保持只在input一級目錄下才行,不然也會出錯。難道hadoop不支持深度遍歷,固然是能夠的,只不過咱們須要添加參數而已,在wordcount以後添加參數-Dmapreduce.input.fileinputformat.input.dir.recursive=true便可。

-Dmapreduce.input.fileinputformat.input.dir.recursive=true只在2.0以後生效。

參考

  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/
相關文章
相關標籤/搜索