自动将每个节点的最大映射任务数设置为核心数?

job*_*job 5 hadoop

我正在设置一个hadoop集群,其中节点都是相当异构的,即它们每个都有不同数量的核心.目前我必须手动编辑mapred-site.xml每个节点以填写{cores}:

<property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>{cores}</value>
</property>
Run Code Online (Sandbox Code Playgroud)

添加新节点时,有更简单的方法吗?大多数其他值都是默认值,并且最大映射任务是从节点到节点的唯一变化.

Chr*_*ite 3

如果您对某些脚本感到满意,那么以下将为您提供每台机器的“处理器”数量(这对不同的体系结构意味着不同的东西,但或多或​​少是您想要的):

cat /proc/cpuinfo | grep processor | wc -l
Run Code Online (Sandbox Code Playgroud)

然后您可以使用sed或等效的东西根据其输出更新您的mapred-site.xml 文件。

所以把这一切放在一起:

CORES=`cat /proc/cpuinfo | grep processor | wc -l`
sed -i "s/{cores}/$CORES/g" mapred-site.xml
Run Code Online (Sandbox Code Playgroud)

脚注,但您可能不想将映射器的数量和减速器的数量分别配置为核心数量,更多的是您可能希望将它们拆分为两种类型,并为数据节点留出一个核心备用和任务跟踪器等