Hive的數據模型—桶表


概述

桶表是對數據進行哈希取值,然后放到不同文件中存儲。

數據加載到桶表時,會對字段取hash值,然后與桶的數量取模。把數據放到對應的文件中。
物理上,每個桶就是表(或分區)目錄里的一個文件,一個作業產生的桶(輸出文件)和reduce任務個數相同。


作用

桶表專門用于抽樣查詢,是很專業性的,不是日常用來存儲數據的表,需要抽樣查詢時,才創建和使用桶表。


實驗

創建

[22:39:03]hive (zmgdb)> create table bucket_t1(id string)
[22:39:26] ? ? ? ? ? ?> clustered by(id) into 6 buckets;

[22:39:27]OK
[22:39:27]Time taken: 0.546 seconds
clustered by:以哪個字段分桶。對id進行哈希取值,隨機 ?地放到4個桶里。

-----------------------------


準備數據

[root@hello110 data]# vi bucket_test
1
2
3
4
5
6

.............

.........


導入數據

正確的導入方式:從日常保存數據的表insert


[21:27:45]hive (zmgdb)> create table t2(id string);
[21:27:45]OK
[21:27:45]Time taken: 0.073 seconds
[21:28:24]hive (zmgdb)> load data local inpath '/data/bucket_test' into table t2;
[21:28:24]Loading data to table zmgdb.t2
[21:28:25]OK

從日常表導入

[22:39:47]hive (zmgdb)> insert overwrite table bucket_t1 select id from t2;

hive會啟動mapreduce
[22:39:48]WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
[22:39:48]Query ID = hadoop_20160922063946_34bf30c4-3f23-43e9-ad8f-edd5ee214948
[22:39:48]Total jobs = 1
[22:39:48]Launching Job 1 out of 1
[22:39:48]Number of reduce tasks determined at compile time: 6
[22:39:48]In order to change the average load for a reducer (in bytes):
[22:39:48] ?set hive.exec.reducers.bytes.per.reducer=<number>
[22:39:48]In order to limit the maximum number of reducers:
[22:39:48] ?set hive.exec.reducers.max=<number>
[22:39:48]In order to set a constant number of reducers:
[22:39:48] ?set mapreduce.job.reduces=<number>
[22:39:51]Starting Job = job_1474497386931_0001, Tracking URL = http://hello110:8088/proxy/application_1474497386931_0001/
[22:39:51]Kill Command = /home/hadoop/app/hadoop-2.7.2/bin/hadoop job ?-kill job_1474497386931_0001
[22:39:59]Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 6
[22:39:59]2016-09-22 06:39:59,419 Stage-1 map = 0%, ?reduce = 0%
[22:40:06]2016-09-22 06:40:05,828 Stage-1 map = 100%, ?reduce = 0%, Cumulative CPU 1.63 sec
[22:40:12]2016-09-22 06:40:12,347 Stage-1 map = 100%, ?reduce = 17%, Cumulative CPU 3.48 sec
[22:40:16]2016-09-22 06:40:15,739 Stage-1 map = 100%, ?reduce = 33%, Cumulative CPU 5.4 sec
[22:40:17]2016-09-22 06:40:16,807 Stage-1 map = 100%, ?reduce = 50%, Cumulative CPU 7.52 sec
[22:40:19]2016-09-22 06:40:18,929 Stage-1 map = 100%, ?reduce = 83%, Cumulative CPU 11.35 sec
[22:40:20]2016-09-22 06:40:19,991 Stage-1 map = 100%, ?reduce = 100%, Cumulative CPU 13.19 sec
[22:40:21]MapReduce Total cumulative CPU time: 13 seconds 190 msec
[22:40:21]Ended Job = job_1474497386931_0001
[22:40:21]Loading data to table zmgdb.bucket_t1
[22:40:22]MapReduce Jobs Launched:?
[22:40:22]Stage-Stage-1: Map: 1 ?Reduce: 6 ? Cumulative CPU: 13.19 sec ? HDFS Read: 25355 HDFS Write: 1434 SUCCESS
[22:40:22]Total MapReduce CPU Time Spent: 13 seconds 190 msec
[22:40:22]OK
[22:40:22]id
[22:40:22]Time taken: 34.91 seconds



