我运行了一个map reduce程序来读取hdfs文件,如下所示:
hadoop jar /opt/mapr/hadoop/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-dev-streaming.jar -Dmapred.reduce.tasks=1000 -file $homedir/mapper.py -mapper $homedir/mapper.py -file $homedir/reducer.py -reducer $homedir/reducer.py -input /user/data/* -output /output/ 2> output.text
需要确认的是,/user/data/*路径中有包含文件的文件夹,/user/data/*将迭代所有子文件夹下的所有文件,对吗?
hdfs文本文件包含每行的json字符串,因此Map程序按如下方式读取该文件:
for line in sys.stdin:
try:
object = json.loads(line)
但是hdfs的所有者将文件从text更改为sequencefile。我发现map reduce程序输出了很多零大小的文件,这可能意味着它没有成功地从hdfs读取文件。
我应该将什么更改为代码以便可以从sequencefile中读取?我还有一个配置单元外部表,可以根据mapreduce的输出执行聚合和排序,并且配置单元以前存储为textfile,我应该改为存储为sequencefile吗?
谢谢,
1条答案
按热度按时间bq8i3lrv1#
看看这个
在mapreduce作业之前在python文件下运行
输入:序列文件
输出:您对mapreduce的输入
现在不必更改原始python文件。