Hive-分區分桶概述

一、分區

簡介

為了對表進行合理的管理以及提高查詢效率,Hive可以將表組織成“分區”。

分區是表的部分列的集合,可以為頻繁使用的數據建立分區,這樣查找分區中的數據時就不需要掃描全表,這對于提高查找效率很有幫助。

分區是一種根據“分區列”(partition column)的值對表進行粗略劃分的機制。Hive中每個分區對應著表很多的子目錄,將所有的數據按照分區列放入到不同的子目錄中去。

為什么要分區?

龐大的數據集可能需要耗費大量的時間去處理。在許多場景下,可以通過分區的方法減少每一次掃描總數據量,這種做法可以顯著地改善性能。

數據會依照單個或多個列進行分區,通常按照時間、地域或者是商業維度進行分區。比如vido表,分區的依據可以是電影的種類和評級,另外,按照拍攝時間劃分可能會得到更一致的結果。為了達到性能表現的一致性,對不同列的劃分應該讓數據盡可能均勻分布。最好的情況下,分區的劃分條件總是能夠對應where語句的部分查詢條件。

Hive的分區使用HDFS的子目錄功能實現。每一個子目錄包含了分區對應的列名和每一列的值。但是由于HDFS并不支持大量的子目錄,這也給分區的使用帶來了限制。我們有必要對表中的分區數量進行預估,從而避免因為分區數量過大帶來一系列問題。

Hive查詢通常使用分區的列作為查詢條件。這樣的做法可以指定MapReduce任務在HDFS中指定的子目錄下完成掃描的工作。HDFS的文件目錄結構可以像索引一樣高效利用。

二、分桶(桶表)

簡介

桶是通過對指定列進行哈希計算來實現的,通過哈希值將一個列名下的數據切分為一組桶,并使每個桶對應于該列名下的一個存儲文件。

為什么要分桶?

在分區數量過于龐大以至于可能導致文件系統崩潰時,我們就需要使用分桶來解決問題了。

分區中的數據可以被進一步拆分成桶,不同于分區對列直接進行拆分,桶往往使用列的哈希值對數據打散,并分發到各個不同的桶中從而完成數據的分桶過程。

注意,hive使用對分桶所用的值進行hash,并用hash結果除以桶的個數做取余運算的方式來分桶,保證了每個桶中都有數據,但每個桶中的數據條數不一定相等。

哈希函數的選擇依賴于桶操作所針對的列的數據類型。除了數據采樣,桶操作也可以用來實現高效的Map端連接操作。

記住,在數據量足夠大的情況下,分桶比分區,更高的查詢效率。

三、總結

分區和分桶最大的區別就是分桶隨機分割數據庫,分區是非隨機分割數據庫。

因為分桶是按照列的哈希函數進行分割的,相對比較平均;而分區是按照列的值來進行分割的,容易造成數據傾斜。

其次兩者的另一個區別就是分桶是對應不同的文件(細粒度),分區是對應不同的文件夾(粗粒度)。

注意:普通表(外部表、內部表)、分區表這三個都是對應HDFS上的目錄,桶表對應是目錄里的文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535694.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

定時提醒你休息的腳本

本文來源于阿里西西WEB開發社區http://www.alixixi.com收集整理,歡迎訪問。 定時彈窗提醒功能腳本..把以下代碼存為.vbs運行即可. 以下是引用片段:set WshShell WScript.CreateObject("WScript.Shell") ’對話框標題 alerttitle "你的…

Hive-分區分桶操作

在大數據中,最常用的一種思想就是分治,我們可以把大的文件切割劃分成一個個的小的文件,這樣每次操作一個小的文件就會很容易了,同樣的道理,在hive當中也是支持這種思想的,就是我們可以把大的數據&#xff0…

ubuntu好文收集

ubuntu全程配置手冊 http://ljlau.blogdriver.com/ljlau/1220277.html ubuntu下向系統日志寫記錄 http://linux0818.bokee.com/viewdiary.14153197.html aptitude 使用快速參考 http://linuxtoy.org/archives/aptitude_quick_reference.html

Flume簡單介紹

在一個完整的離線大數據處理系統中,除了HDFSMapReduceHive組成分析系統的核心之外,還需要數據采集、結果數據導出、任務調度等不可或缺的輔助系統,而這些輔助工具在hadoop生態體系中都有便捷的開源框架,在此,我們首先來…

linux系統優化篇之---top

top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于Windows的任務管理器。下面詳細介紹它的使用方法。 top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48Tasks: 29 total, 1 running, 28 sleeping, …

Flume安裝部署

1.安裝部署 1、解壓tar -zxvf apache-flume-1.9.0-bin.tar.gz 2、改名mv apache-flume-1.9.0-bin flume-1.9.0 3、配置環境變量 vi /etc/profile,source /etc/profile #flume export FLUME_HOME/usr/local/apps/flume-1.9.0 export PATH$PATH:$FLUME_HOME/bin4、將conf下的…

