开启Hive的本地模式

来源:互联网 发布:广电网络机顶盒wifi 编辑:程序博客网 时间:2024/06/05 18:38

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

比如我们在oracle数据库里面可以写select (1+2) from dual可以返回3。

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

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

这样我们就可以在hive中用select (1+2) from dual了。

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

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

如此一来,对数据量比较小的操作,就可以在本地执行,这样要比提交任务到集群执行效率要快很多。

配置如下参数,可以开启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或者1


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

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

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

原创粉丝点击