Hadoop Streaming框架使用(一)


 

Streaming簡介 

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

Streaming的原理是用Java實現一個包裝用戶程序的MapReduce程序,該程序負責調用MapReduce Java接口獲取key/value對輸入,創建一個新的進程啟動包裝的用戶程序,將數據通過管道傳遞給包裝的用戶程序處理,然后調用MapReduce Java接口將用戶程序的輸出切分成key/value對輸出。 

 

Streaming優點

1 開發效率高,便於移植

只要按照標准輸入輸出格式進行編程,就可以滿足hadoop要求。因此單機程序稍加改動就可以在集群上進行使用。 同樣便於測試

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

如果單機測試通過,大多數情況是可以在集群上成功運行的,只要控制好內存就好了。

    2 提高程序效率

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

Streaming不足

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

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

具體參數介紹

 

-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

詳細輸出模式

 

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

-input <path>:指定作業輸入,path可以是文件或者目錄,可以使用*通配符,-input選項可以使用多次指定多個文件或目錄作為輸入。

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

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

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

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

-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輸出分隔符

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

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

-inputformat, -outputformat:指定inputformatoutputformat Java類,用於讀取輸入數據和寫入輸出數據,分別要實現InputFormatOutputFormat接口。如果不指定,默認使用TextInputFormatTextOutputFormat

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

-mapdebug, -reducedebug:分別指定mapperreducer程序失敗時運行的debug程序。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM