Hadoop使用技巧

来源:互联网 发布:淘宝卖家的支付宝红包 编辑:程序博客网 时间:2024/06/05 10:21

如果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啊!!!!!






0 0