標(biāo)題: Hadoop Streaming [打印本頁] 作者: xjc2694 時間: 2011-12-23 02:32 標(biāo)題: Hadoop Streaming <div>參考</div><div>http://hadoop.apache.org/common/docs/current/streaming.html</div><div>http://dongxicheng.org/mapreduce/hadoop-streaming-programming/</div><div>1、</div><div>Hadoop Streamimg是隨Hadoop發(fā)布的一個編程工具,允許使用任何可執(zhí)行文件或腳本創(chuàng)建和運行map/reduce job。</div><div>例如:最簡單的</div><div>$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \</div><div> -input myInputDirs \</div><div> -output myOutputDir \</div><div> -mapper /bin/cat \</div><div> -reducer /bin/wc</div><div>2、Streaming如何工作</div><div>在上面的例子中,mapper和reducer從標(biāo)準(zhǔn)輸入逐行的讀入輸入。處理后發(fā)送到標(biāo)準(zhǔn)輸出。Streaming將創(chuàng)建map/reducejob,提交job到cluster,并監(jiān)視job的執(zhí)行過程。</div><div>當(dāng)一個可執(zhí)行文件或腳本作為mappers,當(dāng)mapper初始化時,每個mapper task將該可執(zhí)行文件或腳本作為一個獨立的進程運行。當(dāng)mapper task運行時,轉(zhuǎn)換輸入為行,并將該行提供給進程作為標(biāo)準(zhǔn)輸入。在此期間,mapper收集可執(zhí)行文件或腳本的標(biāo)準(zhǔn)輸出,并把每一行內(nèi)容轉(zhuǎn)換為key/value對,作為mapper的輸出。默認(rèn)情況下,一行中第一個tab之前的部分作為key,之后的(不包含tab)作為value。如果沒有tab,正行作為key值,value值為null。key值也可以通過自定義,將在稍后提到。</div><div>當(dāng)一個可執(zhí)行文件或腳本作為reducers,當(dāng)reducer初始化時,每個reducer task將該可執(zhí)行文件或腳本作為一個獨立的進程運行。當(dāng)reducer task運行時,轉(zhuǎn)換輸入的key/values對為行并提供給進程作為標(biāo)準(zhǔn)輸入。在此期間,reducer收集可執(zhí)行文件或腳本的標(biāo)準(zhǔn)輸出,并將每一行內(nèi)容轉(zhuǎn)換為key/values對,作為reducer的輸出。默認(rèn)情況下,一行中第一個tab之前的部分作為key,之后的(不包含tab)作為value。如果沒有tab,正行作為key值,value值為null。key值也可以通過自定義,將在稍后提到。</div><div>以上是Map/Reduce框架</div><div><br></div><div>可以只map而不reduce</div><div>Specifying Map-Only Jobs</div><div>Often, you may want to process input data using a map function only. To do this, simply set mapred.reduce.tasks to zero. The Map/Reduce framework will not create any reducer tasks. Rather, the outputs of the mapper tasks will be the final output of the job.</div><div><br></div><div> -D mapred.reduce.tasks=0</div><div> </div><div>To be backward compatible, Hadoop Streaming also supports the "-reduce NONE" option, which is equivalent to "-D mapred.reduce.tasks=0".</div><div><br></div><div>options:</div><div>(1)-input:輸入文件路徑</div><div>(2)-output:輸出文件路徑</div><div>(3)-mapper:用戶自己寫的mapper程序,可以是可執(zhí)行文件或者腳本</div><div>(4)-reducer:用戶自己寫的reducer程序,可以是可執(zhí)行文件或者腳本</div><div>(5)-file:打包文件到提交的作業(yè)中,可以是mapper或者reducer要用的輸入文件,如配置文件,字典等。</div><div>(6)-partitioner:用戶自定義的partitioner程序</div><div>(7)-combiner:用戶自定義的combiner程序(必須用java實現(xiàn))</div><div>(8)-D:作業(yè)的一些屬性(以前用的是-jonconf),具體有:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>注意:-D參數(shù)必須作為第一個參數(shù),有多個參數(shù)需要調(diào)整時,寫多個-D <property=value></div><div> 1)mapred.map.tasks:map task數(shù)目</div><div> 2)mapred.reduce.tasks:reduce task數(shù)目</div><div> 3)stream.map.input.field.separator/stream.map.output.field.separator: map task輸入/輸出數(shù)</div><div>據(jù)的分隔符,默認(rèn)均為\t。</div><div> 4)stream.num.map.output.key.fields:指定map task輸出記錄中key所占的域數(shù)目(即,使用幾個域用于排序。如果為2,則第一和第二個域整體作為可以,參與排序。似乎不能單獨指定第二個域作為key)</div><div> 5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task輸入/輸出數(shù)據(jù)的分隔符,默認(rèn)均為\t。</div><div> 6)stream.num.reduce.output.key.fields:指定reduce task輸出記錄中key所占的域數(shù)目</div><div>-D <property=value><span class="Apple-tab-span" style="white-space:pre"> </span>Use value for given property.</div><div>其中的property是任何可以在core,hdfs,maprd配置文件里寫的屬性,都可以在這里傳遞。 </div><div>-D參數(shù)可以廣泛用于hadoop的命令中,例如dfs,詳細查看:http://hadoop.apache.org/common/docs/current/commands_manual.html</div><div>例如:在上傳文件時,指定拷貝的副本</div><div>hadoop dfs -D dfs.replication=10 -put 70M logs/2</div>