hive中的hiveconf与hivevar区别以及其作用域

1 、hivevar与hiveconf的区别:

命名空间使用权限详细描述
hivevarrw用户自定义变量
hiveconfrwhive相关配置属性
systemrwjava定义的配置属性
envrShell环境属性

通常我们可以使用hive -e查看有关hivevar与hiveconf的描述:


其中--define与hivevar定义变量是一致的。

2、hivevar与hiveconf的作用域

之前项目中涉及两个hive作业同时执行并需要传入相同key的参数,因此顾虑不清楚是否是线程安全结论先行:hivevar与hiveconf作用域都是会话级别的,言外之意就是如果两个并发同时跑的作业同时传入一个相同key但是value不相同的值的参数,不会发生线程安全问题。

接下来说明一下验证方案:

开启两个终端会话,在两个终端下执行如何两个命令:

A终端会话先启动,并执行如下命令:

 hive  --hiveconf  first_name=daxin666 --hivevar first_name=daxin777 

B终端会话在A会话之后启动,并执行如下命令:

 hive  --hiveconf  first_name=daxin666888 --hivevar first_name=daxin777888

之后查看A终端的变量值,你会发现并没有被B覆盖。所以是线程安全的,虽然没有翻阅源码,但是通过分析hive的执行过程依然可以明白为什么是线程安全的,因为hive是一个客户端工具,hive不需要分布式部署,因此也没有全局会话,hive只是作为一个翻译工具存在,将hive sql转化为mapreduce任务的客户端,每一次启动一个hive都是单独启动一个进程,因而各个进程之间是相互独立的,不存在共享变量,所以不会存在线程安全问题。 


3、对于hivevar与hiveconf的使用

hiveconf变量取值必须要使用hiveconf作为前缀参数,具体格式如下:

      ${hiveconf:key}  

但是对于hivevar取值可以不使用前缀hivevar,具体格式如下:

使用前缀:

       ${hivevar:key}

不使用前缀:

       ${key}

使用示例如下图:




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值