将hadoop作业的输出发送到单个文件

时间:2014-08-08 07:15:22

标签: hadoop mapreduce

我正在使用由多个文件组成的hadoop处理一些数据。现在,我希望hadoop只在输出中发出文件。我设置了以下参数。

    set mapred.reduce.tasks=1;
    set hive.exec.reducers.max = 1;
    set hive.exec.compress.output=true;
    set hive.exec.compress.intermediate=true;

但它仍然没有用。有人可以解释一下吗?

更新:

我在hive控制台中设置这些参数。而且,我的输出不是写入hdfs而是写入亚马逊s3。

2 个答案:

答案 0 :(得分:0)

很难说,因为我不知道你在哪里设置参数。对我来说,只发出一个输出文件的最佳方法是在MR作业中使用ToolRunner实现。可在此处找到好的手册Hadoop: Implementing the Tool interface for MapReduce driver

您可以直接从CLI指定输出文件的数量,如下所示:

-D mapred.reduce.tasks=NumberOfOutputs

还可以使用DFS命令-getmerge

hdfs dfs -getmerge sourceDirectory OutputFile.txt

希望有所帮助

答案 1 :(得分:0)

如果输入数据很大,则建议将减速器设置为1。尝试使用dfs -getmerge命令。