進入hive之前的
語法
hive [-hiveconf key=value]* [<-i filename>]* [<-f filename>|<-e query-string>] [-S]
參數說明:
-
i 從文件初始化 HQL
#將多個參數的設置寫在一個文件中 hive -i 初始化文件 [hdp01@hdp01 hiveData]$ cat inithive.conf set hive.exec.mode.local.auto=true; [hdp01@hdp01 hiveData]$ hive -i inithive.conf which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/jdk1.8.0_211/bin:/usr/local/jdk1.8.0_211/jre/bin:/home/hdp01/.local/bin:/home/hdp01/bin:/home/hdp01/apps/hadoop-2.7.7/bin:/home/hdp01/apps/hadoop-2.7.7/sbin:/home/hdp01/apps/hive/bin) SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/hdp01/apps/apache-hive-2.3.6-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/hdp01/apps/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Logging initialized using configuration in jar:file:/home/hdp01/apps/apache-hive-2.3.6-bin/lib/hive-common-2.3.6.jar!/hive-log4j2.properties Async: true Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. hive>
-
-e 從命令行執行指定的 HQL
hive -e "select * from weibo.weibo limit 20" hive -e "show databases" #執行過程:先進入hive的客戶端 執行sql語句 退出客戶端
-
-f 執行 HQL 腳本
#執行指定hql的腳本 #進入hive客戶端 執行腳本(source ..sql) 退出客戶端 [hdp01@hdp01 hiveData]$ cat hive.sql show databases; [hdp01@hdp01 hiveData]$ hive -f hive.sql OK default firstdb fourthdb seconddb studentdb testdb thirddb weibo Time taken: 4.766 seconds, Fetched: 8 row(s) [hdp01@hdp01 hiveData]$
-
-v 輸出執行的 HQL 語句到控制檯
-
-p connect to Hive Server on port number
-
-hiveconf x=y(Use this to set hive/hadoop configuration variables)
#再啓動的時候只能設置一個參數 #啓動hive客戶端 並進行參數設置 hive -hiveconf hive.exec.mode.local.auto=true #這種參數設置方式 也是隻能針對當前客戶端的
-
-S:表示以不打印日誌的形式執行命名操作
#靜音模式 -S 在執行HiveSQL過程中,不在顯示器輸出MR的執行過程 hive -S -e ‘sql語句’ > test.txt #將執行結果直接輸入到本地文件
進入hive之後的
命令
quit 退出hive的客戶端
set key=value 在hive的客戶端設置hive的參數值
set hive.exec.mode.local.auto=true;
--這種設置方式不是永久的 僅僅針對hive的當前客戶端
--當前客戶端退出 則設置失效
--配置文件中設置的是永久的
set key 查詢指定的key對應的value值
set -v 打印所有的配置參數 hive|hadoop
add FILE [file] 添加文件到hive的classpath下
add jar jarname 添加jar到hive的classpath下
list FILE 查看hive的classpath下的文件
[query] 查詢語句 ddl dml
! [cmd] 執行linux命令
hive> !pwd;
/home/hdp01/tmpfiles/hiveData
dfs [dfs cmd] 在hive客戶端執行hdfs命令
hive> dfs -ls /;
Found 4 items
drwxr-xr-x - hdp01 supergroup 0 2020-01-11 16:16 /data
drwxr-xr-x - hdp01 supergroup 0 2020-01-01 16:35 /testData
drwx-wx-wx - hdp01 supergroup 0 2020-01-01 17:28 /tmp
drwxr-xr-x - hdp01 supergroup 0 2020-01-01 14:54 /user
source FILE 在hive的客戶端執行一個sql腳本
-- source 腳本文件路徑+名字
hive> source hive.sql;
OK
default
firstdb
fourthdb
seconddb
studentdb
testdb
thirddb
weibo
Time taken: 0.451 seconds, Fetched: 8 row(s)
hive> !cat hive.sql;
show databases;
Hive參數配置方式
開發 Hive 應用時,不可避免地需要設定 Hive 的參數。設定 Hive 的參數可以調優 HQL 代碼的執行效率,或幫助定位問題。然而實踐中經常遇到的一個問題是,爲什麼設定的參數沒有起作用?這通常是錯誤的設定方式導致的
對於一般參數,有以下三種設定方式:
配置文件 (全局有效)
命令行參數(對 hive 啓動實例有效)
參數聲明 (對 hive 的連接 session 有效)
配置文件: Hive 的配置文件包括
- 用戶自定義配置文件:
$HIVE_CONF_DIR/hive-site.xml
- 默認配置文件:
$HIVE_CONF_DIR/hive-default.xml
- 用戶自定義配置會覆蓋默認配置。
- 另外,Hive 也會讀入 Hadoop 的配置,因爲 Hive 是作爲 Hadoop 的客戶端啓動的,Hive 的配置會覆蓋 Hadoop 的配置。
- 配置文件的設定對本機啓動的所有 Hive 進程都有效。
命令行參數: 啓動 Hive(客戶端或 Server 方式)時,可以在命令行添加-hiveconf param=value
來設定參數,例如:
bin/hive -hiveconf hive.root.logger=INFO,console
這一設定對本次啓動的 session(對於 server 方式啓動,則是所有請求的 session)有效。
參數聲明: 可以在 HQL 中使用 SET 關鍵字設定參數,例如:
set mapred.reduce.tasks = 10;
set mapreduce.job.reduces = 10;
這一設定的作用域也是 session 級的。
set hive.exec.reducers.bytes.per.reducer=<number>
每個 reduce task 的平均負載數據量
Hive 會估算總數據量,然後用該值除以上述參數值,就能得出需要運行的 reduceTask 數
set hive.exec.reducers.max=<number>
設置 reduce task 數量的上限
set mapreduce.job.reduces=<number>
指定固定的 reduce task 數量
但是,這個參數在必要時<業務邏輯決定只能用一個 reduce task> hive 會忽略,比如在設置
了 set mapreduce.job.reduces = 3
,但是 HQL 語句當中使用了 order by
的話,那麼就會忽略該
參數的設置
上述三種設定方式的優先級依次遞增。即參數聲明覆蓋命令行參數,命令行參數覆蓋配置文件設定。
注意某些系統級的參數,例如 log4j 相關的設定,必須用前兩種方式設定,因爲那些參數的讀取在 session 建立以前已經完成了。