HIVE的四種排序,以及分割槽分桶
Hive的四種排序
order by
order by 會對輸入做全域性排序,因此只有一個reducer(多個reducer無法保證全域性有序)
只有一個reducer,會導致當輸入規模比較大時,需要較長的時間。
set hive.mapred.mode=nonstrict; (default value / 預設值)
set hive.mapred.mode=strict;
order by 和資料庫中的order by功能一致按照某一項&幾項排序輸出。
與資料庫中order by的區別在於hive.mapred.mode = strict模式下 必須指定limit否則執行會報錯
原因:在order by狀態下所有的資料都會到一臺伺服器進行reduce操作也就是隻有一個reduce,如果在資料量大的情況下會出現無果的情況,如果進行limit n,那只有n * map
number 條記錄而已。只有一個reduce也可以出來裡過來
sort by
sort by不是全域性排序,其在資料進入reducer前完成排序
因此,如果用sort by進行排序,並且設定mapred.reduce.tasks>1,則sort by只保證每個reducer的輸出有序,不保證全域性有序。
sort by 不受hive.mapred.mode是否為strict,nostrict的影響。
sort by的資料只能保證在同一個reduce中的資料可以按指定欄位排序。
使用sort by你可以指定執行的reduce個數(set mapred.reduce.tasks=<number>),對輸出的資料在執行歸併排序,即可以得到全部結果。
注意:可以用limit子句大大減少資料量。使用limit n後,傳輸到reduce端(單機)的資料記錄就減少到n*(map個數)。否則由於資料過大可能出不了結果。
distribute by
按照指定的欄位對資料進行劃分到不同的輸出reduce / 檔案中。
insert overwrite local directory '/home/hadoop/out' select * from test order by name distribute by length(name);
此方法會根據name的長度劃分到不同的reduce中,最終輸出到不同的檔案中。
length 是內建函式,也可以指定其他的函式或這使用自定義函式。
Cluster By
cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。
但是排序只能是倒序排序,不能指定排序規則為asc 或者desc。
Hive的分割槽分桶
我們發現其實桶的概念就是MapReduce的分割槽的概念,兩者完全相同。物理上每個桶就是目錄裡的一個檔案,一個作業產生的桶(輸出檔案)數量和reduce任務個數相同。
而分割槽表的概念,則是新的概念。分割槽代表了資料的倉庫,也就是資料夾目錄。每個資料夾下面可以放不同的資料檔案。通過資料夾可以查詢裡面存放的檔案。但資料夾本身和資料的內容毫無關係。
桶則是按照資料內容的某個值進行分桶,把一個大檔案雜湊稱為一個個小檔案。
這些小檔案可以單獨排序。如果另外一個表也按照同樣的規則分成了一個個小檔案。兩個表join的時候,就不必要掃描整個表,只需要匹配相同分桶的資料即可。效率當然大大提升。
同樣,對資料抽樣的時候,也不需要掃描整個檔案。只需要對每個分割槽按照相同規則抽取一部分資料即可。
分割槽表
如果在建表時使用了 PARTITIONED BY,表即為分割槽表。分割槽表下的資料按分割槽鍵的值(或值的範圍)放在HDFS下的不同目錄中,可以有效減少查詢時掃描的資料量,提升查詢效率。
• 非分割槽表
非分割槽表即除分割槽表之外的表。
2.1.2.1.4. 按表是否分桶分類
按表是否分桶可以將表分為兩類:分桶表和非分桶表。
• 分桶表
如果在建表時使用了 CLUSTERED BY … INTO … BUCKETS,表即為分桶表。分桶表下的資料按
分桶鍵的雜湊值放在HDFS下的不同目錄中,可以有效減少查詢時掃描的資料量,提升查詢效率。
• 非分桶表
非分桶表即除分桶表之外的表
Hive的應用範圍舉例
日誌分析:日誌分析可以優化系統,獲知使用者行為,也可以獲知資料的統計資訊
資料探勘:通過結構化資料的挖掘,能夠獲得原先使用者沒有意識的資訊
文件索引:可以對一系列文件進行分析,並形成文件的索引結構,不一定是完整的排序表,可能是關聯資訊的索引
商業智慧資訊處理:可以對商業資訊進行查詢分析,從中可以獲得一些只能決策的資訊
及時查詢以及資料驗證:資料分析人員可能臨時需要驗證資料的特性,需要查詢引擎迅速進行資料分析
相關推薦
HIVE的四種排序,以及分割槽分桶
Hive的四種排序 order by order by 會對輸入做全域性排序,因此只有一個reducer(多個reducer無法保證全域性有序) 只有一個reducer,會導致當輸入規模比較大時,需要較長的時間。
java 強弱軟虛 四種引用,以及用到的場景
優先 時間 重新 通過 如果 sof queue hashcode 等待 1、利用軟引用和弱引用解決OOM問題:用一個HashMap來保存圖片的路徑和相應圖片對象關聯的軟引用之間的映射關系,在內存不足時,JVM會自動回收這些緩存圖片對象所占用的空間,從而有效地避免了OOM的
面試常考演算法題(一)--四種排序方法以及小和問題
常用演算法題練習(一) 引言 演算法的重要毋庸置疑,在面試過程中或多或少的會被問到演算法,這一個系列的文章雖然冠以常用這一稱呼,但是並不意味著所有演算法都很簡單,這一篇文章是系列文章的第一篇,包括以下幾個演算法題,部分相對而言有點難度的題目會有所講解. 氣泡
清除浮動的最常用的四種方法,以及優缺點
為什麼要清除浮動? 清除浮動主要是為了解決,父元素因為子級元素浮動引起的內部高度為0的問題 1.如下,我給父盒子設定一個boder,內部放兩個盒子一個big 一個small,未給big和small設定浮動,則他們會預設撐開父盒子 2.當我給內部兩個盒子加上float
java 強弱軟虛 四種引用,以及用到的場景。
在JDK1.2後,java對引用的概念進行了擴充。按照引用強度依次從強到弱分為:強引用、軟引用(SoftReference)、弱引用(WeakReference)、虛引用(PhantomReference)用四種。 強引用:最常見的,不會被GC回收的物件,如 Object
大資料系列之資料倉庫Hive知識整理(四)Hive的嚴格模式,動態分割槽,排序,事務,調優
1.Hive的嚴格模式Hive提供了一個嚴格模式,可以防止使用者執行那些產生意想不到的不好的影響的查詢。想想看在那麼大的資料量的前提下,如果我們在分割槽上表上使用查詢所有,或是使用了笛卡爾積查詢資料等等不良情況,那得花費我們多少時間和資源成本,Hive在預設情況下會開啟一種模
Hive 中的四種排序詳解,再也不會混淆用法了
Hive 中的四種排序 排序操作是一個比較常見的操作,尤其是在資料分析的時候,我們往往需要對資料進行排序,hive 中和排序相關的有四個關鍵字,今天我們就看一下,它們都是什麼作用。 資料準備 下面我們有一份溫度資料,tab 分割 2008 32.02008&nb
php 常用四種排序 冒泡,選擇,插入,快排
sel ray 一次 自己 public 如果 art dex 代碼 ---恢復內容開始--- 1冒泡排序。 【為描述方便,例子全面為升序排列】 簡述:假設數組有10個數字,從左向右。依次比較,如果前者大於後者,則兩兩交換。每一輪將冒泡一個最大數出來,依次循環,完成排序
歸併,快速,希爾,普通插入四種排序演算法的比較
import java.util.Arrays; public class ShellSort { public static void main(String[] args) { int[] arr = new int[10000]
Hive(二)--分割槽分桶,內部表外部表
1.簡述 Hive是hadoop生態圈中實現資料倉庫的一項技術。雖然hadoop和hdfs的設計侷限了Hive所能勝任的工作,但是hive仍然是目前網際網路中最適合資料蒼鷺的應用技術。不論從“品相還是舉止”,hive都像一個關係型資料庫。使用者對資料庫、表和列這類術語比較熟悉的話,那麼掌握h
Hive 建立外部分割槽表並載入資料以及如何分桶
第一 建立資料庫並自定義路徑 如 /sogou/500w hive> create database sogou location '/sogou/500w' ; 進入改表中建立表 hive> use
【JAVA】四種引用,強弱軟虛以及用到的場景
1、強引用(StrongReference) 強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。如下: 1 Object o=new Objec
Java 多執行緒傳值有三種方式,以及另類的第四種方式
現在博主的需求是:有可能在同一個執行緒類執行不一樣的程式。上邊兩個紅框中的cron4j排程器使用的是一個,根據引數不同來執行的。如果我點選後邊的手動執行一次,按照我上邊給出的java程式碼是無法實現的。看下邊的新的程式碼: (adsbygoogle = window.adsbygoo
創新工場筆試題----有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢,求有多少種組合可以組合成n分錢?
【題目】有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢,求有多少種組合可以組合成n分錢? 程式碼如下 void Combination(int *a,int index,int n,vector<int>& vec) { if (n=
06.實現servlet的幾種方式,以及接口或者類之間的關系
ssa 圖片 servlet 容器 實例化 設備 blog public ide 接口:Servlet、ServletConfig、ServletRequest、ServletResponse、HttpServletRequest、HttpServletResponse、S
常用的四種排序算法
環境 sort 算法 編譯環境 uic ret vc6.0 插入排序 logs #include <stdio.h> void BubbleSort(int a[], int size, int order); void SelectSort(int a[]
初學安卓開發隨筆之 Menu、toast 用法、活動的四種啟動模式 以及 一個方便的Base活動類使用方法
pro 一點 cte edi standard oid nal xtend 解釋 Toast toast 是安卓系統的一種非常棒的提醒方式 首先定義一個彈出Toast的觸發點,比如可以是按鈕之類 其中 Toast.LENGTH_SHORT是指顯示時長 還有一個內置變量為To
Java四種引用解析以及在Android的應用
ram 1.7 reference 不足 虛引用 足夠 不用 詳情 ide JVM垃圾回收(GC)機制 我們知道,Java垃圾回收(GC)機制是JVM的重要組成部分,也是JVM平常工作的重點,事實上,JVM的後臺線程每時每刻都在監控整個應用程序的狀態,並在必要的時候啟動GC
單例的幾種方式,以及如何破壞單例,使用枚舉保護單例;
des new 如果 auth 變量 ins 方式 break 時機 1、基礎入門單例: 1 public class Singleton { 2 private Singleton(){ 3 System.out.println("Sing
Lucene.net(4.8.0) 學習問題記錄五: JIEba分詞和Lucene的結合,以及對分詞器的思考
+= d+ ext eth reac chart rdl ret start 前言:目前自己在做使用Lucene.net和PanGu分詞實現全文檢索的工作,不過自己是把別人做好的項目進行遷移。因為項目整體要遷移到ASP.NET Core 2.0版本,而Lucene使用的版本