Hive優化(一) 概念介紹

2021-09-02 18:59:40 字數 1810 閱讀 9799

介紹

hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行 。hive本身是不能儲存資料的,它只是記錄資料的一些路徑資訊,最終所有的操作都轉換成mapreduce操作,所以hive的優化其本質上是對hadoop的優化。

hadoop的特點

做過大資料開發的都知道,hadoop在處理資料的過程中有幾個特點。

1、資料多不是問題,就怕出現資料傾斜。

2、對job較多的作業執行效率相對比較低,即使只有幾百行資料的表,如果多次關聯彙總,產生幾十個job的話,至少也要跑個半小時。這是因為,map reduce的作業初始化的時間本身就比較長。

3、對於sum,max,min和count的udaf來講不怕資料傾斜問題,因為hadoop會在map端對計算出來的結果進行彙總並優化,使得資料傾斜不成問題。

4、count(distinct),在資料量大的時候,效率會變得較低,這主要是因為count(distinct)是按照group by來對字段進行分組的,並且按照distinct的字段進行排序,一般是很容易造成資料傾斜的。例如乙個大型的購物**,如果按照男女對訪問量進行分組的話,而這個**一天有20億的瀏覽量,按照那女分成兩組,由兩個reduce來分別進行處理,這樣每個reduce處理10億資料,顯然這樣的資源分配是不合理的,效率是比較低下的(就像一堆磚,有10個人可以安排搬這些磚,然後你只安排2個搬搬磚,這樣就會造成資源的浪費,降低工作的效率)。

影響hive效能的因素

在考慮hive效能優化時,把hiveql當做m/r程式來讀會有一種意想不到的收穫。也就是從m/r的執行角度來考慮優化效能,從更底層思考如何優化運算效能,而不僅僅侷限於邏輯**的替換層面。

hadoop的核心能力是parition和sort,在mapreduce的shuffle階段,會對資料進行打亂->排序->再打亂->再排序,因次這也是優化的根本。

hadoop的作業初始化需要很長的時間,因此當job數量過多時,會導致整體的作業執行時間偏長,從而影響整體的效率,因此這也是在實際生產環境中需要注意的地方,要盡量使job數量變少。

count(distinct)是按照group by來對字段進行分組的,但資料量較大而對應的分割槽欄位較少時,或導致每個分組的資料量過大,從而造成資料傾斜,因此在資料量較大的時候要謹慎考慮使用count(distinct).

我們知道在hadoop中,資料傾斜是造成效率低下的主要原因,因此在實際環境中,需要盡量避免資料的傾斜問題。

結論:在對hive進行優化時,應該要注意上述問題,針對上述問題來對hive進行優化。在做優化的過程中我們要做到避實就虛,盡量使用最少的job 數來執行任務,充分利用空閒 cpu 等各種方法,分解資料傾斜造成的負擔。

hive優化的原則

那麼,面對這些問題我們應該如何處理呢?我們能夠採取哪些有效手段,來對這些問題進行優化呢?我們可以從一下幾個大方面來進行考慮:

1、設計乙個好的模型,因為乙個好的模型能夠做到事半功倍。

2、從資料傾斜問題來考慮,可以採取有效措施解決資料傾斜問題。

3、儘量減少job的個數,能用乙個job完成的,就堅決不用兩個job。

4、設定合理的map reduce的task個數,可以有效地提公升效能。

5、了解資料的分布,自己動手解決資料的傾斜是個不錯的選擇

6、對於資料量較大的時候,要慎用count(distinct),因為容易產生資料傾斜。

7、對小檔案進行合併,是一種比較行之有效提高效率的方法。

8、在優化時,要注意把握整體最優原則。

Hive 介紹 概念

hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類sql查詢功能 hql 其本質是將sql轉換為mapreduce的任務進行運算,底層由hdfs來提供資料的儲存,hive可以理解為乙個將sql轉換為mapreduce的任務的工具。每次的執行開銷較大,任務...

面試總結一(概念)

1.定義和宣告的區別 宣告是告訴編譯器這個函式或者變數可以在 找到,它的模樣是什麼。而定義是告訴編譯器 在這裡建立函式或變數,並為他們分配記憶體空間。變數的宣告 extern int a 變數的定義 int a 如果在此之前沒有對變數的宣告,則這裡既是宣告也是定義。編譯器會為其分配對應的記憶體。2....

Spring 運用(一) 概念

spring強大的核心功能之一,顛覆原有的依賴關係,後面稱為依賴注入。即由ioc容器管理依賴關係 依賴相關的bean的生命週期。註解spring註解很強大,類似於通過 autowire或者 resource進行bean的注入。配置配置又分為setter和construction。面向方面的程式設計,...