0

摘要:如何让 Hadoop 在我的服务器上同时使用更多 CPU?

我在具有 64GB RAM、SSD 和 16 个 CPU 内核的单个高端服务器上运行 Cassandra 和 Hadoop。我的 mapreduce 作业的输入有 50M 行。在映射阶段,Hadoop 创建了七个映射器。其中六个很快就完成了,第七个运行了两个小时来完成地图阶段。我已经建议了更多这样的映射器......

job.getConfiguration().set("mapred.map.tasks", "12");

但 Hadoop 继续只创建了 7 个。我想让更多的映射器并行运行,以更好地利用服务器中的 16 个内核。有人能解释一下 Hadoop 如何决定创建多少个映射器吗?

在减少阶段我也有类似的担忧。我告诉 Hadoop 创建 12 个这样的 reducer ...

job.setNumReduceTasks(12);

Hadoop 确实创建了 12 个 reducer,但 11 个快速完成,最后一个运行了几个小时。我的工作有 300K 键,所以我不认为它们都被路由到同一个减速器。

谢谢。

4

1 回答 1

0

地图任务编号取决于您的输入数据。
例如:

  • 如果您的数据源是 HBase,则数字是您数据的区域编号
  • 如果您的数据源是文件,则地图编号是您的文件大小/块大小(64mb 或 128mb)。

您不能在代码中指定地图编号

6快1慢的问题是因为数据不平衡。我以前没有使用过 Cassandra,所以我不能告诉你如何修复它。

于 2013-09-25T03:31:47.900 回答