Hadoop - Hive篇之MapReduce集群和本地模式

572 阅读1分钟

MapReduce集群和本地模式配置

1. MapReduce集群

Hive为大多数查询生成一个MapReduce任务,通过指定mapred.job.tracker值,将任务提交到MapReduce集群上。

2. Local-Mode

当用户没有MapReduce集群的时候,可以在本地模式提交MapReduce查询任务,通过设置:

# 在beeline/hive命令行中SET如下变量,指定在local模式下运行
hive> SET mapreduce.framework.name=local;

其次设置,否则将会抛出分配磁盘空间异常的错误:

mapred.local.dir=<本地的路径>

3. auto Local-Mode configs

自0.7版本之后的Hive,提供了一些在本地运行MapReduce任务的相关操作,这些环境变量控制的特性默认是关闭的,详细的用法可以网上查阅:

hive.exec.mode.local.auto
hive.exec.mode.local.auto.inputbytes.max
hive.exec.mode.local.auto.tasks.max

如果启用以上这些配置的话,Hive会分析每个查询中MapReduce任务的大小,如果满足以下阈值,则会在本地运行查询任务:

  1. 总共输入的字节大小小于hive.exec.mode.local.auto.inputbytes.max(默认是128M)
  2. 总共的map任务小于hive.exec.mode.local.auto.tasks.max(默认是4个)
  3. 总共的reduce任务要求是1个或者0个

因此,对于小型数据集的查询,或具有多个 map-reduce 作业的查询,其中后续作业的输入要小得多(因为先前作业中的缩减/过滤),作业可能会在本地运行。

本地MapReduce任务的执行是在Hive的子虚拟机中完成的,如果用户想要控制子虚拟机的内存,可以通过设置hive.mapred.local.mem来控制。默认情况下这个值是0,代表Hive让Hadoop来决定子虚拟机的内存大小。