排序、hash分組、壓縮格式、內(nèi)存設(shè)定
-Option:
- -input:輸入文件路徑
- -output:輸出文件路徑
- -mapper:用戶(hù)自己寫(xiě)的mapper程序,可以是可執(zhí)行文件或者腳本
- -reducer:用戶(hù)自己寫(xiě)的reducer程序,可以是可執(zhí)行文件或者腳本
- -file:打包文件到提交的作業(yè)中,可以是mapper或者reducer要用的輸入文件,如配置文件,字典等,將客戶(hù)端本地文件打成jar包上傳到HDFS然后分發(fā)到計(jì)算節(jié)點(diǎn)。
- -cacheFile hdfs://host:port/path/to/file#linkname 分發(fā)HDFS文件到本地。在計(jì)算節(jié)點(diǎn)緩存文件,Streaming程序通過(guò)./linkname在本地訪問(wèn)文件
- -cacheArchive <file> Optional 指定一個(gè)上傳到HDFS的jar文件,這個(gè)jar文件會(huì)被自動(dòng)解壓縮到當(dāng)前工作目錄下
- -partitioner:用戶(hù)自定義的partitioner程序
- -combiner:用戶(hù)自定義的combiner程序(必須用java實(shí)現(xiàn))
- -cluster name:在本地Hadoop集群與一個(gè)或多個(gè)遠(yuǎn)程集群間切換
- -additionalconfspec specfile :用一個(gè)類(lèi)似于hadoop-site.xml的XML文件保存所有配置,從而不需要用多個(gè)"-D name=value"類(lèi)型的選項(xiàng)單獨(dú)為每個(gè)配置變量賦值
- -numReduceTasks <num> Optional reduce任務(wù)個(gè)數(shù)
- -combiner Combiner聚合類(lèi),對(duì)map的輸出進(jìn)行本地聚合,對(duì)map端的輸出 先做一次合并 ,以 減少在map和reduce節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量 ,以 提高網(wǎng)絡(luò)IO性能 ,是MapReduce的一種 優(yōu)化手段之一
- -cmdenv <n>=<v> 傳給mapper和reducer的環(huán)境變量
- -mapdebug mapper 失敗時(shí)運(yùn)行的debug程序
- -reducedebug reducer失敗時(shí)運(yùn)行的debug程序
- -verbose Optional 詳細(xì)輸出模式
- -D作業(yè)配置
mapred.job.name作業(yè)名
mapred.job.priority 作業(yè)優(yōu)先級(jí)
mapred.job.map.capacity 最多同時(shí)運(yùn)行map任務(wù)數(shù)
mapred.job.reduce.capacity 最多同時(shí)運(yùn)行reduce任務(wù)數(shù)
hadoop.job.ugi 作業(yè)執(zhí)行權(quán)限
mapred.map.tasks map任務(wù)個(gè)數(shù)
mapred.reduce.tasks reduce任務(wù)個(gè)數(shù)
mapred.job.groups 作業(yè)可運(yùn)行的計(jì)算節(jié)點(diǎn)分組
mapred.task.timeout 任務(wù)沒(méi)有響應(yīng)(輸入輸出)的最大時(shí)間
stream.non.zero.exit.is.failure=true #任務(wù)失敗重啟
mapred.compress.map.output map的輸出是否壓縮
mapred.map.output.compression.codec map的輸出壓縮方式
stream.map.output.field.separator 指定map輸出時(shí)的分割符
stream.num.map.output.key.fields=4 指定map輸出按照分隔符切割后,key所占有的列數(shù)
mapred.output.compress reduce的輸出是否壓縮
mapred.output.compression.type:壓縮類(lèi)型,有NONE, RECORD和BLOCK,默認(rèn)值RECORD。
mapred.output.compression.codec reduce的輸出壓縮方式, 默認(rèn)值org.apache.hadoop.io.compress.DefaultCodec
stream.reduce.output.field.separator 指定reduce輸出時(shí)的分割符
stream.num.reduce.output.key.fields 指定輸出按照分隔符切割后,key所占有的列數(shù)
map.output.key.field.separator=. #分桶分隔符:指定map輸出<key,value>對(duì)之后,其中key內(nèi)部的分割符
num.key.fields.for.partition=2 #指定分桶時(shí),按照分隔符切割后,用于分桶key所占的列數(shù)
mapred.job.reduce.memory.mb #每個(gè)map Task需要的內(nèi)存量
mapred.job.reduce.memory.mb #每個(gè)reduce Task需要的內(nèi)存量
mapreduce.job.reduce.slowstart.completedmaps 當(dāng)Map Task完成的比例達(dá)到該值后才會(huì)為Reduce Task申請(qǐng)資源,默認(rèn)是0.05
常見(jiàn)的例子:
按照前四位進(jìn)行排序,前兩列進(jìn)行分組
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D map.output.key.field.separator=. \
-D mapreduce.partition.keypartitioner.options=-k1,2 \
merge合并輸出的小文件們
set hive.merge.mapfiles = true #在Map-only的任務(wù)結(jié)束時(shí)合并小文件
set hive.merge.mapredfiles = true #在Map-Reduce的任務(wù)結(jié)束時(shí)合并小文件
set hive.merge.size.per.task = 256*1000*1000 #合并文件的大小
set hive.merge.smallfiles.avgsize=16000000 #當(dāng)輸出文件的平均大小小于該值時(shí),啟動(dòng)一個(gè)獨(dú)立的map-reduce任務(wù)進(jìn)行文件merge