【Hive】hive shell

進入hive之前的

語法

hive [-hiveconf key=value]* [<-i filename>]* [<-f filename>|<-e query-string>] [-S]

參數說明:

  1. 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> 
    
    
  2. -e 從命令行執行指定的 HQL

    hive -e "select * from weibo.weibo limit 20"
    hive -e "show databases"
    #執行過程:先進入hive的客戶端  執行sql語句   退出客戶端
    
  3. -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]$
    
  4. -v 輸出執行的 HQL 語句到控制檯

  5. -p connect to Hive Server on port number

  6. -hiveconf x=y(Use this to set hive/hadoop configuration variables)

    #再啓動的時候只能設置一個參數
    #啓動hive客戶端 並進行參數設置 
    hive -hiveconf hive.exec.mode.local.auto=true
    #這種參數設置方式  也是隻能針對當前客戶端的
    
  7. -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 建立以前已經完成了。

發佈了84 篇原創文章 · 獲贊 12 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章