Hive --------- hive 的優化
1、表的優化
在表的優化中第一點:當資料量比較大的時候常用的手段就是拆分比表,大表拆小表,分割槽表,臨時表,外部表
小表和大表join,要把資料量小的表放在join的左邊,先進行快取,這樣減少表join的時候可以減少記憶體的消耗量
2、資料傾斜
資料傾斜產生的原因為分割槽之後某一個reduce運算的數量比較小,而某一個reduce的數量比較大的時候,造成兩個reduce處理資料不平等
合理設定map數量
總結:可以影響map數量的因素有哪些?
1、在input資料夾中,每一個檔案就是一個map,input檔案的數量,input檔案的大小
在MR任務中一個切片就是一個map任務
設定切片大小:在hadoop中
FileInputFormat.setMaxInputSplitSize(job, size);
FileInputFormat.setMinInputSplitSize(job, size);
設定reduce的個數:
set mapreduce.job.reduces
根據業務自定義分割槽規則
3、並行執行
並行執行與Java多行程的非同步和同步概念上差不多,在MR執行任務中,存在很多的MR任務可以執行。有些MR任務和下一個MR任務存在著依賴關係,但是有些MR任務沒有依賴關係,例如:存在依賴關係的MR它的輸出就是下一個MR任務的輸入。對於沒有依賴關係的MR任務,就可以使用並行執行,在同一時間執行多個MR任務。這樣在執行的過程中效率就會得到提升
可以通過以下引數進行設定:
set hive.exec.parallel=true ; // 開啟任務並行執行
設定多少個任務可以同時執行
set hive.exec.parallel.thread.number=8; //預設值為8個任務可以同時執行
4、嚴格執行
Hive中提供有嚴格模式,為了防止一些查詢,出現不好的影響,例如笛卡爾積,在嚴格模式下是不能執行的
<property>
<name>hive.mapred.mode</name>
<value>strict</value>
<description>
The mode in which the Hive operations are being performed.
In strict mode, some risky queries are not allowed to run. They include:
Cartesian Product.
No partition being picked up for a query.
Comparing bigints and strings.
Comparing bigints and doubles.
Orderby without limit.
</description>
</property>
預設值為非嚴格模式 nonstrict
開啟嚴格模式 :strict
開啟了嚴格模式,會對查詢語句進行一些限制:
1、對於分割槽表,必須存在where語句對分割槽欄位進行條件過濾,否則,不允許執行該查詢
2、對於使用order by 的語句必須使用limit進行限定,由於order by之後所有的資料都會被分到一個reduce中,那樣reduce操作單的資料量太多,可能時間過長卡死。所以為了防止reduce時間過長,在order by的時候必須給定limit減少reduce處理的資料量
3、 限制了笛卡兒積的查詢 .主要在多表join中會出現。笛卡兒積的出現會造成效能極大的消耗
3.5 JVM重用
在hive執行計算任務的時候,會把的執行計劃上傳到yarn叢集中進行提交,執行MR任務。每次進行任務的執行的時候都會開啟一個JVM程式執行的MR任務。如果提交任務頻繁過多就會造成JVM頻繁的開啟和關閉。在JVM開啟和關閉的過程中會造成大量的資源浪費
在處理小檔案的時候,由於map任務較多。所以JVM會頻繁的開啟和關閉。所以對於小檔案的處理優化,主要減少JVM開啟的次數
在 mapred-default.xml配置檔案中有如下引數
<property>
<name>mapreduce.job.jvm.numtasks</name>
<value>10</value>
<description>How many tasks to run per jvm. If set to -1, there is
no limit.
</description>
</property>
也可以在hive中臨時設定JVM重用任務的執行數量
set mapreduce.job.jvm.numtasks
3.6 推測執行
由於叢集中的資源分配不均等,或者每個叢集中節點的硬體效能,會導致某個任務執行的時間快或者某個任務執行的時間慢,或者某個任務在執行的時候直接卡死了
為了防止某些任務,在執行過程中,拖慢了整個MR任務的進度。在執行慢的任務節點上開啟相同的任務,如果時間比原來的任務執行的快則直接輸出推測執行的任務
設定開啟推測執行的引數:
<property>
<name>mapreduce.map.speculative</name>
<value>true</value>
<description>If true, then multiple instances of some map tasks
may be executed in parallel.</description>
</property>
在hadoop中預設開啟推測執行。推測執行不是說一卡死就開啟任務必須執行%5以上才會開啟推測執行
在hive中通過set引數也可以進行設定
set mapreduce.map.speculative=true
預設值為true
推測執行分為map端的推測執行以及reduce端的推測執行
<property>
<name>mapreduce.reduce.speculative</name>
<value>true</value>
<description>If true, then multiple instances of some reduce tasks
may be executed in parallel.</description>
</property>
3.7 執行計劃
Hive中提供的可以檢視Hql語句的執行計劃,在執行計劃中會生成抽象語法樹,在語法樹中會顯示HQL語句之間的依賴關係以及執行過程。通過這些執行的過程和依賴可以對HQL語句進行優化
一般來說都會把複雜語句簡單化處理。例如多表的Join
相關文章
- [Hive]Hive排序優化Hive排序優化
- hive的優化Hive優化
- hive、spark優化HiveSpark優化
- [Hive]Hive中表連線的優化,加快查詢速度Hive優化
- Hive高階優化Hive優化
- hive優化-資料傾斜優化Hive優化
- Hive優化相關設定Hive優化
- Hive企業級效能優化Hive優化
- Hive 優缺點Hive
- Hive的壓縮儲存和簡單優化Hive優化
- Hive使用Calcite CBO優化流程及SQL優化實戰Hive優化SQL
- Hive調優實用Hive
- 【Hive】資料傾斜優化 shuffle, join, group byHive優化
- hive企業級調優Hive
- Hive學習之Hive的安裝Hive
- Hive常用效能優化方法實踐全面總結Hive優化
- 【Hive】hive資料遷移Hive
- Hive效能調優實踐 - VidhyaHive
- HIVEHive
- hive 的使用Hive
- hive:初始化報錯Hive
- 【Hive一】Hive安裝及配置Hive
- Flume和Hive整合之hive sinkHive
- Hive的序列化/反序列化(SerDe)Hive
- 開發中hive常見的調優策略Hive
- Hive -------- hive常見查詢練習Hive
- HIVE基本語法以及HIVE分割槽Hive
- [Hive]Hive實現抽樣查詢Hive
- flink實戰--讀寫Hive(Flink on Hive)Hive
- hive匯出到csv hive匯出到excelHiveExcel
- spark with hiveSparkHive
- hive06_SQL最佳化HiveSQL
- Hive的安裝Hive
- [hive]hive資料模型中四種表Hive模型
- [Hive]hive分割槽設定注意事項Hive
- Hive on Spark和Spark sql on Hive,你能分的清楚麼HiveSparkSQL
- Hive on Spark 和 Spark sql on Hive,你能分的清楚麼HiveSparkSQL
- hive查詢注意事項和調優Hive