1

我正在 Google Compute Engine 的 Hadoop 集群上测试一些 MapReduce 作业的扩展,并发现了一些意想不到的结果。简而言之,有人告诉我这种行为可能是因为 Hadoop 集群中的每个工作节点都有多个减速器插槽。

有人可以确认 GCE 的 Hadoop 集群上 MapReduce 作业的每个工作节点(工作虚拟机)的减速器插槽数量吗?我正在使用 hadoop2_env.sh 部署。

https://groups.google.com/a/cloudera.org/forum/#!topic/oryx-user/AFIU2PE2g8o提供了关于我正在经历的行为的背景讨论的链接,如果需要,可以获取更多详细信息。

谢谢!

4

1 回答 1

1

其中bdutil,reduce 插槽的数量是机器上的内核总数和环境变量的函数,CORES_PER_REDUCE_TASKconfigure_hadoop.sh中应用:

export NUM_CORES="$(grep -c processor /proc/cpuinfo)"
export MAP_SLOTS=$(python -c "print int(${NUM_CORES} // \
    ${CORES_PER_MAP_TASK})")
export REDUCE_SLOTS=$(python -c "print int(${NUM_CORES} // \
    ${CORES_PER_REDUCE_TASK})")

<...>

# MapReduce v2 (and YARN) Configuration
if [[ -x configure_mrv2_mem.py ]]; then
  TEMP_ENV_FILE=$(mktemp /tmp/mrv2_XXX_tmp_env.sh)
  ./configure_mrv2_mem.py \
      --output_file ${TEMP_ENV_FILE} \
      --total_memory ${TOTAL_MEM} \
      --available_memory_ratio ${NODEMANAGER_MEMORY_FRACTION} \
      --total_cores ${NUM_CORES} \
      --cores_per_map ${CORES_PER_MAP_TASK} \
      --cores_per_reduce ${CORES_PER_REDUCE_TASK} \
      --cores_per_app_master ${CORES_PER_APP_MASTER}
  source ${TEMP_ENV_FILE}
  # Leave TMP_ENV_FILE around for debugging purposes.
fi

您可以看到hadoop2_env.sh,默认情况下每个 reduce 插槽有 2 个核心:

CORES_PER_REDUCE_TASK=2.0

最佳设置可能因工作负载而异,但在大多数情况下,这些默认设置应该没问题。如您链接的线程中所述,您可以遵循的一般方法是在您的实际工作负载中,设置computation-layer.parallelism大约等于您拥有的减少槽数。如果您使用默认设置,只需将您拥有的机器数量乘以每台机器的核心数除以 2 即可知道插槽数。如果您希望每台机器有 1 个减少插槽,请设置CORES_PER_REDUCE_TASK为每台机器的核心数。

我说大概是因为在设置作业中减少任务的数量还有其他高级设置,包括“推测执行”设置;一个典型的建议是将你的 reduce 并行度设置得少一点,也许是 reduce 槽数的 0.95 倍;这为失败或卡住的减少任务留出了一些空间。

此外,尽管由于不同reduce任务的速度差异很大,由于需要执行多个“波”而导致预期的减慢,但当您将并行度增加到超过reduce槽的数量时,您可能已经看到了一些性能更快的情况。在某些差异较大的工作负载中,第二个“wave”可以有效地与第一个“wave”中最慢的任务同时运行;之前Hadoop wiki给出了一个经验法则,将 reduce 并行度设置为可用 reduce 槽数的 0.95 或 1.75 倍。这是有关该主题的进一步讨论;那里的海报正确地指出,这些仅适用于单租户集群。

如果您确实想与大量用户同时共享一个大型集群,则这些经验法则不适用,因为您应该完全根据工作负载的大小和特征来分配并行度,因为您不想占用 100集群资源的百分比。但是,在云环境中推荐的方法确实是拥有多个较小的单租户集群,因为您可以针对您想要的工作负载专门调整每个集群,而无需担心在许多不同用途中的资源打包案例。

于 2015-04-03T17:17:46.693 回答