大資料學習筆記(十三)-Hive高階
1.Hive的後設資料表
TBLS:TBL_ID、DB_ID、SD_ID、TBL_NAME、TBL_TYPE
TABLE_PARAMS:儲存表/檢視的屬性資訊
TBL_PRIVS:儲存表/檢視的許可權資訊,一般不用HIVE的許可權,而是用sentry來進行許可權控制
SDS:儲存檔案儲存的基本資訊,比如INPUT_FORMAT、OUTPUT_FORMAT、是否壓縮
COLUMNS_V2:儲存表對應的欄位資訊
PARTITIONS:儲存分割槽表的基本資訊
PARTITION_KEYS:儲存分割槽表的欄位資訊
PARTITION_KEY_VALS:存放分割槽欄位值
FUNCS:使用者註冊的函式資訊
2.Hive的執行計劃
EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] query
分析Hive的執行計劃有助於瞭解Hive具體是如何執行的,幫助對Hive進行效能調優。
3.Hive當中的join
例子
create table a(id int, name string) row format delimited fields terminated by '\t';
hive> create table b(id int, age int) row format delimited fields terminated by '\t';
hive> load data local inpath '/home/hadoop/data/a.txt' overwrite into table a;
hive> load data local inpath '/home/hadoop/data/b.txt' overwrite into table b;
hive> select * from a;
OK
1 zhangsan
2 lisi
3 wangwu
hive> select * from b;
OK
1 30
2 29
4 21
①inner join
hive> select a.id, a.name, b.age from a join b on a.id=b.id;
②left join
hive> select a.id, a.name, b.age from a left join b on a.id=b.id;
③right join
hive> select a.id, a.name, b.age from a right join b on a.id=b.id;
③full join
hive> select a.id, a.name, b.age from a full join b on a.id=b.id;
4.join的優化
普通的join可稱為common join/shuffle join/reduce join,這種操作會引起資料的網路傳輸,速度比較慢。
優化方法適用map join即spark當中利用broadcast的join優化,原理是將小表傳到每臺worker上,那麼相當於將join操作本地化了。
5.Hive後設資料升級方案
場景叢集機器名修改hodoop000=>new_name
解決方案:
①直接修改後設資料中DBS表中的相關欄位
②適用bin\metatool
-listFSRoot檢視檔案系統根目錄
-updateLocation更新location
-updateLocation hdfs://new_name:xxx hdfs://old_name:xxx
6.MapReduce和Hive如何支援遞迴目錄
MapReduce支援檔案遞迴修改mapreduce-site.xml檔案配置
<property>
<name>mapreduce.input.fileinputformat.input.dir.recursive</name>
<value>true</value>
</property>
Hive支援檔案遞迴修改hive-site.xml檔案配置
<property>
<name>mapreduce.input.fileinputformat.input.dir.recursive</name>
<value>true</value>
</property>
<property>
<name>hive.mapred.supports.subdirectories</name>
<value>true</value>
</property>
7.多行資料形成一行
相同編號的學生合成一行資料
使用concat_ws、collect_set函式實現
select
id
concat_ws(',',collect_set(name)) as name,
concat_ws(',',collect_set(url)) as url
from tt groupby id;
8.Hive的調優
①Hive的並行執行配置
hive.exec.parallel=false;//預設設定
hive.exec.parallel=true;//允許並行執行
②合理設定Reduce的數量
reduce數量決定了最終作業落地的個數
reduce決定的因素
1)hive.exec.reducers.bytes.per.reducer 預設值256000000
每個Reduce能夠處理的數量
2)hive.exec.reducers.max 預設值1009
每個作業最大的reduce數量
計算公式:reduce的實際數量N=min(引數二,總輸入資料量/引數一)
生產中實際會調整mapred.reduce.tasks=-1的引數,手工調整啟動reduce的數量。
③多個job之間共享中間結果集
建立臨時表,作為中間結果表
好處:減少磁碟IO,減少網路IO
缺點:依賴關係更加嚴重
9.資料傾斜
導致資料清洗的原因
①join
②groupBy
③count(distinct column)
join的資料傾斜問題:
大小表,使用mapjoin
兩個大表使用桶表
情形:大表與大表,但是分桶的判斷欄位0值或空值過多
後果:這些空值都由一個reduce處理,非常慢
大表Join大表:
把空值的key變成一個字串加上隨機數,把傾斜的資料分到不同的reduce上,由於null值關聯不上,處理後並不影響最終結果。
groupBy
雙層groupBy
count(disctinct column)
採用groupBy改造
10.Hive調優的其他手段
列裁剪
分割槽裁剪
壓縮
列式儲存
合併小檔案
相關文章
- Hive學習筆記 2 Hive的資料型別Hive筆記資料型別
- Hive學習筆記 4 Hive的資料匯入Hive筆記
- JS高階程式設計第十三章.個人學習筆記JS程式設計筆記
- 【Pandas學習筆記02】-資料處理高階用法筆記
- Hive學習筆記 5 Hive的資料查詢、函式Hive筆記函式
- hive學習筆記Hive筆記
- MySQL高階學習筆記(二)MySql筆記
- hive學習筆記之一:基本資料型別Hive筆記資料型別
- 大資料來源碼、框架、筆記學習高階教程,2天學會Lambda表達大資料框架筆記
- angular學習筆記(十三)Angular筆記
- 大資料學習筆記(四)大資料筆記
- 大資料學習筆記(五)大資料筆記
- 大資料學習筆記(六)大資料筆記
- nginx學習筆記(5):高階資料結構ngx_rbtree_tNginx筆記資料結構
- 大資料學習筆記(十七)-MapReduce大資料筆記
- 大資料學習筆記(十八)-MRUnit大資料筆記
- oracle學習筆記(十一) 高階查詢Oracle筆記
- Javascript高階程式設計 學習筆記JavaScript程式設計筆記
- js高階 物件導向 學習筆記JS物件筆記
- redis學習筆記(詳細)——高階篇Redis筆記
- 深圳大資料學習:高階函式--【千鋒】大資料函式
- 大資料學習筆記(十五)-大資料排程框架大資料筆記框架
- Hive學習筆記 1 Hive體系結構Hive筆記
- Hive學習筆記 6 Hive的JDBC連線Hive筆記JDBC
- 大資料教程分享Actor學習筆記大資料筆記
- 大資料之 Hadoop學習筆記大資料Hadoop筆記
- 大資料學習筆記(十四)-Sqoop大資料筆記OOP
- 電商大資料學習筆記:理論大資料筆記
- 電商大資料學習筆記:實戰大資料筆記
- hive學習筆記之十一:UDTFHive筆記
- 《JavaScript高階程式設計》學習筆記(表單和資料完整性)JavaScript程式設計筆記
- Oracle高階培訓 第5課 學習筆記Oracle筆記
- Oracle高階培訓 第6課 學習筆記Oracle筆記
- Oracle高階培訓 第7課 學習筆記Oracle筆記
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- Hadoop學習筆記—17.Hive框架學習Hadoop筆記Hive框架
- hive學習筆記之五:分桶Hive筆記
- hive學習筆記之八:SqoopHive筆記OOP