当前位置: 首页 > 知识库问答 >
问题:

从两个文件连接Hadoop数据-如何强制映射器读取特定文件

焦信鸥
2023-03-14

我正试图在hadoop中编写一个数据连接映射Reduce作业。我觉得我很接近,但我有一个问题,阻止地图1馈入地图2。

我有两个映射器和一个减少,并试图强制Map1从一个文件读取,同时强制Map2从另一个文件读取。我想在减少器中解析结果以格式化连接输出。

我知道默认情况下,当在作业中链接映射器时,作业的输出将是下一个作业的输入,我知道这可以被覆盖,但不成功。来自 map1 的数据被确认将馈送到 map2 中。

这就是我认为应该指定单个映射器的输入路径的方式:

        //Setting Configuration for map2
        JobConf map2 = new JobConf(false);
        String[] map2Args = new GenericOptionsParser(map2, args).getRemainingArgs();
        FileInputFormat.setInputPaths(map2, new Path(map2Args[1]));
        ChainMapper.addMapper(  conf,
                                Map2.class,
                                LongWritable.class,
                                Text.class,
                                Text.class,
                                Text.class,
                                true,
                                map2);

< code>conf是主作业配置,而< code>args由3个值组成。第一个值是输入文件,第二个值是输入文件,第三个值是预期的输出文件。

在hadoop中处理数据连接和多个映射器时,为单个映射器指定输入路径的正确方法是什么?

共有1个答案

袁谭三
2023-03-14

这种情况可以通过使用多输入格式来解决。使用这种输入格式,我们可以读取两个不同格式的文件,两者结合的结果将用于简化工作。

以下链接中给出了概念和示例的简要说明。

https://github.com/subbu-m/MultipleInputFormat

我希望这些信息能有所帮助。

 类似资料:
  • 问题内容: 似乎mmap接口仅支持readline()。如果我尝试遍历对象,则会得到字符而不是完整的行。 逐行读取mmap文件的“ pythonic”方法是什么? 问题答案: 遍历an行的最简洁方法是 请注意,在Python 3的前哨参数必须是类型的,而在Python 2它需要一个(即,而不是)。

  • 我使用的是hadoop版本0.20和hadoop-core:1.2.0.jar 有没有可能使用新的hadoop API做到这一点?

  • 我正在使用Hadoop 0.20.2,如果可能的话,我想使用-cat shell命令将两个文件连接成一个文件(来源:http://hadoop.apache.org/common/docs/r0.19.2/hdfs_shell.html) 这是我正在提交的命令(名称已更改): 它返回bash: /user/username/folder/outputdirectory/:没有这样的文件或目录 我还

  • maptask:开始刷新映射输出 2017-04-20 20:53:20,101 WARN[main]org.apache.hadoop.mapred.yarnchild:异常运行子级:java.lang.nullPointerException位于org.apache.parquet.avro.avroschemaconverter.convertField(avroschemaconverte

  • 问题内容: 下面的Mappers代码从HDFS读取文本文件正确吗?如果是这样的话: 如果不同节点中的两个映射器尝试几乎同时打开文件,会发生什么情况? 是否不需要关闭?如果是这样,如何在不关闭文件系统的情况下执行此操作? 我的代码是: 问题答案: 这将起作用,并进行一些修改-我假设您粘贴的代码被截断了: 您可以有多个映射器读取同一个文件,但是使用分布式缓存存在更多的局限性(不仅减少了承载文件块的数据

  • 我有一个包含5个字段(列)的csv文件。在5列中,我只想读第二列和第四列,这是进一步处理所需的。现在我正在使用opencsv api的readAll()方法进行读取。通过使用这种方法,我必须处理所有列,以获得第二列和第四列的值。 有没有办法读取所需列的值,即从csv文件中读取第二个和第四个值? 这是正确的方法还是我应该使用其他方法?