hadoop作业使用相同的reducer输出到相同的文件

kulphzqa  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(350)

我遇到了一个有趣的情况,现在正在寻找如何做到这一点有意。在本地单节点设置中,我从终端屏幕同时运行了两个作业。我的两个作业使用相同的缩减器,它们只是在Map函数(聚合键-group by)上有区别,两个作业的输出都被写入第一个作业的输出(虽然第二个作业确实创建了自己的文件夹,但它是空的)。我正在研究的是提供跨不同级别的汇总聚合,这种行为对我来说很有趣,两个不同级别的聚合输出可以在一个文件中使用(也可以完全排序)。
我的问题是如何在真正的hadoop集群中实现相同的功能,在hadoop集群中,我们有多个数据节点,即以编程方式启动多个作业,所有作业都访问相同的输入文件,Map不同的数据,但使用相同的缩减器,并且输出在一个文件中可用,而不是在5个不同的输出文件中可用。
请告知。
在我决定提问之前,我正在查看reduce阶段之后的合并输出文件。
谢谢并致以亲切的问候,
莫伊兹·艾哈迈德。

daolsyd0

daolsyd01#

当不同的Map器使用相同的输入文件(换句话说,使用相同的数据结构)时,所有这些不同Map器的源代码可以放入单个Map器实现的不同方法中,并使用上下文中的参数来决定要调用哪些Map函数。在优点方面,您只需要开始一个map reduce作业。例如伪代码:

class ComplexMapper extends Mapper {

protected BitSet mappingBitmap = new BitSet();

protected void setup(Context context) ... {
{
    String params = context.getConfiguration().get("params");
    ---analyze params and set bits into the mappingBitmap
}

protected void mapA(Object key, Object value, Context context){
.....
context.write(keyA, value);
}

protected void mapB(Object key, Object value, Context context){
.....
context.write(keyA, value);
}

protected void mapB(Object key, Object value, Context context){
.....
context.write(keyB, value);
}

public void map(Object key, Object value, Context context) ..... {
   if (mappingBitmap.get(1)) {
       mapA(key, value, context);
   }
   if (mappingBitmap.get(2)) {
       mapB(key, value, context);
   }
   if (mappingBitmap.get(3)) {
       mapC(key, value, context);
   }
}

当然,它可以通过接口等更优雅地实现。
在作业设置中,只需添加:

Configuration conf = new Configuration();
conf.set("params", "AB");

Job job = new Job(conf);

正如praveen sripati所提到的,拥有一个输出文件会迫使您只拥有一个reducer,这可能对性能不利。当您从hdfs下载部件**文件时,可以始终将它们连接起来。例子:

hadoop fs -text /output_dir/part* > wholefile.txt
2ekbmq32

2ekbmq322#

通常每个reducer任务在hdfs中生成一个单独的文件,以便reduce任务可以并行运行。如果要求reduce任务有一个o/p文件,那么将作业配置为有一个reducer任务。可以使用mapred.reduce.tasks属性(默认值为1)配置缩减器的数量。这种方法的缺点是只有一个减速机可能是完成工作的瓶颈。
另一种选择是使用其他输出格式,它允许多个reducer像dbouputformat一样同时写入同一个接收器。作业处理完成后,可以将数据库的结果导出到平面文件中。这种方法可以使多个reduce任务并行运行。
另一种选择是合并op中提到的o/p文件。因此,根据每种方法的优缺点和要处理的数据量,可以选择其中一种方法。

相关问题