20170917Hive學習總結

2021-08-08 09:31:50 字數 2784 閱讀 3269

1.檢視sql語句的執行過程,可以在語句前加explain

explain select city_code,count(1) as cnt from

user

where access='wifi'

group

by city_code order

by cnt desc limit 5;

2.mr job的基本過程

map自帶的buffer使用容量達到一定限制

(預設0.80或80%,可以通過io.sort.spill.percent配置)

(2)乙個後台執行緒會準備將buffer中的資料寫入到磁碟,這個後台執行緒在將buffer中資料寫入磁碟之前,會首先將buffer中的資料進行partition (分割槽,partition數為reducer的個數)

對於每個的資料會基於key進行乙個in-memory排序,排序後,會檢查是否配置了combiner

如果配置了則直接作用到已排序的每個partition的資料上

對map輸出進行化簡壓縮 (這樣寫入磁碟的資料量就會減少,降低i/o操作開銷)

(3)現在可以將經過處理的buffer中的資料寫入磁碟,生成乙個檔案

(每次buffer容量達到設定的門限,都會對應著乙個寫入到磁碟的檔案)

map任務結束之前,會對輸出的多個檔案進行合併操作,合併成乙個檔案

(若map輸出至少3個檔案,在多個檔案合併後寫入之前,如果配置了combiner,則會執行來化簡壓縮輸出的資料,檔案個數可以通過min.num.splits.for.combine配置;如果指定了壓縮map輸出,這裡會根據配置對資料進行壓縮寫入磁碟)

這個檔案仍然保持partition和排序的狀態

reduce階段,每個reduce任務開始從多個map上拷貝屬於自己partition

(map階段已經做好partition,而且每個reduce任務知道應該拷貝哪個partition;拷貝過程是在不同節點之間,reducer上拷貝執行緒基於http來通過網路傳輸資料)

每個reduce任務拷貝的map任務結果的指定partition,也是先將資料放入到自帶的乙個buffer中

(buffer預設大小為heap記憶體的70%,可以通過mapred.job.shuffle.input.buffer.percent配置)

如果配置了map結果進行壓縮,則這時要先將資料解壓縮後放入buffer中

(4)reduce自帶的buffer使用容量達到一定門限

(預設0.66或66%,可以通過mapred.job.shuffle.merge.percent配置)

或者buffer中存放的map的輸出的數量達到一定門限(預設1000,可以通過mapred.inmem.merge.threshold配置)

buffer中的資料將會被寫入到磁碟中

(5)在將buffer中多個map輸出合併寫入磁碟之前,如果設定了combiner,則會化簡壓縮合併的map輸出

(6)當屬於該reducer的map輸出全部拷貝完成,則會在reducer上生成多個檔案

這時開始執行合併操作,並保持每個map輸出資料中key的有序性

將多個檔案合併成乙個檔案(在reduce端可能存在buffer和磁碟上都有資料的情況,這樣在buffer中的資料可以減少一定量的i/o寫入操作開銷)

(7)最後,執行reduce階段,執行我們實現的reducer中化簡邏輯,最終將結果直接輸出到hdfs中

(因為reducer執行在datanode上,輸出結果的第乙個replica直接在儲存在本地節點上)

3.map reduce 執行過程:

input->combiner->shuffle->output

(1)combiner負責完成上面提到的將同乙個map中相同的key進行合併,避免重複傳輸,從而減少傳輸中的通訊開銷。

(2)shuffle過程,也稱copy階段.shuffle過程是貫穿於map和reduce兩個過程的。

(3)shuffle過程要求:

完整地從map task端拉取資料到reduce task端

在拉取資料的過程中,盡可能地減少網路資源的消耗

盡可能地減少磁碟io對task執行效率的影響

4.分割槽

(1)partition 對應於資料庫的 partition 列的密集索引

(2)在 hive 中,表中的乙個 partition 對應於表下的乙個目錄,所有的 partition 的資料都儲存在對應的目錄中

使用者在載入資料的時候必須顯示的指定該部分資料放到哪個分割槽

(3)靜態分割槽:靜態分割槽在載入資料和使用時都需要在sql語句中指定

(4)動態分割槽:使用動態分割槽需要設定hive.exec.dynamic.partition引數值為true,預設值為false

在預設情況下,hive會假設主分割槽時靜態分割槽,副分割槽使用動態分割槽;

如果想都使用動態分割槽,需要設定set hive.exec.dynamic.partition.mode=nostrick,預設為strick

2017 09 17學習總結

1.map reduce 執行過程 input combiner shuffle output 1 combiner負責完成上面提到的將同乙個map中相同的key進行合併,避免重複傳輸,從而減少傳輸中的通訊開銷。2 shuffle過程,也稱copy階段.shuffle過程是貫穿於map和reduce...

Xamarin for android學習總結一

1.adapter就是資料讀入記憶體後的 記憶體中介 2.intend,broadcast,server,provider,activity,執行關係圖 3.toast用於向使用者顯示一些幫助 提示 c 中toast是由其他執行緒呼叫更新ui主線程之用 4.android中ui執行緒與後台執行緒互動...

Hive學習筆記 Hive 引數

第一部分 hive 引數 hive.exec.max.created.files 說明 所有hive執行的map與reduce任務可以產生的檔案的和 預設值 100000 hive.exec.dynamic.partition 說明 是否為自動分割槽 預設值 false hive.mapred.re...