繁体   English   中英

是否在hadoop中优化了中间键值对流

[英]Is intermediate key-value pair streaming optimized in hadoop

mapreduce作业中的中间键值对被写入mapred.local.dir然后被mapred.local.dir到将运行reduce任务的mapred.local.dir节点。

我知道HFDS经过优化可以写入大块数据,因此与常规文件系统相比,可以最大限度地缩短硬盘的查找时间。

现在我很好奇hadoop是否已针对流媒体中间kev值对进行了优化,以及本地文件系统?

我问这个是因为我的应用程序输入数据很少,但是有大量的中间数据和中等大小的输出数据。 在我的案例中,hadoop是有益的还是我应该考虑一个不同的框架? (请注意,我的软件与WordCount密切相关,但我会发出所有子字符串而不是所有单词)

非常感谢您的帮助!

编辑:我稍微回答了这个问题,因为乍一看我给人的印象是中间kv对被发送到HDFS,它们被发送到tasktracker节点的本地文件系统!

中间输出存储在本地FS不是HDFS上 因此,优化的HDFS有多​​少并不重要。 但是,如果要扩展磁盘i / o以提高效率,可以使用不同设备上以逗号分隔的目录列表作为mapred.local.dir属性的值。 这将分散负载,从而提高性能。

您也可以使用合成器来改善效果。

HDFS是否针对中间数据进行了优化?

就像@Tariq提到的那样,HDFS并不用于中间数据(尽管有些人已成功探索过这个想法 )。

所以,让我重新提一下你的问题:

Hadoop是否针对中间数据进行了优化?

是的,有一些优化(例如,请参阅MAPREDUCE-3289 JIRA )。

即使有了这些优化措施,在这一阶段,洗牌重的工作也会遇到瓶颈。 调整配置参数(如mapreduce.reduce.shuffle.input.buffer.percent )可以在一定程度上帮助缓解此问题。 使用组合器(由@Tariq建议)也是一个好主意。

在我的案例中,hadoop是有益的还是我应该考虑一个不同的框架?

是的,Hadoop在您的情况下仍然有用(假设您没有以单节点模式运行)。 您可以更好地编写自己的代码,针对您的特定用例进行优化,但这样做太多了(您必须自己处理失败等)以证明这样做(在大多数情况下)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM