hadoop学习;datajoin;chain签名;combine()
hadoop有種簡化機(jī)制來管理job和control的非線性作業(yè)之間的依賴。job對象時(shí)mapreduce的表現(xiàn)形式。job對象的實(shí)例化可通過傳遞一個(gè)jobconf對象到作業(yè)的構(gòu)造函數(shù)中來實(shí)現(xiàn)。
x.addDeopendingJob(y)意味著x在y完畢之前不會(huì)啟動(dòng)。
鑒于job對象存儲(chǔ)著配置和依賴信息。jobcontrol對象會(huì)負(fù)責(zé)監(jiān)管作業(yè)的運(yùn)行,通過addjob()。你能夠?yàn)閖obcontrol加入作業(yè),當(dāng)全部作業(yè)和依賴關(guān)系加入完畢后。調(diào)用jobcontrol的run()方法,生成一個(gè)線程提交作業(yè)并監(jiān)視其運(yùn)行,有allFinised()。getFailedJobs()方法
hadoop引入chainMapper和chainReducer來簡化預(yù)處理和后處理
driver會(huì)先設(shè)置“全局”jobconf對象。包括作業(yè)名,輸入路徑和輸出路徑等,它一次性加入全部步驟,然后按順序運(yùn)行
ChainMapper.addMapper()方法的簽名來具體了解怎樣一步步的鏈接作業(yè)
byvalue用于推斷是否是值傳遞。若為false則採用引用傳遞。初始mapper的輸出內(nèi)容保存在內(nèi)存中,假設(shè)后期不再調(diào)用傳入的值,能夠這樣,效率高,一般設(shè)為true
reduce函數(shù)接收輸入數(shù)據(jù),并對其值進(jìn)行交叉乘積,reduce生成這些值的全部合并結(jié)果。
交叉乘積得到的每一個(gè)合并結(jié)果被送入函數(shù)combine()(不是combiner)生成一個(gè)輸出記錄。對于隨意特定的合并,combine能夠選擇不輸出。交叉乘積的本質(zhì)確保了combine看到的記錄都有同樣的連接鍵
在解釋怎樣使用DatajoingMapperBase和DataJoinReduceBase之前,你須要了解在代碼通篇所使用的一個(gè)抽象數(shù)據(jù)類TaggedMapOutput(用Text標(biāo)簽封裝記錄的數(shù)據(jù)類型)
在數(shù)據(jù)流的描寫敘述中,mapper輸出的包帶有一個(gè)組鍵和一個(gè)被標(biāo)簽記錄的值。datajoin軟件包指定組鍵為text類型。而值為TaggerMapOutput類型,它詳細(xì)實(shí)現(xiàn)了getTag()和setTag(Text Tag)方法
作為mapper的輸出,TaggerMapOutput必須是Writable類型,因此我們的子類必須實(shí)現(xiàn)readFile()和write()方法
DataJoinMapper運(yùn)行全部的封裝。指定了三個(gè)能夠填充的抽象方法
generateInputTag在map任務(wù)開始前調(diào)用。來為這個(gè)map任務(wù)所處理的全部記錄指定一個(gè)全局標(biāo)簽,
假設(shè)橫跨幾個(gè)文件,能夠用它們的前綴作為標(biāo)簽
完畢map任務(wù)初始化后,為每一個(gè)記錄調(diào)用DataJoinMapperBase的map()方法。里面調(diào)用generateTaggedOutput()和generateGroupKey()方法
原則上。在同一文件里,不同的記錄能夠用不同的標(biāo)簽,在標(biāo)準(zhǔn)情況下,我們希望一個(gè)標(biāo)簽代表一個(gè)數(shù)據(jù)源,它早先由generateInputTag()計(jì)算好并存在this.InputTag中
總結(jié)
以上是生活随笔為你收集整理的hadoop学习;datajoin;chain签名;combine()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法和数据结构】_13_小算法_双链表
- 下一篇: ZOJ 1696 Viva Confet