gpt4 book ai didi

java - 多个输入:将相同的输入添加到多个映射器以进行比较

转载 作者:行者123 更新时间:2023-12-02 21:59:26 24 4
gpt4 key购买 nike

我有两个Mapper类,它们从同一文件夹中获取一些文件作为输入,并根据具有时间戳的文件名来确定该文件必须作为输入提供给哪个Mapper。有时碰巧会将相同的输入文件作为输入提供给两个不同的Mappers。现在,我已经测试了当两个映射器都有两个不同的输入时,它是否可以工作,但是当我给它们两个相同的输入时,则一个Mapper类不会生成要用于简化器中进行比较的结果。

该代码是巨大的,因此,与其将其放到这里,不如描述我所做的。我创建了两个列表,并根据目录中包含时间戳的文件的名称进行扫描,将它们放在两个不同的列表中,然后将它们添加到两个不同的Mappers中,即,它们的计算方式不同,因此我使用不同的方法要计算的映射器,该映射器随后用于在化简器中进行比较,但是当与两个映射器的时间标准相同时,如果输入文件相同,则该映射器中的一个不会生成任何结果。那是因为一个映射器因为另一个正在使用它而无法访问文件,如果是这种情况,那么它周围有任何办法。

这里的MapPath1是一个列表,而MapPath2是另一个列表

for(i=0;i<MapPath1.size();i++)
MultipleInputs.addInputPath(job,new Path(MapPath1.get(i)),TextInputFormat.class,Map1.class);
if(type.equals("comparative"))
for(i=0;i<MapPath2.size();i++)
MultipleInputs.addInputPath(job,new Path(MapPath2.get(i)),TextInputFormat.class,Map2.class);

更新

我只是发现这个问题( Multiple mappers in hadoop)与我的问题相似,但是我不想复制输入文件,因为它可能很大。谁能指导我如何使用不同的Mappers创建两个单独的作业并将其提供给单个化简器。

最佳答案

one of the Mapper class doesn't generate the result to be used for comparison in the reducer.



我的猜测是两个映射器都在同一任务跟踪器节点上启动,并且中间的映射器输出位置由两个映射器任务共享-您应该检查启动这些映射任务的任务跟踪器节点以确认这一点。

另外,应通过将reduce任务数设置为零并检查输出来运行仅映射器作业,这是为了确认映射器未共享输出目录。

要解决您的问题-听起来您正在将同一个文件传递给映射器,并将来自两个映射器的数据传递给单个化简器。这有一些重复,您的作业输出可以重复吗?

关于java - 多个输入:将相同的输入添加到多个映射器以进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com