Hadoop Streaming框架使用(一)
?
Streaming簡介?
link:http://www.cnblogs.com/luchen927/archive/2012/01/16/2323448.html
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中的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實現,參考KeyBasedFiledPartitoner和IntHashPartitioner。
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:指定輸出詳細信息,例如分發哪些文件,實際作業配置參數值等,可以用于調試。
總結
以上是生活随笔為你收集整理的Hadoop Streaming框架使用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DEDE常见问题(转)
- 下一篇: 休闲游戏随想,