我一直在阅读有关Hadoop Map / Reduce的一些文献,一般主题似乎是:Hadoop Jobs是I / O密集型的(例如:使用Map / Reduce进行排序)。
是什么让这些工作I / O密集(考虑到Hadoop将计算推送到数据的事实)? 示例:为什么在Hadoop I / O密集型中进行排序?
我的直觉:似乎在地图阶段之后,中间对被发送到reducer。这会导致巨大的I / O吗?
答案 0 :(得分:5)
Hadoop用于对大量数据执行计算。您的工作可能受IO(您称之为I / O密集型),CPU和网络资源的限制。在Hadoop使用的经典案例中,您正在对大量输入数据执行本地计算,同时返回相对较小的结果集,这使得您的任务比CPU和网络密集型更加IO密集,但它在很大程度上取决于作业本身。以下是一些例子:
您可以参考this guide进行群集的初始调整 那么为什么排序是IO密集型的?首先,您从磁盘读取数据。接下来,在排序时,映射器生成的数据量与读取的数量相同,意味着它很可能不适合内存并且应该溢出到磁盘。然后它被转移到减速器并再次溢出到磁盘。然后它由reducer处理并再次刷新到磁盘。虽然排序所需的CPU相对较小,特别是如果排序键是一个数字,并且可以很容易地从输入数据中解析。