好程式設計師大資料學習路線分享hive的執行方式
好程式設計師大資料學習路線分享hive的執行方式,hive的屬性設定: 1、在cli端設定 (只針對當前的session) 3、在java程式碼中設定 (當前連線) 2、在配置檔案中設定 (所有session有效)
設定屬性的優先順序依次降低。 cli端只能設定非hive啟動需要的屬性。(log屬性,後設資料連線屬性)
查詢所有屬性: hive>set; 檢視當前屬性的值:通常是hadoop hive> set -v; 模糊查詢屬性: hive -S -e "set" | grep current; hive -S -e "set" | grep index;
hive變數:system 、 env 、hivevar 、hiveconf
system :系統級別環境變數(jvm、hadoop等),可讀可寫 hive> set system:min.limit = 3; hive> set system:min.limit; system:min.limit=3
env:環境變數 (HADOOP_HOME),只讀不能寫。 hive> set env:PWD; env:PWD=/usr/local/hive-1.2.1
hivevar:自定義臨時變數(可讀可寫)
hive> set hivevar:min.limit=3;
hive> set hivevar:min.limit;
hivevar:min.limit=3
hive> set hivevar:min.limit=2;
hive> set hivevar:min.limit;
hivevar:min.limit=2
hiveconf:自定義臨時屬性變數(可讀可寫)
hive> set hiveconf:max.limit=10;
hive> set hiveconf:max.limit;
hiveconf:max.limit=10
hive> set hiveconf:max.limit=6;
hive> set hiveconf:max.limit;
hiveconf:max.limit=6
hive的執行方式: 1、cli端執行 (臨時統計、開發) 2、hive -S -e "hql 語句"; (適合單個hql的query語句) 3、hive -S -f /hql檔案; (hql檔案的指令碼)
不帶引數
hive -S -e "use qf1603;select * from user1;" hive -S -f /home/su.hql;
hive在0.9版本以前是不支援的-f 帶引數的執行:
hive --hivevar min_limit=3 -hivevar -hivevar t_n=user1 -e 'use qf1603;select * from {hive:t_n} limit {hivevar:min_limit};'
hive --hiveconf min_lit=3 -e "use qf1603;select * from user1 limit ${hiveconf:min_lit};"
hive -S --hiveconf t_n=user1 --hivevar min_limit=3 -f ./su.hql
hive中註釋: --註釋內容
insert overwrite local directory '/home/out/05'
select * from user1 limit 3;
###三、hive 最佳化 1、環境最佳化(linux 控制程式碼數、應用記憶體分配、是否負載等) 2、應用配置屬性方面的最佳化。 3、程式碼最佳化(hql,嘗試換一種hql的寫法)。
1、學會看explain
explain :顯示hql查詢的計劃。 explain extended :顯示hql查詢的計劃。還會顯示hql的抽象表示式樹。(就是直譯器幹得事)
explain select * from user1;
explain extended select * from user1;
一個hql語句將會有一個或者多個stage構成。每一個stage相當於一個mr的job, stage可以是一個Fetch 、 map join 、 limit 等操作。 每一個stage都會按照依賴關係依次執行,沒有依賴關係的可以並行執行。
2、對limit的最佳化:
hive.limit.row.max.size=100000
hive.limit.optimize.limit.file=10
hive.limit.optimize.enable=false
3、對join的最佳化:
永遠是小表驅動大表(小結果集驅動大結果集) 必要時候使用小表標識 / +STREAMTABLE(小表別名) / 將業務調整為能儘量使用map-side join: hive.auto.convert.join: smalltable: 儘量避免笛卡爾積的join查詢,即便有咯也需要使用on 或者where 來過濾。 hive目前的join 只支援等值連線(= and)。其它的不行
4、使用hive本地模式(在一個jvm裡面執行)
hive.exec.mode.local.auto=false
hive.exec.mode.local.auto.inputbytes.max=134217728
hive.exec.mode.local.auto.input.files.max=4
5、hive並行執行(stage之間沒有相互依賴關係的可以並行執行)
hive.exec.parallel=false
hive.exec.parallel.thread.number=8
6、嚴格模式:
hive提供的嚴格模式阻擋三種查詢: 1、帶有分割槽的表的查詢 2、帶有orderby的查詢 3、join查詢語句,不帶on條件 或者 where條件。
7、設定mapper 和 reduce個數
mapper個數太多,啟動耗時,個數太少,資源利用不充分 reducer個數太多,啟動耗時,個數太少,資源利用不充分
mapper個數: 手動設定:
set mapred.map.tasks=2;
適當調整塊大小,從而改變分片數,來改變mapper個數:
透過合併檔案小檔案來減少mapper個數:
set mapred.max.split.size=25600000; 256M
set mapred.min.split.per.node=1
set mapred.min.split.per.rack=1
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
reducer個數(通常手動設定):
set mapreduce.job.reduces=-1;
8、hive使用jvm重用
mapreduce.job.jvm.numtasks=1 set mapred.job.reuse.jvm.num=8; ##jvm裡執行task的任務數
9、資料傾斜(檢視:Hive最佳化.docx文件)
資料傾斜:資料某列的值分佈不均勻。 造成資料傾斜的原因: 1、原本資料就傾斜 2、hql語句可能造成 3、join 極容易造成 4、count(distinct col) 5、group by語句也容易
解決方法: 1、如果資料本身傾斜,看資料能否直接分離(找到傾斜的資料) 2、將傾斜的資料單獨出來計算,然後和正常的資料進行union all 3、將傾斜的資料賦予隨機數來進行join查詢,均衡每個task的任務量。 4、試圖不變需求改寫hql語句。
傾斜解決的幾個屬性設定:
hive.map.aggr=true
hive.groupby.skewindata=false
hive.optimize.skewjoin=false
10、job數量的控制
連線查詢的on中的連線欄位型別儘可能相同。 通常是一個簡單hql語句生成一個job,有join 、limit 、group by 都將有可能會生成一個獨立job。
select
u.uid,
u.uname
from user1 u
where u.uid in (select l.uid from login l where l.uid=1 limit 1)
;
select
u.uid,
u.uname
from user1 u
join login l
on u.uid = l.uid
where l.uid = 1
;
分割槽 、分桶 、索引 這些本身就是hive的一種最佳化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2652966/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 好程式設計師大資料學習路線分享執行緒學習筆記二程式設計師大資料執行緒筆記
- 好程式設計師大資料學習路線分享多執行緒學習筆記程式設計師大資料執行緒筆記
- 好程式設計師大資料學習路線分享hive分割槽和分桶程式設計師大資料Hive
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料學習路線hive內部函式程式設計師大資料Hive函式
- 好程式設計師大資料學習路線之hive儲存格式程式設計師大資料Hive
- 好程式設計師大資料學習路線之hive表的查詢程式設計師大資料Hive
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料學習路線分享AWK詳解程式設計師大資料
- 好程式設計師大資料學習路線Hadoop學習乾貨分享程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師Java學習路線分享多執行緒概念程式設計師Java執行緒
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 好程式設計師大資料學習路線分享大資料之基礎語法程式設計師大資料
- 好程式設計師大資料學習路線分享Hadoop機架感知程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享什麼是Hash表程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全流程總結程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線二程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線一程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之對映Map程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之基礎篇程式設計師大資料