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任务的大小,如果满足以下阈值,则会在本地运行查询任务:
- 总共输入的字节大小小于
hive.exec.mode.local.auto.inputbytes.max(默认是128M) - 总共的
map任务小于hive.exec.mode.local.auto.tasks.max(默认是4个) - 总共的
reduce任务要求是1个或者0个
因此,对于小型数据集的查询,或具有多个 map-reduce 作业的查询,其中后续作业的输入要小得多(因为先前作业中的缩减/过滤),作业可能会在本地运行。
本地MapReduce任务的执行是在Hive的子虚拟机中完成的,如果用户想要控制子虚拟机的内存,可以通过设置hive.mapred.local.mem来控制。默认情况下这个值是0,代表Hive让Hadoop来决定子虚拟机的内存大小。