为什么Hadoop被认为是I/O密集型的?

为什么Hadoop被认为是I/O密集型的?,hadoop,mapreduce,Hadoop,Mapreduce,我一直在阅读一些关于Hadoop Map/Reduce的文献,总的主题似乎是:Hadoop作业是I/O密集型的(例如:使用Map/Reduce进行排序) 是什么使得这些工作I/O密集(考虑到Hadoop将计算推送到数据上的事实)? 示例:为什么Hadoop I/O中的排序是密集型的 我的直觉:似乎在映射阶段之后,中间对被发送到还原器。这是造成巨大I/O的原因吗 Hadoop用于对大量数据执行计算。您的作业可能受到IO(您称之为I/O密集型)、CPU和网络资源的限制。在使用Hadoop的典型案例中

我一直在阅读一些关于Hadoop Map/Reduce的文献,总的主题似乎是:Hadoop作业是I/O密集型的(例如:使用Map/Reduce进行排序)

是什么使得这些工作I/O密集(考虑到Hadoop将计算推送到数据上的事实)? 示例:为什么Hadoop I/O中的排序是密集型的


我的直觉:似乎在映射阶段之后,中间对被发送到还原器。这是造成巨大I/O的原因吗

Hadoop用于对大量数据执行计算。您的作业可能受到IO(您称之为I/O密集型)、CPU和网络资源的限制。在使用Hadoop的典型案例中,您对大量输入数据执行本地计算,同时返回相对较小的结果集,这使得您的任务比CPU和网络密集型任务更需要IO,但这在很大程度上取决于作业本身。以下是一些例子:

  • IO密集型作业。您在地图端读取了大量数据,但地图任务的结果并没有那么大。例如,计算输入文本中的行数,计算RCfile中某列的总和,通过group by一个基数相对较小的列获取单个表上的配置单元查询结果。这意味着你的工作主要是读取数据并对其进行一些简单的处理
  • CPU密集型作业。当您需要在地图或缩小面上执行一些复杂的计算时。例如,您正在执行某种NLP(自然语言处理),如标记化、部分speach标记、词干分析等。此外,如果您以高压缩率的格式存储数据,数据解压缩可能会成为该过程的瓶颈(这里是他们寻求CPU和IO之间平衡的地方)
  • 网络密集型。通常,如果您看到集群上的网络利用率很高,这意味着有人没有抓住重点,执行了通过网络传输大量数据的作业。在使用wordcount的示例中,想象一下在这个作业中只使用映射器和减缩器处理1PB的输入数据,而不使用组合器。这样,在map和reduce任务之间移动的数据量将比输入数据集还要大,所有这些数据都将通过网络发送。此外,这可能意味着您不使用中间数据压缩(mapred.compress.map.output和mapred.map.output.compression.codec),原始地图输出通过网络发送
  • 有关集群的初始调优,请参阅
    那么为什么排序是IO密集型的呢?首先,从磁盘读取数据。其次,在排序中,映射程序生成的数据量与读取的数据量相同,这意味着它很可能无法放入内存,应该溢出到磁盘。然后它被转移到减速器,并再次溢出到磁盘。然后它被reducer处理并再次刷新到磁盘。而排序所需的CPU相对较小,特别是如果排序键是一个数字,可以很容易地从输入数据中解析出来。

    是的,并且数据被写入磁盘。是否存在计算密集型的情况?一般意义上的传统排序算法需要大量计算。是的,当您不从磁盘读取(大量)内容时;-)答案是:视情况而定。MR(通常)迭代所有数据。这是否是(相对)IO密集型取决于您打算进行的计算量。