hive开启本地模式执行

先讲一个hive使用的一个小技巧。对于使用惯了oracle数据库的人来讲,hive中没有dual啊,想验证一些函数的执行结果非常麻烦。数据库

好比咱们在oracle数据库里面能够写select (1+2) from dual能够返回3。oracle

为了保证使用习惯,咱们相似的在hive中也建一张dual表:create table dual(dummy string)函数

而后往这张表中导入一个只有一行数据的文件:load data local inpath '/home/Hadoop/dual.txt' overwrite into table dualoop

这样咱们就能够在hive中用select (1+2) from dual了。大数据

接下来就是本文要阐述的内容:你会发现执行这个语句的时候提交了一个job到集群上去运行了,这么一个简单的语句都须要执行好几十秒,彻底无法接受,其实咱们使用dual的时候大多只是验证一下函数的执行结果而已,须要快速的返回咱们想看到的结果。.net

0.7版本后Hive开始支持任务执行选择本地模式(local mode)。大多数的Hadoop job是须要hadoop提供的完整的可扩展性来处理大数据的。不过,有时hive的输入数据量是很是小的。在这种状况下,为查询出发执行任务的时间消耗可能会比实际job的执行时间要多的多。对于大多数这种状况,hive能够经过本地模式在单台机器上处理全部的任务。对于小数据集,执行时间会明显被缩短。
 hadoop

如此一来,对数据量比较小的操做,就能够在本地执行,这样要比提交任务到集群执行效率要快不少。

配置以下参数,能够开启Hive的本地模式:
hive> set hive.exec.mode.local.auto=true;(默认为false)




当一个job知足以下条件才能真正使用本地模式:
1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB)
2.job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max(默认4)
3.job的reduce数必须为0或者1get

 

可是你会发现job确实是以本地模式运行了(看job名字就能看出来,中间有local字样),可是仍是会报错,各类找不到jar包。input

这里还要运行一个语句:set fs.defaultFS=file:///string

而后你再去执行前面的那条语句,能够正常运行了,执行实现只须要几秒钟而已,咱们可以很快的看到执行结果了。

相关文章
相关标签/搜索