Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop-使用Java将reducer输出合并到单个文件_Java_Hadoop_Mapreduce_Apache Pig_Hdfs - Fatal编程技术网

Hadoop-使用Java将reducer输出合并到单个文件

Hadoop-使用Java将reducer输出合并到单个文件,java,hadoop,mapreduce,apache-pig,hdfs,Java,Hadoop,Mapreduce,Apache Pig,Hdfs,我有一个pig脚本,它生成一些到HDFS目录的输出。pig脚本还在同一HDFS目录中生成一个成功文件。pig脚本的输出分为多个部分,因为脚本中要使用的还原器的数量是通过“SET default_parallel n;”定义的 我现在想使用Java将所有文件部分连接/合并到一个文件中。我显然想在连接时忽略成功文件。我如何在Java中做到这一点 提前感谢。这似乎不容易做到的原因是通常没有什么目的。如果我有一个非常大的集群,并且我真的在处理一个大数据问题,那么我的输出文件作为一个文件可能不适合任何一台

我有一个pig脚本,它生成一些到HDFS目录的输出。pig脚本还在同一HDFS目录中生成一个成功文件。pig脚本的输出分为多个部分,因为脚本中要使用的还原器的数量是通过“SET default_parallel n;”定义的

我现在想使用Java将所有文件部分连接/合并到一个文件中。我显然想在连接时忽略成功文件。我如何在Java中做到这一点


提前感谢。

这似乎不容易做到的原因是通常没有什么目的。如果我有一个非常大的集群,并且我真的在处理一个大数据问题,那么我的输出文件作为一个文件可能不适合任何一台机器

也就是说,我可以看到使用度量集合,您可能只想输出有关数据的一些度量,比如计数

在这种情况下,我会先运行你的MapReduce程序, 然后创建读取数据的第二个map/reduce作业,并通过使用reduce函数的静态键将所有元素缩减为同一个缩减器

或者,您也可以将单个映射器与原始程序一起使用
Job.setNumberOfReducer(1)

您可以通过shell命令使用
getmerge
将多个文件合并到单个文件中

Usage: hdfs dfs -getmerge <srcdir> <destinationdir/file.txt>

Example: hdfs dfs -getmerge /output/dir/on/hdfs/ /desired/local/output/file.txt

我希望这将对您有所帮助。

您可能对另一个问题感兴趣:+1对于getmerge。但我认为它只适用于纯文本文件?所以,一旦您使用压缩输出或avro或拼花文件,这很可能无法工作。
--Assigning only one reducer in order to generate only one output file.
SET default_parallel 1;