2023-03-08

Hive常用調優(yōu)使用幫助文檔

目錄

  1. 背景
  2. 案例1:使用Tez優(yōu)化MapJoin
  3. 案例2:使用Tez優(yōu)化Group By
  4. 案例3:使用Tez優(yōu)化Join
  5. 案例4:使用Tez優(yōu)化Sort By
  6. 案例5:使用Tez優(yōu)化Distinct
  7. 案例6:使用Tez優(yōu)化Union All
  8. 案例7:使用Tez優(yōu)化Bucket Map Join
  9. 案例8:使用Tez優(yōu)化MapReduce任務
  10. 案例9:使用Tez優(yōu)化大表的Join
  11. 案例10:使用Tez優(yōu)化多表Join
  12. 總結

1. 背景

Hive是一種基于Hadoop的數據倉庫系統(tǒng),它將SQL轉換為MapReduce任務來處理數據。然而,由于MapReduce的計算模型和性能限制,這種處理方式可能會導致性能問題。為了解決這個問題,Hive引入了Tez執(zhí)行引擎來替代MapReduce。Tez通過減少MapReduce任務之間的通信來提高性能,同時提供更好的資源管理和數據本地性。在這篇文檔中,我們將介紹10個使用Tez調優(yōu)的案例,并解釋如何通過設置一些關鍵的參數來提高Hive查詢的性能。

2. 案例1:使用Tez優(yōu)化MapJoin

MapJoin是一種將小表讀入內存并與大表進行Join的技術。在MapReduce中,MapJoin會導致大量的磁盤I/O,從而降低性能。通過將MapJoin轉換為Tez任務,可以避免這個問題。以下是使用Tez優(yōu)化MapJoin的示例:

調優(yōu)前:

set hive.auto.convert.join=false; set hive.mapjoin.smalltable.filesize=25000000; SELECT /*+ MAPJOIN(b) */ a.key, a.value, b.value FROM a JOIN b ON (a.key = b.key);

調優(yōu)后:

set hive.execution.engine=tez; set hive.auto.convert.join=true; set hive.mapjoin.smalltable.filesize=25000000; SELECT /*+ MAPJOIN(b) */ a.key, a.value, b.value FROM a JOIN b ON (a.key = b.key);

在調優(yōu)前的示例中,我們關閉了自動轉換為MapJoin,并設置了MapJoin的小表文件大小。在調優(yōu)后的示例中,我們啟用了自動轉換為MapJoin,并設置了MapJoin的小表文件大小。我們還將執(zhí)行引擎設置為Tez。

3. 案例2:使用Tez優(yōu)化Group By

在MapReduce中,Group By是一個非常昂貴的操作,因為它需要對Map和Reduce之間的數據進行排序和合并。通過使用Tez,可以將Map和Reduce操作合并為一個任務,從而提高性能。以下是使用Tez優(yōu)化Group

By的示例:

調優(yōu)前:

set hive.groupby.skewindata=true; SELECT COUNT(*) FROM table GROUP BY col;

調優(yōu)后:

set hive.execution.engine=tez; set hive.groupby.skewindata=true; SELECT COUNT(*) FROM table GROUP BY col;

在調優(yōu)前的示例中,我們啟用了Group By的偏斜數據優(yōu)化。在調優(yōu)后的示例中,我們將執(zhí)行引擎設置為Tez,并啟用了Group By的偏斜數據優(yōu)化。

4. 案例3:使用Tez優(yōu)化Join

在Hive中,Join是一個非常昂貴的操作,因為它需要將兩個表中的所有數據進行比較。通過使用Tez,可以將Join操作轉換為更有效的操作,從而提高性能。以下是使用Tez優(yōu)化Join的示例:

調優(yōu)前:

SELECT * FROM a JOIN b ON (a.id = b.id);

</pre>

調優(yōu)后:

set hive.execution.engine=tez; SELECT * FROM a JOIN b ON (a.id = b.id);

在調優(yōu)前的示例中,我們只是執(zhí)行了一個簡單的Join操作。在調優(yōu)后的示例中,我們將執(zhí)行引擎設置為Tez,從而將Join操作轉換為更有效的操作。

5. 案例4:使用Tez優(yōu)化Sort By

在MapReduce中,Sort By是一個非常昂貴的操作,因為它需要對Map和Reduce之間的數據進行排序和合并。通過使用Tez,可以將Map和Reduce操作合并為一個任務,從而提高性能。以下是使用Tez優(yōu)化Sort By的示例:

調優(yōu)前:

SELECT * FROM table SORT BY col;

調優(yōu)后:

set hive.execution.engine=tez; SELECT * FROM table SORT BY col;

在調優(yōu)前的示例中,我們只是執(zhí)行了一個簡單的Sort By操作。在調優(yōu)后的示例中,我們將執(zhí)行引擎設置為Tez,從而將Sort By操作轉換為更有效的操作。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 小文件問題的影響1.從Hive的角度看,小文件會開很多map,一個map開一個JVM去執(zhí)行,所以這些任務的初始化,...
    JayWolf閱讀 1,914評論 0 0
  • 在企業(yè)中使用Hive構建離線數倉是一種十分普遍的方案。盡管Hive的使用場景是通過批處理的方式處理大數據,通常對處...
    大數據技術與數倉閱讀 608評論 0 2
  • 1.Hive原理 Hive是構建在Hadoop上的數據倉庫軟件框架,支持使用SQL來讀,寫和管理大規(guī)模數據集合。H...
    samjinzhang閱讀 7,756評論 0 22
  • Hive調優(yōu)策略 Hive作為大數據領域常用的數據倉庫組件,在設計和開發(fā)階段需要注意效率。 影響Hive效率的不僅...
    奮斗的蛐蛐閱讀 1,444評論 0 4
  • 一、Hive基本概念 Hive 是基于 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,并提...
    CJ21閱讀 1,864評論 0 13

友情鏈接更多精彩內容