博主按:近一段時間,一直在研究Hadoop及其上的應用技術,因爲之前一直做關係數據庫系統的開發與維護,在衆多基於Hadoop的技術中,Hive與Hbase的使用方法一直是自己關注的重點。爲了對Hive技術有一個準確的認識,開始着手研究Hive的官方技術文檔。在閱讀的時候順手按照自己的理解翻譯出來,寫在博客上,權當然閱讀本記,純屬自娛自樂,如果能給瀏覽的諸君帶來些許的參考,那真是不勝榮幸之至。而理解與翻譯不確切的地方,還請大家海涵。
一、Hive命令行選項
1、爲了獲得有關Hive命令行的幫助,在控制檯運行命令hive -H或者hive –help,可以獲得有關Hive命令行的幫助。以下Hive 0.9.0版本的命令行選項:
-d,--define <key=value> 在Hive命令中使用變量替換(Variablesubstitution)。例:-d A=B or --defineA=B
-e<quoted-query-string> 在命令行模式下直接運行SQL語句
-f<filename> 在命令行模式下運行指定文件中的SQL語句
-H,--help 輸出命令行選項信息
-h<hostname> 連接安裝在遠程主機上的Hive服務器
--hiveconf <property=value>連接Hive服務器時同時指定一些屬性值
--hivevar<key=value> 應用到Hive命令中的變量替換(Variablesubstitution)。例如 --hivevarA=B
-i<filename> 指定初始化文件。如果在啓動Hive時沒有使用-i選項指定初始文件,CLI(Command LineInterface)將使
用$HIVE_HOME/bin/.hiverc and $HOME/.hiverc進行初始化。
-p<port> 連接到指定端口的Hive服務器
-S,--silent Hive以silent模式運行,命令執行過程中不輸出中間信息
-v,--verbose Hive以verbose模式,在控制檯顯示SQL語句的執行狀態
注:(1)自Hive 0.10.0始,增加了一個命令選項
--database <dbname> 指定操作的數據庫
(2)關於變量替換(Variablesubstitution)的詳細說明見下一篇
2、Hive命令行示例:
• 在命令行中嵌入SQL語句
$HIVE_HOME/bin/hive-e 'select a.col from tab1 a'
• 在命令行中嵌入SQL語句同時設置Hive運行參數值
$HIVE_HOME/bin/hive-e 'select a.col from tab1 a' -hiveconfhive.exec.scratchdir=/home/my/hive_scratch -hiveconf mapred.reduce.tasks=32
• 以silent模式執行SELECT語句,並且把查詢結果導出到文本文件a.txt中
$HIVE_HOME/bin/hive-S -e 'select a.col from tab1 a' > a.txt
• 直接執行指定腳本文件中的SQL語句
$HIVE_HOME/bin/hive-f /home/my/hive-script.sql
• 在啓動Hive的時候指定初始化腳本文件
$HIVE_HOME/bin/hive-i /home/my/hive-init.sql
3、Hive批處理模式命令
當加上-f或者-e選項時,Hive將在批處理模式下執行SQL語句
• hive -e'<query-string>' 執行一條SQL查詢語句.
• hive -f <filepath> 執行包含在指定文件中的一條或者多條SQL查詢語句.
示例見前述2
4、Hive交互式Shell模式命令
不加-f或者-e選項啓動Hive,Hive則進入交互Shell模式。在Hive交互Shell模式下,輸入的任何命令都須以“;”結束。在腳本文件中,通過“--”可以實現對命令加註釋。下面是進入Hive交互Shell模式後常用的Hive命令
命令 說明
Quit或exit 退出Hive交互Shell模式命令.
reset 重新設置默認的配置項(Hive0.10新增:參見HIVE-3202).
set <key>=<value> 設置專門的配置變量(particularconfiguration variable)的值(key).需要注意的是如果參數變
量名拼寫錯誤,CLI將不報錯。
set 輸出被用戶或者Hive修改過的配置變量列表.
set -v 輸出所有的Hadoop與Hive配置變量.
add FILE[S] <filepath><filepath>*
add JAR[S] <filepath> <filepath>*
add ARCHIVE[S] <filepath> <filepath>* 往分佈式緩存(distributedcache)中的資源列表增加一個或者多個腳本、JAR或者archives文件.
list FILE[S]
list JAR[S]
list ARCHIVE[S] 輸出已經存在於分佈式緩存中的資源文件名.
list FILE[S] <filepath>*
list JAR[S] <filepath>*
list ARCHIVE[S] <filepath>* 檢查指定的資源文件是否存在於分佈式緩存中.
delete FILE[S] <filepath>*
delete JAR[S] <filepath>*
delete ARCHIVE[S] <filepath>* 刪除分佈式緩存中指定的資源文件.
! <command> 在Hive中執行一條控制櫃命令.
dfs <dfs command> 在Hive中執行一條Hadoop的dfs command.
<query string> HiveSQL查詢命令,以標準輸出格式輸出結果.
source FILE <filepath> 在Hive中執行一個腳本文件.
示例如下:
hive> set mapred.reduce.tasks=32;
hive> set;
hive> select a.* from tab1;
hive> !ls;
hive> dfs -ls;
5、運行日誌
Hive使用log4j管理運行日誌,運行日誌信息不是直接輸出,而是保存到由Hive的log4j參數指定的日誌文件中。默認情況下,Hive使用警告級別(WARN level)把運行日誌寫入文件/tmp/<userid>/hive.log中,該文件在Hive安裝目錄下conf子目錄中的Hive-log4j.default進行了指定。如果希望運行日誌直接輸出到控制檯或者出於調試目的改變日誌級別,可以通過下列命令來實現:
$HIVE_HOME/bin/hive-hiveconf hive.root.logger=INFO,console
通過hive.root.logger參數修改日誌級別及輸出目的地,console要求把運行信息輸出到控制檯而不是日誌文件。
6、Hive資源
Hive可以管理查詢會話(Session)運行期間需要添加的資源文件.資源文件可是腳本、JAR或者archives文件,任何本地可存取的文件都可以被加到會話中。對於加入到會話中的資源文件,Hive查詢命令通過文件名引用它,並且可以在查詢命令執行期間應用到整個Hadoop集羣。在查詢命令執行期間,Hive使用Hadoop的分佈式緩存分配增加的資源文件給整個集羣上的所有機器。
用法如下:
ADD { FILE[S] | JAR[S] | ARCHIVE[S] } <filepath1> [<filepath2>]*
LIST { FILE[S] | JAR[S] | ARCHIVE[S] } [<filepath1><filepath2> ..]
DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } [<filepath1><filepath2> ..]
(1)FILE類型資源是被增加到分佈式緩存的可執行的實現轉換任務的腳本文件.
(2)JAR類型資源也被加入Java classpath. 主要是了調用它們包含的一些自定義方法(UDFs).
(3)ARCHIVE resources are automatically unarchived as part ofdistributing them.
示例:
hive> add FILE /tmp/tt.py;
hive> list FILES;
/tmp/tt.py
hive> select from networks a
MAP a.networkid
USING 'python tt.py' as nn wherea.ds = '2009-01-04' limit 10;
如果同名文件已經在整個Hadoop集羣中使用,那麼FILE類型的資源文件就不必再附加:
• ... MAP a.networkidUSING 'wc -l' ...
在這裏,wc即是一個是所有機器上有效的可應用資源.
• ... MAP a.networkidUSING '/home/nfsserv1/hadoopscripts/tt.py' ...
在這裏,tt.py可以被NFS掛接點上的所有機器使用的資源文件( may be accessible via an NFS mount point that's configuredidentically on all the cluster nodes).
二、Beeline CLIfor HiveServer2
HiveServer2(在Hive 0.11引進)有一個新的CLI(Command LineInterface)被稱爲Beeline,它是一個基於SQLLine的JDBC客戶端.關於Beeline這一新的命令行Shell請參見HiveServer2文檔.
三、HCatalogCLI
HCatalog從Hive0.11.0開始引入Hive.許多(但不是全部)hcatcommands將成爲hive commands,反之亦然.詳細參照HCatalog手冊中關於HCatalog Command Line Interface文檔.