您好,登錄后才能下訂單哦!
這篇文章主要介紹“hadoop下Illegal partition for問(wèn)題怎么處理”,在日常操作中,相信很多人在hadoop下Illegal partition for問(wèn)題怎么處理問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”hadoop下Illegal partition for問(wèn)題怎么處理”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
1.背景:
對(duì)一個(gè)文件中的key進(jìn)行過(guò)濾,需要過(guò)濾的key存儲(chǔ)在另一個(gè)文件中。需要過(guò)濾的key數(shù)量很大,有上億條,因此采用bloomfilter等方法不太合適。同時(shí)文件中的帶過(guò)濾的key可能會(huì)很多也可能很少。因此采用value二次排序的方法過(guò)濾,將需要過(guò)濾的key做成key0,真實(shí)的key做成key1。使用分區(qū)函數(shù)和key比較函數(shù)將相同的key發(fā)送到同一個(gè)機(jī)器上,只要判斷key的第一個(gè)key值key0是否存在就可以確定key是否需要過(guò)濾。
2.問(wèn)題:
采用二次排序,需要實(shí)現(xiàn)getPartition函數(shù)??紤]到hash函數(shù)可能返回負(fù)數(shù),因此返回是使用了這樣一個(gè)函數(shù)Math.abs(k)%numReduceTasks。 一開(kāi)始測(cè)試的時(shí)候沒(méi)有發(fā)現(xiàn)問(wèn)題,后來(lái)將輸入文件增多后發(fā)現(xiàn)程序會(huì)報(bào)Illegal partition for錯(cuò)誤。
3.處理過(guò)程:
直接求助google, 從http://blog.csdn.net/hezuoxiang/article/details/6878026 中看出來(lái),錯(cuò)誤是因?yàn)榉謪^(qū)函數(shù)返回了負(fù)數(shù),這個(gè)值不合理。一時(shí)有點(diǎn)懵,難道Math.abs(x)返回的不是正數(shù)?再次求助google, 明白了原來(lái)x很大(溢出變成負(fù)數(shù))或者很小的負(fù)數(shù)時(shí),即超過(guò)了int的表示范圍。返回會(huì)是個(gè)負(fù)數(shù)。至此,知道了問(wèn)題的關(guān)鍵,通過(guò)hash得到的k值太大,或者太小,超過(guò)了int的可表示范圍。嗯,c/c++程序員用java寫(xiě)hadoop就是一堆坑要踩。
4.解決方法:
(1) 換一個(gè)hash函數(shù),使得hash值在int能表示的范圍內(nèi)。
(2) 對(duì)hash函數(shù)的值先取模在取絕對(duì)值 Math.abs(k % numReduceTasks);。
到此,關(guān)于“hadoop下Illegal partition for問(wèn)題怎么處理”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。