我正在使用由多个文件组成的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,而是写入Amazon s3。
很难说,因为我不知道你在哪里设置的参数。对我来说,只发出一个输出文件的最好方法是在您的MR作业中使用ToolRunner
实现。好的手册可以在这里找到Hadoop:实现MapReduce驱动的工具接口。
那么你可以直接从CLI中指定输出文件的数量,像这样:
-D mapred.reduce.tasks=NumberOfOutputs
也可以使用DFS命令-getmerge:
hdfs dfs -getmerge sourceDirectory OutputFile.txt
希望有所帮助
如果输入数据非常大,则不建议将reducer设置为1。试试DFS -getmerge命令。