1. 程式人生 > >HIVE的四種排序,以及分割槽分桶

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使用的版本