日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive体系结构(一)架构与基本组成

發布時間:2024/2/28 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive体系结构(一)架构与基本组成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hive體系結構(一)架構與基本組成
Hive體系結構(二)Hive的執行原理、與關系型數據庫的比較
Hive體系結構(三)元數據庫與基本操作
Hive體系結構(四)注意事項與擴展特性

1 Hive的體系結構劃分

下面是Hive的架構圖:

1. 用戶接口主要有三個:CLI,Client 和 WUI。其中最常用的是CLI,Cli啟動的時候,會同時啟動一個Hive副本。Client是Hive的客戶端,用戶連接至Hive Server。在啟動 Client模式的時候,需要指出Hive Server所在節點,并且在該節點啟動Hive Server。 WUI是通過瀏覽器訪問Hive。
2. Hive將元數據存儲在數據庫中,如mysql、derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
3. 解釋器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,并在隨后有MapReduce調用執行。
4. Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成(包含*的查詢,比如select * from tbl不會生成MapRedcue任務)。

2 連接到數據庫的模式

2.1 單用戶模式

此模式連接到一個In-memory 的數據庫Derby,一般用于Unit Test。

2.2 多用戶模式

通過網絡連接到一個數據庫中,是最經常使用到的模式。

2.3 遠程服務器模式

用于非Java客戶端訪問元數據庫,在服務器端啟動MetaStoreServer,客戶端利用Thrift協議通過MetaStoreServer訪問元數據庫。

3 Hive的數據模型

對于數據存儲,Hive沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以非常自由的組織Hive中的表,只需要在創建表的時候告訴Hive數據中的列分隔符和行分隔符,Hive就可以解析數據。

Hive中所有的數據都存儲在HDFS中,存儲結構主要包括數據庫、文件、表和視圖。

Hive中包含以下數據模型:Table內部表,External Table外部表,Partition分區,Bucket桶。Hive默認可以直接加載文本文件,還支持sequence file 、RCFile。

3.1 Hive數據庫

類似傳統數據庫的DataBase,在第三方數據庫里實際是一張表。簡單示例命令行 hive > create database test_database;

3.2 內部表

Hive的內部表與數據庫中的Table在概念上是類似。每一個Table在Hive中都有一個相應的目錄存儲數據。例如一個表pvs,它在HDFS中的路徑為/wh/pvs,其中wh是在hive-site.xml中由${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,所有的Table數據(不包括External Table)都保存在這個目錄中。刪除表時,元數據與數據都會被刪除。

內部表簡單示例:

創建數據文件:test_inner_table.txt 創建表:create table test_inner_table (key string) 加載數據:LOAD DATA LOCAL INPATH 'filepath' INTO TABLE test_inner_table 查看數據:select * from test_inner_table; select count(*) from test_inner_table 刪除表:drop table test_inner_table

3.3 外部表

外部表指向已經在HDFS中存在的數據,可以創建Partition。它和內部表在元數據的組織上是相同的,而實際數據的存儲則有較大的差異。內部表的創建過程和數據加載過程這兩個過程可以分別獨立完成,也可以在同一個語句中完成,在加載數據的過程中,實際數據會被移動到數據倉庫目錄中;之后對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。而外部表只有一個過程,加載數據和創建表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在LOCATION后面指定的 HDFS 路徑中,并不會移動到數據倉庫目錄中。當刪除一個External Table時,僅刪除該鏈接。

外部表簡單示例:

創建數據文件:test_external_table.txt 創建表:create external table test_external_table (key string) 加載數據:LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table 查看數據:select * from test_external_table; select count(*) from test_external_table 刪除表:drop table test_external_table

3.4 分區

Partition對應于數據庫中的Partition列的密集索引,但是Hive中Partition的組織方式和數據庫中的很不相同。在Hive中,表中的一個Partition對應于表下的一個目錄,所有的Partition的數據都存儲在對應的目錄中。

例如pvs表中包含ds和city兩個Partition,則對應于ds = 20090801, ctry = US 的HDFS子目錄為/wh/pvs/ds=20090801/ctry=US;對應于 ds = 20090801, ctry = CA 的HDFS子目錄為/wh/pvs/ds=20090801/ctry=CA。

分區表簡單示例:

創建數據文件:test_partition_table.txt 創建表:create table test_partition_table (key string) partitioned by (dt string) 加載數據:LOAD DATA INPATH 'filepath' INTO TABLE test_partition_table partition (dt='2006') 查看數據:select * from test_partition_table; select count(*) from test_partition_table 刪除表:drop table test_partition_table

3.5 桶

Buckets是將表的列通過Hash算法進一步分解成不同的文件存儲。它對指定列計算hash,根據hash值切分數據,目的是為了并行,每一個Bucket對應一個文件。

例如將user列分散至32個bucket,首先對user列的值計算hash,對應hash值為0的HDFS目錄為/wh/pvs/ds=20090801/ctry=US/part-00000;hash值為20的HDFS目錄為/wh/pvs/ds=20090801/ctry=US/part-00020。如果想應用很多的Map任務這樣是不錯的選擇。

桶的簡單示例:

創建數據文件:test_bucket_table.txt 創建表:create table test_bucket_table (key string) clustered by (key) into 20 buckets 加載數據:LOAD DATA INPATH 'filepath' INTO TABLE test_bucket_table 查看數據:select * from test_bucket_table; set hive.enforce.bucketing = true;

3.6 Hive的視圖

視圖與傳統數據庫的視圖類似。視圖是只讀的,它基于的基本表,如果改變,數據增加不會影響視圖的呈現;如果刪除,會出現問題。

如果不指定視圖的列,會根據select語句后的生成。
示例:

create view test_view as select * from test

總結

以上是生活随笔為你收集整理的Hive体系结构(一)架构与基本组成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。