1.虚拟 CPU 个数计算方法
CPU 个数 * 单个 CPU 核数 * 单个 CPU 核的超线程数
为了避免资源浪费, 虚拟 CPU 与内存需满足线性比例:
1 : 4 G ~ 8
2.硬盘大小
需考虑临时数据的存储: 20% ~ 30%
(存储的数据量 * 副本数 ) / DataNode 数 * (1 + 0.2 ~ 0.3)
3.HDFS参数调优
(1)hdfs-site.xml 参数
(2)core-site.xml 参数
(3)yarn-site.xml 参数
(4)mapred-site.xml 参数
<property>
<name>mmapreduce.reduce.memory.mb </name>
<value>-1</value>
</property>
解释: 该参数表示执行 Reduce 任务需要的内存大小。 它可以从 mapreduce.map.java.opts 参数设定的值继承,如果没有设 定,该值根据容器内存设置。 一般要大于 mapreduce.map.memory.mb 。
<property>
<name>mapreduce.reduce.cpu.vcores</name><value>1</value>
</property>
解释: 该参数表示执行 Reduce 任务需要的虚拟 CPU 数,默认值为 1。根据容器虚拟 CPU 数设定,可以适当加大,并且该值与参数 mapreduce.reduce.memory.mb 成线性比例才不至于浪费资源。 一般要大于 mapreduce.map.cpu.vcores 。
<property>
<name>yarn.app.mapreduce.am.resource.cpu-vcores</name>
<value>1</value>
</property>
解释: 该参数表示执 MapReduce 作业的 ApplicationMaster(二级调 度器) 向 ResourceManager(一级调度器) 申请的虚拟 CPU 个数,默 认值为 1,可以适当调大。
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>1536</value>
</property>
解释: 该参数表示执 MapReduce 作业的 ApplicationMaster(二级调 度器) 向 ResourceManager(一级调度器) 申请的内存大小,默认值为 1536 MB,可以适当调大。
<name>mapreduce.task.io.sort.mb</name>
<value>100</value>
解释: 该参数表示 Map 任务的输出的环形缓冲区大小,默认为 100MB, 可以适当调大。
<name>mapreduce.task.io.sort.factor</name>
<value>10</value>
解释: 该参数为控制 Map 端和 Reduce 端的合并策略,表现为一次合 并的文件数目,默认值为 10。 该值如果过大会使合并时内存消耗过大,如果过小会增加合并次数。
<name>mapreduce.map.sort.spill.percent</name>
<value>0.80</value>
解释: 该参数表示 Map 任务的输出的环形缓冲区的阈值,一旦缓存区 的内容占缓冲区的比例超过该值,则将缓冲区的内容刷写到mapreduce.cluster.local.dir 所配置的目录,默认为 0.8,建议不低于 0.5。
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>25</value>
解释: 该参数表示 Reduce 任务从 Map 任务复制输出的工作线程数, 默认为 5, 可以适当调高。如果设置过高,会导致大量数据在网络同时传 输,引起 I/O 压力过大,比较科学的设定方式为 4 * lgN ,其中 N 为集群 容量大小。mapreduce.cluster.local.dir 所配置的目录,默认为 0.8,建议 不低于 0.5。
<name>mapreduce.reduce.shuffle.input.buffer.percent</name>
<value>0.7</value>
解释: 该参数表示 shuffle 中的复制阶段耗费 Reduce 任务堆比例,默
认为 0.7。Reduce 任务的堆由前面的配置计算得出,可以根据具体情况
进行增减。
<name>mapreduce.reduce.shuffle.merge.parallelcopies</name>
<value>0.66</value>
解释: 表示当内存使用率超过该参数时,将会触发一次合并操作,已将内
存中的数据刷写到磁盘上,默认值为 0.66,可以根据具体情况适当调整。
<name>mapreduce.job.reduce.slowstart.completedmaps</name>
<value>0.05</value>
解释: 该参数控制 Reduce 任务的启动时机,默认值为 0.05。 表示当 Map 任务完成数目达到 5% 时,启动 Reduce 任务,这是为较 缓慢的网络传输设计的,可以适当调高。 不过 Reduce 任务启动时间过早或者过晚都会增加作业的完成时间。 如果不加设定, MapReduce 作业的 Reduce 个数默认为 1,可以根据 需要在作业中进行设定。 除了以上配置,还可以配置任务调度器,设置跳过坏记录来提高执行效率。