錯誤的導入方式:從文件load data?

hive (zmgdb)> create table bucket_t2 like bucket_t1;
OK
Time taken: 0.707 seconds

hive (zmgdb)> load data local inpath '/data/bucket_test' into table bucket_t2;
Loading data to table zmgdb.bucket_t2
OK
Time taken: 1.485 seconds



沒有啟動mapreduce對數據進行哈希取值,只是簡單的原樣導入,沒有起到抽樣查詢的目的。通過select * from 比較會發現bucket_t1的數據和bucket_t2的數據順序是不同的,bucket_t2的表順序與原數據文件順序一致,沒有做過哈希取值。


查詢

select * from bucket_table tablesample(bucket x out of y on column);
tablesample是抽樣語句
語法解析:TABLESAMPLE(BUCKET x OUT OF y on 字段)
y必須是table總bucket數的倍數或者因子。
hive根據y的大小,決定抽樣的比例。
例如,table總共分了64份,當y=32時,抽取(64/32=)2個bucket的數據,當y=128時,抽取(64/128=)1/2個bucket的數據。x表示從哪個bucket開始抽取。
例如,table總bucket數為32,tablesample(bucket 3 out of 16),表示總共抽取(32/16=)2個bucket的數據,分別為第3個bucket和第(3+16=)19個bucket的數據。如果是y=64,則抽取半個第3個桶的值。


[22:44:31]hive (zmgdb)> select * from bucket_t1 tablesample (bucket 1 out of 6 on id);
[22:44:31]OK
[22:44:31]bucket_t1.id
[22:44:31]6
[22:44:31]iu
[22:44:31]0
[22:44:31]6
[22:44:31]hj
[22:44:31]6
[22:44:31]6
[22:44:31]51
[22:44:31]
[22:44:31]
[22:44:31]r
[22:44:31]99
[22:44:31]0
[22:44:31]57
[22:44:31]loo
[22:44:31]r
[22:44:31]r
[22:44:31]r
[22:44:31]60
[22:44:31]66
[22:44:31]75
[22:44:31]6
[22:44:31]84
[22:44:31]x
[22:44:31]24
[22:44:31]93
[22:44:31]99
[22:44:31]105
[22:44:31]f
[22:44:31]r
[22:44:31]114
[22:44:31]0
[22:44:31]123
[22:44:31]129
[22:44:31]132
[22:44:31]x
[22:44:31]138
[22:44:31]141
[22:44:31]147
[22:44:31]33
[22:44:31]150
[22:44:31]156
[22:44:31]r
[22:44:31]f
[22:44:31]39
[22:44:31]15
[22:44:31]r
[22:44:31]ddd
[22:44:31]
[22:44:31]06
[22:44:31]hj
[22:44:31]f
[22:44:31]l
[22:44:31]f
[22:44:31]f
[22:44:31]f
[22:44:31]f
[22:44:31]42
[22:44:31]f
[22:44:31]r
[22:44:31]r
[22:44:31]f
[22:44:31]f
[22:44:31]r
[22:44:31]48
[22:44:31]6
[22:44:31]Time taken: 0.142 seconds, Fetched:66 row(s)


[22:44:43]hive (zmgdb)> select * from bucket_t1 tablesample (bucket 1 out of 60 on id);
[22:44:43]OK
[22:44:43]bucket_t1.id
[22:44:43]
[22:44:43]
[22:44:43]loo
[22:44:43]x
[22:44:43]114
[22:44:43]132
[22:44:43]x
[22:44:43]150
[22:44:43]ddd
[22:44:43]

[22:44:43]Time taken: 0.064 seconds, Fetched: 10 row(s)




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

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

相關文章

mysql+使用swap_MySQL避免使用SWAP

當物理內存的數量不能容納數據的時候&#xff0c;os會把虛擬內存中的數據寫到磁盤上&#xff0c;此時的交換對于運行在操作系統中的進程是透明的。交換對與MySQL性能有很大的影響&#xff0c;對于Innodb存儲引擎它對內存中的數據鎖住全局互斥量&#xff0c;如果此時導致了磁盤的…

delphi bmp繪制矢量文件效率慢_聊一聊矢量瓦片的常識

一、矢量瓦片的基本原理和相關格式現階段&#xff0c;電子地圖瓦片主要使用兩種方式&#xff0c;一種是傳統的柵格瓦片&#xff0c;另外一種是新出的矢量瓦片(Vector Tiles)&#xff0c;前者是采用四叉樹金字塔模型的分級方式&#xff0c;將地圖切割成無數大小相等的矩形柵格圖…

python生成器與迭代器。

生成器 在python 中一邊循環一邊計算的機制&#xff0c;叫做生成器(generator)。 通過列表生成式&#xff0c;我們可以直接創建一個列表。但是&#xff0c;收到內存的限制&#xff0c;列表容量肯定是有限的。而且&#xff0c;創建一個包含100萬個元素的列表&#xff0c;不僅占用…

centos mysql 設置_CentOS下MySQL安裝后配置和設置-阿里云開發者社區

CentOS下MySQL安裝后配置和設置&#xff1a;1&#xff1a;安裝完成路徑:1、數據庫目錄/var/lib/mysql/2、配置文件/usr/share/mysql(mysql.server命令及配置文件)3、啟動腳本/etc/rc.d/init.d/(啟動腳本文件mysql的目錄)4、相關命令/usr/bin(mysqladmin mysqldump等命令)注:1~3…

python怎樣將list轉化成字典_在python 中如何將 list 轉化成 dictionary

原標題&#xff1a;在python 中如何將 list 轉化成 dictionary 問題1&#xff1a;如何將一個list轉化成一個dictionary&#xff1f; 問題描述&#xff1a;比如在python中我有一個如下的list&#xff0c;其中奇數位置對應字典的key&#xff0c;偶數位置為相應的value解決方案: 1…

vscode gcc debug dbg gdb c cpp c++ cuckoo monitor

為什么80%的碼農都做不了架構師&#xff1f;>>> 裝cygwin 或者mingGW&#xff0c;裝gcc工具鏈&#xff0c;并將cygwin的bin目錄加入環境變量PATH中。 ctrlshiftb {// See https://go.microsoft.com/fwlink/?LinkId733558// for the documentation about the tasks…

hive索引

創建 hive (zmgdb)> create index index_t1 on table v_t1(name) > as > org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler > with > deferred rebuild in table save_index_t1_table; OK Time …

python爬取知網論文關鍵詞_Python爬蟲根據關鍵詞爬取知網論文摘要并保存到數據庫中...

由于實驗室需要一些語料做研究&#xff0c;語料要求是知網上的論文摘要&#xff0c;但是目前最新版的知網爬起來有些麻煩&#xff0c;所以我利用的是知網的另外一個搜索接口 搜索出來的結果和知網上的結果幾乎一樣 在這個基礎上&#xff0c;我簡單看了些網頁的結構&#xff0c;…

網頁中查看pdf文檔

2019獨角獸企業重金招聘Python工程師標準>>> 介紹&#xff1a; PDFObject 是一個 JavaScript 庫&#xff0c;用來在HTML中動態嵌入 PDF 文檔。 實現代碼&#xff1a; <script type"text/javascript" src"pdfobject.js"></script>…

導入導出數據

導入數據 從文件中裝載數據 hive>LOAD DATA [LOCAL] INPATH ... [OVERWRITE] INTO TABLE t2 [PARTITION (provincebeijing)]; LOCAL&#xff1a;linux本地的文件。無LOCAL&#xff1a;是hdfs的文件 注意&#xff1a; 從本地文件系統中將數據導入到Hive表的過程中&#xf…