ubuntu學習摘要-ubuntu root用戶

在我安裝好后root的密碼是什么?我怎樣使用root帳號? 當你第一次安裝好Ubuntu后,root帳號不能用。在安裝期間創建的第一個用戶對系統有管理權,通過“sudo”能象root運行程序.使用時僅需它的普通用戶密碼。例如: sudo apt-get updat…

Elasticsearch 簡介入門

Elasticsearch 是一個分布式的開源搜索和分析引擎,適用于所有類型的數據,包括文本、數字、地理空間、結構化和非結構化數據。Elasticsearch 在 Apache Lucene 的基礎上開發而成,由 Elasticsearch N.V.(即現在的 Elastic&#xff0…

Elasticsearch 7.x 安裝及配置

一、下載安裝 1、下載地址:https://www.elastic.co/cn/downloads/elasticsearch 2、解壓安裝:tar -zxcf elasticsearch-7.9.0-linux-x86_64.tar.gz 二、新建es用戶 在某個版本以后,elasticsearch為了安全性,是不能用root用戶啟…

Ubuntu下面apache2安裝

Ubuntu為我們提供了 su apt-get install 命令,通過它你可以很方便地安裝一些軟件,這些軟件是放在Ubuntu放置在各個地方的服務器上面,如果你想安裝的軟件是比較常見的,一般都可以通過它來下載.當然 Apache 這個軟件服務器上面是有…

Java并發篇_樂觀鎖與悲觀鎖

樂觀鎖對應于生活中樂觀的人總是想著事情往好的方向發展,悲觀鎖對應于生活中悲觀的人總是想著事情往壞的方向發展。 一、引入概念 1、悲觀鎖 總是假設最壞的情況,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖&#…

Redhat與ubuntu配置網卡

redhat linux中設置網卡固定ip之前在xwindow下的redhat-config-network 設置網卡固定ip發現不起作用,設置好后就是ping不通。就查了些資料,更改 /etc/sysconfig/network-scripts/ifcfg-eth0(第一個網卡為eth0),配置dns的文件為 /etc/resolv.c…

SSH軟件包:Sftp,scp和ssh-agent

這篇文章的中心是介紹在ssh軟件包中非常有用的程序如:sftp,scp,ssh-agent,和ssh-add。在下文中我們假設sshd2守護進程很好地被設置并且運行良好。Sftp和scp總覽讓我們把注意力集中到sftp和scp上。第一個(sftp安全文件傳…

JAVA并發篇_公平鎖與非公平鎖

簡單的來說,如果一個線程組里,能保證每個線程都能拿到鎖,那么這個鎖就是公平鎖。相反,如果保證不了每個線程都能拿到鎖,也就是存在有線程餓死,那么這個鎖就是非公平鎖。 一、引入概念 1、公平鎖&#xff1…

Java并發篇_進程線程

一個進程包括由操作系統分配的內存空間,包含一個或多個線程。一個線程不能獨立的存在,它必須是進程的一部分。一個進程一直運行,直到所有的非守護線程都結束運行后才能結束。 多線程能滿足程序員編寫高效率的程序來達到充分利用 CPU 的目的。…

Real提示“作為受限用戶,您無足夠的windows操作權限”的解決辦法

運行Regedit.exe,翻到HKEY_CLASSES_ROOT/Software,刪除Software;然后關閉注冊表,再運行Regedit.exe,翻到HKEY_CLASSES_ROOT/Software,點右鍵選擇“權限”,各個組都設置為“完全控制”和“讀取”…

Java并發篇_線程詳解

線程(thread) 是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。 一、線程的…

修改MYSQL最大連接數的3種方法

MYSQL數據庫安裝完成后,默認最大連接數是100,一般流量稍微大一點的論壇或網站這個連接數是遠遠不夠的,增加默認MYSQL連接數的方法有兩個 方法一:進入MYSQL安裝目錄 打開MYSQL配置文件 my.ini 或 my.cnf查找 max_connections100 …

可擴展的編程語言——Scala

一、Scala是什么 Scala是一種多范式的編程語言,其設計的初衷是要集成面向對象編程和函數式編程的各種特性。Scala運行于Java平臺(Java虛擬機),并兼容現有的Java程序。 ? Scala語言的名稱來自于"可伸展的語言"。之所以…

ubuntu7.10 apache+php+mysql配置

本篇文章 經過許多次的測試和修改已經完成了在Ubuntu7.10 下 安裝配置 ApachePHPMySQL的所有的工作. 1、在Ubuntu7.10 下安裝 Apache2PHP5MySQL sudo apt-get install apache2 libapache2-mod-php5 php5 php5-gd mysql-server php5-mysql phpmyadmin在下載來自動安裝配置的時候…