0

我的问题的要点是..如何减少一项工作可能需要的地图扫描次数?一个job的map任务数是data_size/HDFS_BLOCK_SIZE。完成此操作可能需要的扫描次数取决于我们拥有的地图槽数。假设我什么都不运行,只运行一个作业,我发现每个节点的 CPU 利用率很低(这意味着我实际上可以在每个节点上运行更多的映射作业)。我使用了 mapred.tasktracker.map.tasks.maximum 参数(例如,我的每个节点都有 32 个处理器,我将其设置为高达 30)——但我永远无法增加映射槽的数量和整体 CPU 利用率是60%左右。还有其他参数可以玩吗?我拥有的数据量足够大(32GB,

4

2 回答 2

0

对不起,我的安装一定有问题。我碰巧重新安装了hadoop,它按预期工作。我想某些参数一定是冲突的。

于 2012-08-17T03:29:24.950 回答
0

如果有人还没有告诉你:MapReduce 主要是 IO 绑定的,它必须从磁盘读取大量数据,将其写回,读取并再次写入。在读取和写入之间,它执行你的 map 和 reduce 逻辑。

所以我听说提高 CPU 使用率是使集群不再受 IO 限制

  • RAID-0 或 RAID-10 您的硬盘,获得最快的硬盘。在消费市场上,有 10k RPM 的西部数据 VelociRaptors。
  • SSD 的贡献不大,因为 Hadoop 主要针对顺序辐射进行了优化。
  • 提供尽可能多的网络带宽。
  • 大量用于磁盘缓存的 RAM。

即使这样,您也应该面临 <100% 的 CPU 使用率,但这要好得多,并且性能会飙升。

但是,正如您可能从以上几点得出的结论一样,CPU 利用率并不是 Hadoop 集群的一个好的指标。Hadoop 主要是关于数据的可靠存储,提供简洁的功能来处理它。没有给你超级计算机的性能,如果你需要这个得到一个 MPI 集群和一个 PH.D 来编码你的算法;)

于 2012-08-04T09:24:01.347 回答