hive beeline hivevar和hiveconf的區別


轉載 https://blog.csdn.net/Dax1n/article/details/80822755

1 、hivevar與hiveconf的區別:
命名空間 使用權限 詳細描述
hivevar rw 用戶自定義變量
hiveconf rw hive相關配置屬性
system rw java定義的配置屬性
env r Shell環境屬性
通常我們可以使用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}

使用示例如下圖:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM