中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive體系結構是怎么樣的

發布時間:2021-12-10 10:19:57 來源:億速云 閱讀:165 作者:小新 欄目:云計算

這篇文章給大家分享的是有關Hive體系結構是怎么樣的的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

第一部分:概念 

概念

?用戶接口:用戶訪問Hive的入口

?元數據:Hive的用戶信息與表的MetaData

?解釋器:分析翻譯HQL的組件

?編譯器:編譯HQL的組件

?優化器:優化HQL的組件

第二部分:Hive架構與基本組成    

架構圖      

Hive體系結構是怎么樣的    

基本組成

?用戶接口,包括 CLI,JDBC/ODBC,WebUI

?元數據存儲,通常是存儲在關系數據庫如 mysql, derby 中

?解釋器、編譯器、優化器、執行器

?Hadoop:用 HDFS 進行存儲,利用 MapReduce 進行計算

各組件的基本功能

?用戶接口主要有三個:CLI,JDBC/ODBC和 WebUI

?CLI,即Shell命令行

?JDBC/ODBC 是 Hive 的JAVA,與使用傳統數據庫JDBC的方式類似

?WebGUI是通過瀏覽器訪問 Hive

?Hive 將元數據存儲在數據庫中,目前只支持 mysql、derby,下一版本會支持更多的數據庫。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等

?解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,并在隨后有 MapReduce 調用執行

?Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,比如 select * from table 不會生成 MapRedcue 任務)

Metastore      

?Metastore是系統目錄(catalog)用于保存Hive中所存儲的表的元數據(metadata)信息

?Metastore是Hive被用作傳統數據庫解決方案(如oracle和db2)時區別其它類似系統的一個特征

?Metastore包含如下的部分:

?Database 是表(table)的名字空間。默認的數據庫(database)名為‘default’

?Table 表(table)的原數據包含信息有:列(list of columns)和它們的類型(types),擁有者(owner),存儲空間(storage)和SerDei信息

?Partition 每個分區(partition)都有自己的列(columns),SerDe和存儲空間(storage)。這一特征將被用來支持Hive中的模式演變(schema evolution)

Compiler

?Driver調用編譯器(compiler)處理HiveQL字串,這些字串可能是一條DDL、DML或查詢語句

?編譯器將字符串轉化為策略(plan)

?策略僅由元數據操作和HDFS操作組成,元數據操作只包含DDL語句,HDFS操作只包含LOAD語句

?對插入和查詢而言,策略由map-reduce任務中的具有方向的非循環圖(directedacyclic graph,DAG)組成

第三部分:Hive運行模式 

Hive運行模式          

?Hive的運行模式即任務的執行環境

?分為本地與集群兩種

?我們可以通過mapred.job.tracker 來指明

?設置方式

?hive > SET  mapred.job.tracker=local

第四部分:數據類型          

原始數據類型

?Integers

TINYINT - 1 byte

SMALLINT - 2 byte

INT - 4 byte

BIGINT - 8 byte

?Boolean type

BOOLEAN - TRUE/FALSE

?Floating point numbers

FLOAT –單精度

DOUBLE – 雙精度

?String type

STRING - sequence of characters in a specified character set

復雜數據類型

?Structs: 例子  {c INT; d INT}

?Maps (key-value tuples):. 例子'group' -> gid  M['group']

?Arrays (indexable lists):  例子[‘1', ‘2', ‘3']

?TIMESTAMP  0.8版本新加屬性

第五部分:Hive的元數據存儲            

存儲方式與模式              

?Hive 將元數據存儲在 數據庫中

?連接到數據庫模式有三種

?單用戶模式

?多用戶模式

?遠程服務器模式

單用戶模式

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

               Hive體系結構是怎么樣的            

多用戶模式

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

Hive體系結構是怎么樣的        

遠程服務器模式          

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

Hive體系結構是怎么樣的        

第六部分:Hive的數據存儲

Hive數據存儲的基本概念

?Hive的數據存儲是建立在Hadoop HDFS之上的

?Hive沒有專門的數據存儲格式

?存儲結構主要包括:數據庫、文件、表、視圖

?Hive默認可以直接加載文本文件,還支持sequence file 、RCFile

?創建表時,我們直接告訴Hive數據的列分隔符與行分隔符,Hive即可解析數據

Hive的數據模型-數據庫          

?類似傳統數據庫的DataBase

?在第三方數據庫里實際是一張表

?簡單示例

?命令行hive > create database test_database;

Hive的數據模型-表

?Table 內部表

?Partition  分區表

?External Table 外部表

?Bucket  Table 

內部表              

?與數據庫中的 Table 在概念上是類似

?每一個 Table 在 Hive 中都有一個相應的目錄存儲數據

?例如,一個表 test,它在 HDFS 中的路徑為:/ warehouse /test

? warehouse是在 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

分區表

?Partition 對應于數據庫中的 Partition 列的密集索引

?在 Hive 中,表中的一個 Partition 對應于表下的一個目錄,所有的 Partition 的數據都存儲在對應的目錄中

?例如:test表中包含 date 和 position 兩個 Partition,則對應于 date = 20120801, position = zh 的 HDFS 子目錄為:/ warehouse /test/date=20120801/ position =zh

?對應于  = 20100801, position = US 的HDFS 子目錄為;/ warehouse /xiaojun/date=20120801/ position =US

分區表簡單示例                  

?創建數據文件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

外部表

?指向已經在 HDFS 中存在的數據,可以創建 Partition

?它和 內部表 在元數據的組織上是相同的,而實際數據的存儲則有較大的差異

?內部表 的創建過程和數據加載過程(這兩個過程可以在同一個語句中完成),在加載數據的過程中,實際數據會被移動到數據倉庫目錄中;之后對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除

? 外部表 只有一個過程,加載數據和創建表同時完成,并不會移動到數據倉庫目錄中,只是與外部數據建立一個鏈接。當刪除一個 外部表 時,僅刪除該鏈接

外部表簡單示例                      

?創建數據文件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

Bucket Table

?可以將表的列通過Hash算法進一步分解成不同的文件存儲

?例如:將age列分散成20個文件,首先要對AGE進行Hash計算,對應為0的寫入/warehouse/test/date=20120801/postion=zh/part-00000,對應為1的寫入/warehouse/test/date=20120801/postion=zh/part-00001

?如果想應用很多的Map任務這樣是不錯的選擇

Hive體系結構是怎么樣的                        

Bucket Table簡單示例

?創建數據文件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;

Hive的數據模型-視圖                          

?視圖與傳統數據庫的視圖類似

?視圖是只讀的

?視圖基于的基本表,如果改變,指增加不會影響視圖的呈現;如果刪除,會出現問題

?如果不指定視圖的列,會根據select語句后的生成

?示例

?create view test_view as select * from test

第七部分:HiveUI介紹                          

啟動UI                          

?配置

?hive-site.xml 添加

  <property>

       <name>hive.hwi.war.file</name>

       <value>lib/hive-hwi-0.8.1.war</value>

  </property>

?

?啟動Hive的UI sh $HIVE_HOME/bin/hive --service hwi

感謝各位的閱讀!關于“Hive體系結構是怎么樣的”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄄城县| 平阴县| 罗山县| 海原县| 武城县| 阜新| 镇康县| 嘉峪关市| 南木林县| 舞钢市| 西青区| 黄梅县| 临西县| 九江市| 郯城县| 宝丰县| 松滋市| 大关县| 习水县| 遵义县| 增城市| 永定县| 濉溪县| 托克托县| 松溪县| 虎林市| 锦州市| 皮山县| 永福县| 盘锦市| 东光县| 高雄县| 班戈县| 三原县| 长汀县| 商洛市| 昆山市| 南郑县| 云霄县| 乳源| 闸北区|