Hadoop Streaming框架使用(一)

Streaming簡介 html

Streaming框架容許任何程序語言實現的程序在Hadoop MapReduce中使用,方便已有程序向Hadoop平臺移植。所以能夠說對於hadoop的擴展性意義重大,今天簡單說一下。java

Streaming的原理是用Java實現一個包裝用戶程序的MapReduce程序,該程序負責調用MapReduce Java接口獲取key/value對輸入,建立一個新的進程啓動包裝的用戶程序,將數據經過管道傳遞給包裝的用戶程序處理,而後調用MapReduce Java接口將用戶程序的輸出切分紅key/value對輸出。 編程

 

Streaming優勢c#

1 開發效率高,便於移植app

只要按照標準輸入輸出格式進行編程,就能夠知足hadoop要求。所以單機程序稍加改動就能夠在集羣上進行使用。 一樣便於測試框架

只要按照 cat input | mapper | sort | reducer > output 進行單機測試便可。oop

若是單機測試經過,大多數狀況是能夠在集羣上成功運行的,只要控制好內存就行了。測試

    2 提升程序效率debug

有些程序對內存要求較高,若是用java控制內存畢竟不如C/C++。調試

Streaming不足

    1 Hadoop Streaming默認只能處理文本數據,沒法直接對二進制數據進行處理 

    2 Streaming中的mapper和reducer默認只能向標準輸出寫數據,不能方便地處理多路輸出 

具體參數介紹

 

-input    <path>

輸入數據路徑

-output   <path>

輸出數據路徑

-mapper  <cmd|JavaClassName>

mapper可執行程序或Java類

-reducer  <cmd|JavaClassName>

reducer可執行程序或Java類

-file            <file>        Optional

分發本地文件

-cacheFile       <file>        Optional

分發HDFS文件

-cacheArchive   <file>         Optional

分發HDFS壓縮文件

-numReduceTasks  <num>     Optional

reduce任務個數

-jobconf | -D NAME=VALUE    Optional

做業配置參數

-combiner <JavaClassName>   Optional

Combiner Java類

-partitioner <JavaClassName>  Optional

Partitioner Java類

-inputformat <JavaClassName> Optional

InputFormat Java類

-outputformat <JavaClassName>Optional

OutputFormat Java類

-inputreader <spec>            Optional

InputReader配置

-cmdenv   <n>=<v>           Optional

傳給mapper和reducer的環境變量

-mapdebug <path>             Optional

mapper失敗時運行的debug程序

-reducedebug <path>           Optional

reducer失敗時運行的debug程序

-verbose                      Optional

詳細輸出模式

 

 下面是對各個參數的詳細說明:

l -input <path>:指定做業輸入,path能夠是文件或者目錄,可使用*通配符,-input選項可使用屢次指定多個文件或目錄做爲輸入。

l -output <path>:指定做業輸出目錄,path必須不存在,並且執行做業的用戶必須有建立該目錄的權限,-output只能使用一次。

l -mapper:指定mapper可執行程序或Java類,必須指定且惟一。

l -reducer:指定reducer可執行程序或Java類,必須指定且惟一。

l -file, -cacheFile, -cacheArchive:分別用於向計算節點分發本地文件、HDFS文件和HDFS壓縮文件。

l -numReduceTasks:指定reducer的個數,若是設置-numReduceTasks 0或者-reducer NONE則沒有reducer程序,mapper的輸出直接做爲整個做業的輸出。

-jobconf | -D NAME=VALUE:指定做業參數,NAME是參數名,VALUE是參數值,能夠指定的參數參考hadoop-default.xml。特別建議用-jobconf mapred.job.name='My Job Name'設置做業名,使用-jobconf mapred.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | VERY_LOW設置做業優先級,使用-jobconf mapred.job.map.capacity=M設置同時最多運行M個map任務,使用-jobconf mapred.job.reduce.capacity=N設置同時最多運行N個reduce任務。

常見的做業配置參數以下表所示: 

mapred.job.name

做業名

mapred.job.priority

做業優先級

mapred.job.map.capacity

最多同時運行map任務數

mapred.job.reduce.capacity

最多同時運行reduce任務數

hadoop.job.ugi

做業執行權限

mapred.map.tasks

map任務個數

mapred.reduce.tasks

reduce任務個數

mapred.job.groups

做業可運行的計算節點分組

mapred.task.timeout

任務沒有響應(輸入輸出)的最大時間

mapred.compress.map.output

map的輸出是否壓縮

mapred.map.output.compression.codec

map的輸出壓縮方式

mapred.output.compress

reduce的輸出是否壓縮

mapred.output.compression.codec

reduce的輸出壓縮方式

stream.map.output.field.separator

map輸出分隔符

 l -combiner:指定combiner Java類,對應的Java類文件打包成jar文件後用-file分發。

l -partitioner:指定partitioner Java類,Streaming提供了一些實用的partitioner實現,參考KeyBasedFiledPartitonerIntHashPartitioner

l -inputformat, -outputformat:指定inputformat和outputformat Java類,用於讀取輸入數據和寫入輸出數據,分別要實現InputFormat和OutputFormat接口。若是不指定,默認使用TextInputFormat和TextOutputFormat。

l -cmdenv NAME=VALUE:給mapper和reducer程序傳遞額外的環境變量,NAME是變量名,VALUE是變量值。

l -mapdebug, -reducedebug:分別指定mapper和reducer程序失敗時運行的debug程序。

l -verbose:指定輸出詳細信息,例如分發哪些文件,實際做業配置參數值等,能夠用於調試。

from:http://www.cnblogs.com/luchen927/archive/2012/01/16/2323479.html

相關文章
相關標籤/搜索