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:输出执行计划读取的表或分区。

Logo

大数据从业者之家,一起探索大数据的无限可能!

更多推荐