排序:
order by:
全域性排序,執行乙個reduce任務
sort by:
在乙個reduce任務中的資料是有序的,但是總體資料看是無序的。如果只是執行乙個reduce任務和order by是一樣的。
通過set mapreduce.job.reduces=num 設定reduce任務的數量。資料的分到不同的reduce預設使用hash演算法。
distribute by:
分割槽排序,指定以什麼字段進行分割槽排序,結合sort by使用。select * from testa distribute by field1 sort by field2.
需要注意的是distribute by需要在sort by之前,這是因為需要先指定分割槽。
cluster by:
當distribute by和sort by選擇的字段是一樣的時候,直接使用cluster by效果是一樣的。
hive優化:
1.fetchtask 取消某些mr
修改配置檔案 hive-site.xml:
hive.fetch.task.conversion
more
2.表拆分(子表)
3.分割槽表,外部表 結合使用 多級分割槽 (month,day,hour)
5.sql優化 先filter後join
reduce join:
表join發生在reduce階段 通常是兩個較大表join 每個表的資料都是從檔案中讀取的
map join:
表join發生在map階段 通常是一大一小的表join 大表資料從檔案中讀取,小表資料從記憶體中讀取 通過distributedcache 類將小表資料快取到各個節點中
smb join:sort-merge-bucket 在大表join時進行優化
在建立表時以jion欄位進行分割槽排序,將排序完成的資料劃分到不同的bucket(分割槽)中。大表join的時候就會根據對應的bucket進行join,減少查詢對錶的次數。 官網
6.資料傾斜:group by ,distinct
hive執行計畫:
顯示執行計畫:explain extended select ***
hive在job中沒有依賴關係時,可以設定並行執行:
最多可以並行執行多少個作業:hive.exec.parallel.thread.number 一般在10~20
是否並行執行作業: hive.exec.parallel 預設是false
jvm重用:就是在乙個jvm中啟動多個mr mapreduce.job.jvm.numtasks 不要超過9個
設定map數目: hive.merge.size.per.task 通過設定map讀取最大檔案的值來控制map的數量
設定reduce數目:mapreduce.job.reduces
通過資料測試每個reduce完成的時間,修改reduce數量。將所有reduce完成任務的時間控制在一定範圍內。
mapreduce.reduce.speculative 都設定為false 預設為true
動態分割槽:
開啟動態分割槽 hive.exec.dynamic.partition=true 預設是false 更多配置
三 排序演算法
所有例子都是公升序排序。資料分成兩部分 已排序和待排序。排序過程中,資料移動分為兩種 1.直接移動 移動資料的儲存位置,消耗時間 2.邏輯移動 改變指向這些資料的指標 特點 遍歷待排序資料,把最小值與起始資料 最左邊 交換位置 次數 第一輪n 1次,第k輪n k次 步驟 1.如果待排序資料大於0,則...
演算法基礎(三) 排序
我們先來看看幾種排序的結構圖 排序是否穩定 比如 排序前 25 7 6 4 29 3 排序後 22 3 4 5 6 7 9 排序前藍2在紅 2前面,排序後藍 2依然在紅 2前面,則所用的排序方法是穩定的。如果排序後,紅 2有可能在藍 2前面,那麼所用的排序方法是不穩定的 下面說說前面幾種排序的時間複...
三 排序 幸運數字
問題 幸運數字 題目描述 笨小猴的詞彙量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用這種方法去選擇選項的時候選對的機率非常大!這種方法的具體描述如下 假設maxn是單詞中出現次數最多的字母的出現次數,minn是單詞中出現次數最少的字母的出現次數,如果maxn min...