hadoop流媒体“comparator.options”不受尊重

mbjcgjjk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(375)

我有一个pythonMap器和reducer,我正在使用hadoop流api。在命令行上,这些脚本工作正常,并执行预期的工作。
我有一个美国宇航局的网络访问日志样本,你可以看到这里是正确的处理和排序。

tail -n 10 NASA_access_log_Jul95  | ./mapper.py | sort | ./reducer.py | sort -r -k1,1
4   163.205.53.14
1   tornado.umd.edu

在map reduce作业中尝试相同的操作时,不考虑排序。

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.4.0.jar 
-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator     
-D mapred.text.key.comparator.options=-rk1,1
-file mapper.py -mapper mapper.py 
-file reducer.py -reducer reducer.py 
-input /user/cloudera/logcount/input 
-output /user/cloudera/logcount/output

特别是参数:mapred.text.key.comparator.options=-rk1,1
作业的最终结果是:

hadoop fs -cat /user/cloudera/logcount/output/part-00000 | more
 16***.novo.dk
 32735  /
 161    /"
 1  /%20%20history/apollo/apollo-13/apollo-13.html
 4  /%20history/apollo/apollo-13/apollo-13.html

它有排序的值,而不是我想要的键。我也试过去掉r,但没有效果。
如果不清楚,我将尝试按点击/视图(第一列)降序排列结果。
感谢您的帮助!蒂亚。

woobm2wo

woobm2wo1#

您正在尝试对reducer而不是mapper的输出进行排序。请注意,排序阶段发生在map和reduce之间,这意味着mapred.text.key.comparator.options用于对mapper的输出进行排序。所以我想你有两个选择:
重写mapper和reducer,将reducer的作业集成到mapper中,而不在reducer中执行任何操作。
在此作业之后创建另一个mapreduce作业,用于按计数对输出进行排序。

相关问题