Hadoop使用技巧

如果Hadoop出現問題,找到Hadoop提供的網址查看進度。然後看被kill掉的程序中的:


找裏面的error log,看看問題出在哪裏?


使用Hadoop寫腳本的時候最好寫個main函數,然後把其他東西全都包裝成函數。最後運行main。


至於hadoop hce跟steaming不一樣,是適配C++的Hadoop。所以第一個參數是要運行的c++文件,然後後面就是輸入參數了。但是要注意,args[1] = 1而不是segment。而args[0]是c++文件的路徑,這點跟Java不同。


hadoop多路輸出:

http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html

啓動腳本中需要指定-outputformat org.apache.hadoop.mapred.lib.SuffixMultipleTextOutputFormat或者-outputformat org.apache.hadoop.mapred.lib.SuffixMultipleSequenceFileOutputFormat,


所有標準輸出的value中都要加上 #X後綴,X代表A-Z, 不然會報invalid suffix錯誤 


hadoop的排序是採用二進制的方式進行排序的跟普通的Linux的sort有一點小小的差異性,如果你發現兩個相同字段居然沒有排在一起,那就一定是因爲其中一個字段可能後面跟了“\3”"\t"這種隱形字符。

例如,mimida 和 mimida\3可能不會排在一起。總之需要注意的是對中文進行排序時需要注意。而且默認的是\t。


字符串匹配的時候一定要把那些隱形字符\t \3去掉再進行匹配。因爲你看上去都是一樣的mimida,如果其中一個帶上了一個\3就會讓你debug半天!

hadoop會自動在每一行mapper的輸出上加\t\n

也就是說自動會換行,自動會在最後一行加一個\t。

所以如果reducer不是用\t匹配的話一定要把\t和\n去掉


小知識:


args是C++傳進去的參數,0是文件的路徑,1是第一個參數,2是第二個參數,這點跟Java不同。




如果只有單行數據,hadoop會在最後一行自動加\t。做數據統計的時候注意啊,如果只有一列一定要清掉\t啊!!!!!






發佈了55 篇原創文章 · 獲贊 18 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章