python opencv 讀取視頻流不解碼_python + opencv: 解決不能讀取視頻的問題

博主一開始使用python2.7和Opencv2.4.10來獲取攝像頭圖像&#xff0c;程序如下&#xff1a; cap cv2.VideoCapture(0) ret, frame cap.read()使用這個程序能夠打開攝像頭并獲取圖像&#xff0c;一切正常。 接著想使用OpenCv播放視頻&#xff0c;按照官方教程只要將VideoCaptu…

jmeter提取mysql返回值_jmeter連接數據庫和提取數據庫返回值

一、在MySQL命令行中&#xff0c;驗證MySQL是否能正常登陸。若不能登陸&#xff0c;則重置MySQL的密碼。二、下載mysql-connector-java-5.1.45-bin.jar&#xff0c;將其放入Jmeter安裝目錄的lib目錄下。完成MySQL數據庫的驅動。三、右鍵“線程組”->“配置元件”->“JDBC…

[轉] Lodash

與underscore 類似 &#xff0c; 是1個js庫&#xff0c;內部封裝了諸多對字符串、數組、對象等常見數據類型的處理函數。 模塊組成 Lodash 提供的輔助函數主要分為以下幾類&#xff0c;函數列表和用法實例請查看 Lodash 的官方文檔&#xff1a; Array&#xff0c;適用于數組類型…

讀模式與寫模式

RDBMS是寫模式 Hive是讀模式 我們傳統的關系型數據庫RDBMS是寫模式。在RDBMS里&#xff0c;我們對表進行數據操作時候&#xff0c;RDBMS會用數據庫的第一第二第三范式去檢查數據的規范性&#xff0c;如果不符合規范&#xff0c;數據庫就拒絕數據的加載和操作。這個驗證過程消耗…

用python畫雨滴_Python編程從入門到實踐練習(雨滴)

雨滴&#xff1a;尋找一幅雨滴圖像&#xff0c;并創建一系列整齊排列的雨滴。讓這些雨滴往下落&#xff0c;直到到達屏幕后消失。 先說今天的問題&#xff1a; 1.在更改函數形參時&#xff0c;調用的時候也要修改&#xff0c;否則會出現AttributeError 值得注意的是&#xff1a…

python你是否也走進了這個誤區了_Python是不是被嚴重高估了?

是python被曲解了python有非常強的局限性&#xff0c;那就是只適合在io和網絡或其他整合組件上耗費大量時間的快速迭代跨平臺需求&#xff0c;比如爬蟲和下載快速迭代才能顯示出python作為腳本語言不用編譯的優勢&#xff0c;而io和網絡的大量時間消耗才能掩蓋python本身糟糕透…

Hive文件格式

Hive有四種文件格式&#xff1a;TextFile&#xff0c;SequenceFile&#xff0c;RCFile&#xff0c;ORC TextFile 默認的格式&#xff0c;文本格式。 SequenceFile 簡介 見&#xff1a;http://blog.csdn.net/zengmingen/article/details/52242768 操作 hive (zmgdb)>cre…

learnpythonthehardway下載_Python【十一】:階段小結

今天來將前一段時間學習的Python的知識系統地梳理一遍&#xff0c;接下來開始實際的編程實踐了。 一、Python實驗環境搭建 使用Python編程&#xff0c;首先要有一個開發環境&#xff0c;如同C/C上又VS2008家族一樣&#xff0c;Linux/MacOS上的部署情況這里不再詳述&#xff0c;…

python使用ssh 中文_Python3制作簡易SSH登錄工具

下載W3Cschool手機App&#xff0c;0基礎隨時隨地學編程>>戳此了解導語做這個的起因大概是&#xff1a;電腦里的Xshell不知道為啥突然顯示“評估期已過”之類的提示。。。記得之前認證學校郵箱后是可以免費使用的。。。蒼天繞過誰。。。想起上次認證學校郵箱過了N個小時才…