gpt4 book ai didi

hadoop - hadoop能否让mapper将部分数据发送给reducer,剩下的数据直接输出到HDFS?

转载 作者:可可西里 更新时间:2023-11-01 15:39:49 26 4
gpt4 key购买 nike

正如标题所说,我有一个关于map-reduce的任务设计:

经过思考,我认为只需要将部分数据(可能是10%的数据)送入reducer,剩下的数据直接输出到HDFS即可。然后最后,我只是合并了 mapper 和 reducer 的这两个输出文件(我必须得到一个关于这个总数据的统一文件或目录)。我认为,通过这样做,可以降低此任务运行的带宽成本。

那么我的想法能实现吗? (我知道如何直接从 mapper 输出到 HDFS,但这需要 mapper 既输出到 HDFS 又将数据发送到 reducer)

最佳答案

一种解决方案是使用 MultipleOutputs's write() method对于 90% 的文件和其余 10% 的文件,您可以使用映射器中的普通 context.write(),这样它们就只进入 reducer。

可以使用 MultipOutputs 中的这个函数 -

void write(K key, V value, String baseOutputPath);

第二种解决方案是使用 FileSystem (来自Hadoop Api)直接让Mapper将90%的文件输出到HDFS。但我不知道如果你运行很多映射器,效率会有多高。上面的 MultipleOutput 也是如此 -

类似于:

在 mapper 的 setup() 函数中执行此操作 -

FileSystem fs = file.getFileSystem(context.getConfiguration());
FSDataOutputStream fileOut = fs.create(new Path("your_hdfs_filename"));

map() 函数中执行此操作 -

create() 函数会返回一个 FSDataOutputStream 对象。使用 write() 函数写入文件。

完成后在 cleanup() 函数中关闭 FileSystem 对象。类似于 - fs.close();

关于hadoop - hadoop能否让mapper将部分数据发送给reducer,剩下的数据直接输出到HDFS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18071498/

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