Hive,MapReduce和Local Mode
Hive编译器(compiler)会为绝大多数查询操作生成MapReduce任务。这些任务会被提交给MapReduce集群,下面的变量指定了集群的位置:
mapred.job.tracker
(可用命令查看变量值:set mapred.job.tracker)
一般情况下,这个变量指定了拥有多个节点的集群位置。Hadoop也提供了设置让用户能够在自己的工作站上面运行本地任务。在查询小规模数据的情况下会非常有用-在这种情况下本地模式运行通常会比提交到集群上快得多。数据会从HDFS上下载到本地上。需要清楚的是,本地模式只运行一个reducer,所以处理大数据集会非常慢。
从0.7版本开始,Hive全面支持本地模式执行方式。下面是开启本地模式执行的设置选项:
hive> SET mapreduce.framework.name=local;
除此之外,mapred.local.dir指定了本地模式任务的运行路径(如果不设置或者设置不正确,将会产生本地磁盘空间分配异常)。
从0.7版本开始,Hive也支持自动运行本地模式任务。相关的选项有:
选项 | 默认值 | 描述 |
hive.exec.mode.local.auto | false | 是否开启 |
hive.exec.mode.local.auto.inputbytes.max | 134217728(128M) | 任务的总输入文件不超过此大小 |
hive.exec.mode.local.auto.tasks.max | 4 | 总的map-task数小于此 |
另一个限制条件是:reduce-task的数量为0或者1;
更新:
部分选项有变化:
需要注意的是:由于Hadoop服务器节点和Hive客户端的jvm版本或者库的差异,运行本地任务是可能发生不可预料的行为或者错误。
本地任务的执行是在一个独立的Hive客户端的子jvm中完成的。用户可以通过设置hive.mapred.local.mem选项限定jvm的最大内存量。默认设为为0,意味着Hive让Hadoop自行决定子jvm的内存占用量。