1 Yarn资源配置
需要调整Yarn的参数与CPU、内存等资源有关
(1)yarn.nodemanager.resource.memory-mb
设置一个NodeManager节点分配给容器Container使用的内存,取决于NodeManager所在节点的总内存容量和该节点运行的其他服务的数量,一般为总内存的1/2到2/3之间。
<!-- NodeManager节点分配给容器Container使用的内存 设置2G -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
(2)yarn.nodemanager.resource.cpu-vcores
设置一个NodeManager节点分配给Container使用的CPU核数,取决于NodeManager所在节点的总CPU核数和该节点运行的其他服务,一般一个核分配4G内存。
<!-- NodeManager节点分配给Container使用的CPU核数 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
(3)yarn.scheduler.maximum-allocation-mb
单个Container能够使用的最大内存,可以稍微调大一点。
<!-- 单个Container能够使用的最大内存 -->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1536</value>
</property>
(4)yarn.scheduler.minimum-allocation-mb
单个Container能够使用的最小内存。
<!-- 单个Container能够使用的最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
修改yarn-site.xml文件
<!-- NodeManager节点分配给容器Container使用的内存 设置64G -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<!-- NodeManager节点分配给Container使用的CPU核数 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
<!-- 单个Container能够使用的最大内存 -->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1536</value>
</property>
<!-- 单个Container能够使用的最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
保存分发然后重启yarn。
xsync yarn-site.xml
stop-yarn.sh
start-yarn.sh
2 MapReduce配置
MapReduce资源配置主要包括Map Task的内存和CPU核数,以及Reduce Task的内存和CPU核数。
(1)mapreduce.map.memory.mb
单个Map Task申请的container容器内存大小,其默认值为1024。该值不能超出yarn.scheduler.maximum-allocation-mb和yarn.scheduler.minimum-allocation-mb规定的范围。
该参数需要根据不同的计算任务单独进行配置,在hive中,可直接使用如下方式为每个SQL语句单独进行配置:
set mapreduce.map.memory.mb=1536;
(2)mapreduce.map.cpu.vcores
单个Map Task申请的container容器cpu核数,其默认值为1。
(3)mapreduce.reduce.memory.mb
单个Reduce Task申请的container容器内存大小,其默认值为1024。该值同样不能超出yarn.scheduler.maximum-allocation-mb和yarn.scheduler.minimum-allocation-mb规定的范围。
该参数需要根据不同的计算任务单独进行配置,在hive中,可直接使用如下方式为每个SQL语句单独进行配置:
set mapreduce.reduce.memory.mb=1536;
(4)mapreduce.reduce.cpu.vcores
单个Reduce Task申请的container容器cpu核数,其默认值为1。
3 Explain查看执行计划
3.1 执行计划概述
执行计划简单来说就是一个SQL语句最终翻译成多少个MapReduce,Map里做了什么,Reduce里做了什么。
Explain显示的执行计划,由一系列Stage(整个执行计划的一个阶段,一条SQL语句会把整个阶段分为若干个执行计划)组成,Stage具有依赖关系,每个Stage对应一个MapReduce Job,或者一个文件系统操作等。
若某个Stage对应的一个MapReduce Job,其Map端和Reduce端的计算逻辑分别由Map Operator Tree和Reduce Operator Tree进行描述;Operator Tree由一系列的Operator组成;一个Operator代表在Map或Reduce阶段的一个单一的逻辑操作,例如TableScan Operator,Select Operator,Join Operator等。
例如一个job执行计划:
stage-1依赖stage-0。stage-0是拉取操作,stage-1有Map核Reduce操作树。
常见的Operator及其作用如下:
TableScan:表扫描操作,通常map端第一个操作肯定是表扫描操作。
Select Operator:选取操作。
Group By Operator:分组聚合操作。
Reduce Output Operator:输出到 reduce 操作。
Filter Operator:过滤操作,如where、having。
Join Operator:join 操作。
File Output Operator:文件输出操作。
Fetch Operator 客户端获取数据操作。
3.2 基本语法
explain [formatted|extended|dependency] query_sql;
(1)formatted:将执行计划以JSON字符串形式输出。
(2)extended:输出执行计划中的额外信息,通常是读写的文件名、临时文件目录等信息。
(3)dependency:输出执行计划读取的表或分区。