草庐IT

multipleOutputs

全部标签

java - 在hadoop中没有reducer的情况下限制多输出中映射器的数量

您好,我有一个从HBase读取记录并将其写入文本文件的应用程序HBase表有200个区域。我在映射器类中使用MultipleOutputs来写入多个文件,并且我正在根据传入的记录创建文件名。我正在制作40个唯一的文件名。我能够正确获取记录,但我的问题是,当mapreduce完成时,它会创建40个文件以及2k个具有正确名称但附加的额外文件用m-000等等。这是因为我有200个区域,MultipleOutputs为每个映射器创建文件,所以200个映射器,每个映射器有40个唯一文件,所以它创建40*200个文件。如果没有自定义分区程序,我不知道如何避免这种情况。有什么方法可以强制将记录写入所

hadoop - MRUnit 不适用于 MultipleOutputs

当我运行带有MultipleOutputs的基本MRUnit时,出现以下异常:java.lang.NullPointerExceptionatorg.apache.hadoop.fs.Path.(Path.java:105)atorg.apache.hadoop.fs.Path.(Path.java:94)atorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat.getDefaultWorkFile(FileOutputFormat.java:264)atorg.apache.hadoop.mapreduce.lib.outpu

Hadoop:如何将 MultipleOutputs 发送到 2 个不同的路径/文件系统?

我已将MultipleOutputs配置为生成2个命名输出。我想发送一个到s3n://和一个到hdfs://这可能吗? 最佳答案 目前可用的API无法做到这一点。MultipleOutputs类,如果HadoopMapReduce当前仅适用于(配置的输出目录的)子目录输出名称,它可以处理side-effectscausedbyspeculativeexecution.但是,您可以重新实现该类(或从它派生),以支持它,因为它并非不可能实现。如果您计划让您的实现支持推测执行,您可能还需要更复杂的OutputCommitter实现。

hadoop - 在 MapReduce 中写入多个 O/P 文件时出现问题

我需要根据过滤条件将我的输入文件拆分为2个输出文件。我的输出目录应如下所示:/hdfs/base/dir/matched/YYYY/MM/DD/hdfs/base/dir/notmatched/YYYY/MM/DD我正在使用MultipleOutputs类在我的map函数中拆分我的数据。在我的驱动程序类中,我使用如下:FileOutputFormat.setOutputPath(job,newPath("/hdfs/base/dir"));我在下面使用的Mapper中:mos.write(key,value,fileName);//FileNameisgeneratingbasedon

hadoop - 映射后的多个(独立)reduce 函数

我的map函数为相同的数据发出两种不同的键值对。当然,我需要2个独立的reduce函数来处理这个问题。可能吗?比如,我可以在map的末尾有多个output.collect()语句,并附加一个指定reducer的参数吗?我试着查找它,但找不到任何东西。 最佳答案 您应该考虑使用MultipleOutputs类(class)。它有漂亮且不言自明的文档。 关于hadoop-映射后的多个(独立)reduce函数,我们在StackOverflow上找到一个类似的问题:

hadoop - 在 Hadoop MapReduce 中对多个输出目录使用多个映射器

我想运行两个映射器,在不同的目录中产生两个不同的输出。第一个映射器的输出(作为参数发送)应该发送到第二个映射器的输入。我在驱动程序类中有这段代码importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apa

Hadoop Mapreduce MultipleOutputs 输出控制台

当我运行带有和不带有multipleOutputs的mapreduce时,控制台日志之间存在差异。我有一个仅输出到文本文件的映射器作业。没有配置MultipleOutputs,我的映射器中的代码片段:context.write(null,newText(value));控制台输出摘录Map-ReduceFrameworkMapinputrecords=2Mapoutputrecords=2有了多重输出,我的映射器中的代码片段:multipleOutputs.write(null,newText(value),FileOutputFormat.getOutputPath(context)

hadoop - oozie 中的 org.apache.hadoop.mapred.lib.MultipleOutputs.addNamedOutput()

我正在尝试使用MultipleOutputs来更改reducer中的输出文件名。我正在使用oozie工作流来运行mapreduce作业。我找不到在oozie工作流中添加以下属性的方法-MultipleOutputs.addNamedOutput(job,"text",TextOutputFormat.class,Text.class,Text.class);因为它是ooziemapreduce操作,所以我没有驱动程序类放在上面的代码。 最佳答案 答案就在方法的源代码中。来自hadoopcore1.2.1jar/**/publicst

hadoop - 如何更改 hadoop mr 作业中的 reducer 输出文件名?

我有一个reducer脚本需要生成一堆xml文件。我想使用reducer键以编程方式设置文件名。我正在使用MultipleOutputs来完成如下操作。MultipleOutputsmos=newMultipleOutputs(context);mos.write(newText(key),newText(output),key+".xml");但输出文件名类似于key.xml-r-00000。如何从文件名中删除-r-*部分,以便它只是key.xml? 最佳答案 这里的-r-0000表示它是从reducer生成的。我们不能更改它,如

hadoop - 使用 Hadoop mapreduce 进行并行缩减

我正在使用Hadoop的MapReduce。我有一个文件作为map函数的输入,map函数做了一些事情(与问题无关)。我希望我的reducer获取map的输出并写入两个不同的文件。在我看来(我想要一个高效的解决方案),我的想法有两种:1个reducer知道识别不同的情况并写入2个不同的上下文。2个并行化简器,每个化简器都知道识别其相关输入,忽略另一个化简器,这样每个化简器都会写入一个文件(每个化简器将写入不同的文件)。我更喜欢第一个解决方案,因为它意味着我将只检查map的输出一次而不是并行两次-但如果第一个在某种程度上不受支持-我会很高兴听到第二个建议的解决方案。*注意:这两个最终文件应