hive學習之三:專案中的hive優化實踐
1.小表放入記憶體,在map端join,並不是所有聚合操作都在reducer端操作,慎重使用mapjoin,一般行數小於2000行,大小小於1M
2.hive.groupby.skewindata變數從上面groupby語句可以看出,這個變數是用於控制負載均衡的。當資料出現傾斜時,如果該變數設定為true,那麼Hive會自動進行負載均衡。當該變數設為
true時候,不可以使用distinct關鍵字對多列聯合去重
3.合併小檔案
hive.merge.mapfiles = true是否和並 Map 輸出檔案,預設為 True
hive.merge.mapredfiles = false是否合併 Reduce 輸出檔案,預設為 False
hive.merge.size.per.task = 256*1000*1000合併檔案的大小。
4.Order by 實現全域性排序,一個reduce實現,效率低
Sort by 實現部分有序,單個reduce輸出的結果是有序的,效率高,通常和DISTRIBUTE BY關鍵字一起使用(DISTRIBUTE BY關鍵字 可以指定map 到 reduce端的分發key)
CLUSTER BY col1 等價於DISTRIBUTE BY col1 SORT BY col1.
distinct把所有資料傳送到一個reducer上,資料傾斜嚴重。特別是count(distinct field1)使用group by代替,設定多個reducer
5.SQL並行執行優化:
set hive.exec.parallel=true;--任務並行執行
set hive.exec.parallel.thread.number=16;--並行執行的執行緒數量
set hive.groupby.skewindata=true;--防止資料傾斜
set mapred.reduce.tasks=60;--設定任務執行的reduce數量
set hive.auto.convert.join=false;--是否自動將common join轉換為map join
set hive.ignore.mapjoin.hint=false;--列印mapjoin
set hive.exec.compress.intermediate=true; --中間結果壓縮
set hive.execution.engine=tez;--更改hive底層執行的計算框架
set hive.exec.reducers.max=200;--任務最大的reduce數量(預設999)
set hive.map.aggr = true;--map端做聚合(預設true)
-----map數量控制---------------------
set mapred.max.split.size=100000000;--超過100m不足128M切分
set mapred.min.split.size.per.node=100000000;--超過100m,切分
set mapred.min.split.size.per.rack=100000000;--超過100m,切分
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
-----reduce數量控制-----------------
set hive.exec.reducers.bytes.per.reducer=500000000;--每個reduce任務執行的資料量,預設1G。
6.只有一個reduce的場景:
a、沒有group by 的彙總
b、order by
c、笛卡爾積
2.hive.groupby.skewindata變數從上面groupby語句可以看出,這個變數是用於控制負載均衡的。當資料出現傾斜時,如果該變數設定為true,那麼Hive會自動進行負載均衡。當該變數設為
true時候,不可以使用distinct關鍵字對多列聯合去重
3.合併小檔案
hive.merge.mapfiles = true是否和並 Map 輸出檔案,預設為 True
hive.merge.mapredfiles = false是否合併 Reduce 輸出檔案,預設為 False
hive.merge.size.per.task = 256*1000*1000合併檔案的大小。
4.Order by 實現全域性排序,一個reduce實現,效率低
Sort by 實現部分有序,單個reduce輸出的結果是有序的,效率高,通常和DISTRIBUTE BY關鍵字一起使用(DISTRIBUTE BY關鍵字 可以指定map 到 reduce端的分發key)
CLUSTER BY col1 等價於DISTRIBUTE BY col1 SORT BY col1.
distinct把所有資料傳送到一個reducer上,資料傾斜嚴重。特別是count(distinct field1)使用group by代替,設定多個reducer
5.SQL並行執行優化:
set hive.exec.parallel=true;--任務並行執行
set hive.exec.parallel.thread.number=16;--並行執行的執行緒數量
set hive.groupby.skewindata=true;--防止資料傾斜
set mapred.reduce.tasks=60;--設定任務執行的reduce數量
set hive.auto.convert.join=false;--是否自動將common join轉換為map join
set hive.ignore.mapjoin.hint=false;--列印mapjoin
set hive.exec.compress.intermediate=true; --中間結果壓縮
set hive.execution.engine=tez;--更改hive底層執行的計算框架
set hive.exec.reducers.max=200;--任務最大的reduce數量(預設999)
set hive.map.aggr = true;--map端做聚合(預設true)
-----map數量控制---------------------
set mapred.max.split.size=100000000;--超過100m不足128M切分
set mapred.min.split.size.per.node=100000000;--超過100m,切分
set mapred.min.split.size.per.rack=100000000;--超過100m,切分
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
-----reduce數量控制-----------------
set hive.exec.reducers.bytes.per.reducer=500000000;--每個reduce任務執行的資料量,預設1G。
6.只有一個reduce的場景:
a、沒有group by 的彙總
b、order by
c、笛卡爾積
7.寫SQL要先了解資料本身的特點,如果有join ,group操作的話,要注意是否會有資料傾斜,如果出現資料傾斜,應當做如下處理:
set hive.exec.reducers.max=200;
set mapred.reduce.tasks= 200;---增大Reduce個數
set hive.groupby.mapaggr.checkinterval=100000 ;--這個是group的鍵對應的記錄條數超過這個值則會進行分拆,值根據具體資料量設定
set hive.groupby.skewindata=true; --如果是group by過程出現傾斜 應該設定為true
set hive.skewjoin.key=100000; --這個是join的鍵對應的記錄條數超過這個值則會進行分拆,值根據具體資料量設定
set hive.optimize.skewjoin=true;--如果是join 過程出現傾斜 應該設定為true
set hive.exec.reducers.max=200;
set mapred.reduce.tasks= 200;---增大Reduce個數
set hive.groupby.mapaggr.checkinterval=100000 ;--這個是group的鍵對應的記錄條數超過這個值則會進行分拆,值根據具體資料量設定
set hive.groupby.skewindata=true; --如果是group by過程出現傾斜 應該設定為true
set hive.skewjoin.key=100000; --這個是join的鍵對應的記錄條數超過這個值則會進行分拆,值根據具體資料量設定
set hive.optimize.skewjoin=true;--如果是join 過程出現傾斜 應該設定為true
7.檔案壓縮,看HQL是IO密集型的任務還是CPU密集型的任務,通常更高的壓縮比帶來更多的解壓縮CPU消耗,但能夠減小MR傳輸的資料量降低磁碟空間和IO操作。
相反,壓縮比低,解壓縮快MR執行跟快。
8.SQL執行順序:
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>
一些linux命令:
1.linux檢視大小
du -sh *
2.檢視hdfs儲存在本地檔案的路徑
hdfs-site.xml中
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop/hdfs/data</value>
</property>
3.若刪除了hive的庫,如warehouse,例如使用的使用者是hdfs,則在下面中可以找到
hadoop fs -ls /user/hdfs/.Trash,找到後通過hadoop fs -mv 命令移動到原來的位置
4.lsof -i:port
5.修改hive列名:alter table table_name change column filed1 field2 field1_type
alter table mid change column val value string;
6.hive增加分割槽
load data local inpath '/home/hdfs/spdb/datas/SAS_ATPT/dt=20160101/000000_0' overwrite into table SAS_ATPT partition(dt='20160101')
相反,壓縮比低,解壓縮快MR執行跟快。
8.SQL執行順序:
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>
一些linux命令:
1.linux檢視大小
du -sh *
2.檢視hdfs儲存在本地檔案的路徑
hdfs-site.xml中
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop/hdfs/data</value>
</property>
3.若刪除了hive的庫,如warehouse,例如使用的使用者是hdfs,則在下面中可以找到
hadoop fs -ls /user/hdfs/.Trash,找到後通過hadoop fs -mv 命令移動到原來的位置
4.lsof -i:port
5.修改hive列名:alter table table_name change column filed1 field2 field1_type
alter table mid change column val value string;
6.hive增加分割槽
load data local inpath '/home/hdfs/spdb/datas/SAS_ATPT/dt=20160101/000000_0' overwrite into table SAS_ATPT partition(dt='20160101')
相關文章
- Hive --------- hive 的優化Hive優化
- [Hive]Hive排序優化Hive排序優化
- hive的優化Hive優化
- Hive效能調優實踐 - VidhyaHive
- Hive常用效能優化方法實踐全面總結Hive優化
- Hive學習之Hive的安裝Hive
- hive、spark優化HiveSpark優化
- Hive學習Hive
- [Hive]Hive中表連線的優化,加快查詢速度Hive優化
- Hive高階優化Hive優化
- hive學習筆記之三:內部表和外部表Hive筆記
- hive學習之四:hive檔案格式以及壓縮編碼Hive
- Hive學習之型別轉化Hive型別
- Hive調優實用Hive
- hive優化-資料傾斜優化Hive優化
- Hive使用Calcite CBO優化流程及SQL優化實戰Hive優化SQL
- HIVE學習之(三)Hive
- Hive優化相關設定Hive優化
- Hive企業級效能優化Hive優化
- React中型專案的優化實踐React優化
- Hive學習之基本操作Hive
- Hive -------- hive常見查詢練習Hive
- Hive 優缺點Hive
- hive編寫udf實踐記錄Hive
- Atlas 2.1.0 實踐(3)—— Atlas整合HIveHive
- Hive學習之JDBC訪問HiveJDBC
- Presto 與 Hive 語法學習RESTHive
- [Hive]Hive實現抽樣查詢Hive
- flink實戰--讀寫Hive(Flink on Hive)Hive
- Vue 專案效能優化 — 實踐指南Vue優化
- 開發中hive常見的調優策略Hive
- Hive的壓縮儲存和簡單優化Hive優化
- Arctic 基於 Hive 的流批一體實踐Hive
- [hive]hive資料模型中四種表Hive模型
- Hive學習之常用互動命令Hive
- Hive入門學習隨筆(二)Hive
- hive學習筆記之八:SqoopHive筆記OOP
- hive學習筆記之十一:UDTFHive筆記
- zookeeper:spark-project專案的hive和mysql配置SparkProjectHiveMySql