真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hive入門到剖析(四)

10 Hive體系架構(gòu)

成都創(chuàng)新互聯(lián)公司是少有的網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、營銷型企業(yè)網(wǎng)站、小程序開發(fā)、手機APP,開發(fā)、制作、設(shè)計、買友情鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,從2013年成立,堅持透明化,價格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評

10.1  概念

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

元數(shù)據(jù):Hive的用戶信息與表的MetaData

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

編譯器:編譯HQL的組件

優(yōu)化器:優(yōu)化HQL的組件

 

10.2  Hive架構(gòu)與基本組成

1、架構(gòu)圖

Hive入門到剖析(四)

2、基本組成

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

元數(shù)據(jù)存儲,通常是存儲在關(guān)系數(shù)據(jù)庫如 MySQL, derby 中

解釋器、編譯器、優(yōu)化器、執(zhí)行器

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


 3、各組件的基本功能

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

CLI,即Shell命令行

JDBC/ODBC 是Hive 的JAVA,與使用傳統(tǒng)數(shù)據(jù)庫JDBC的方式類似

WebGUI是通過瀏覽器訪問 Hive

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

解釋器、編譯器、優(yōu)化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,并在隨后有 MapReduce 調(diào)用執(zhí)行

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

4、Metastore

Metastore是系統(tǒng)目錄(catalog)用于保存Hive中所存儲的表的元數(shù)據(jù)(metadata)信息

Metastore是Hive被用作傳統(tǒng)數(shù)據(jù)庫解決方案(如oracle和db2)時區(qū)別其它類似系統(tǒng)的一個特征

Metastore包含如下的部分:

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

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

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

 

5、Compiler

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

編譯器將字符串轉(zhuǎn)化為策略(plan)

策略僅由元數(shù)據(jù)操作和HDFS操作組成,元數(shù)據(jù)操作只包含DDL語句,HDFS操作只包含LOAD語句

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

10.3  Hive運行模式

Hive的運行模式即任務(wù)的執(zhí)行環(huán)境

分為本地與集群兩種

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

設(shè)置方式:hive > SET  mapred.job.tracker=local

 

10.4  數(shù)據(jù)類型

1、原始數(shù)據(jù)類型

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 charactersin a specified character set

 

2、復(fù)雜數(shù)據(jù)類型

Structs: 例子 {c INT; d INT}

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

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

TIMESTAMP  0.8版本新加屬性

10.5  Hive的元數(shù)據(jù)存儲

1、存儲方式與模式

Hive將元數(shù)據(jù)存儲在數(shù)據(jù)庫中

連接到數(shù)據(jù)庫模式有三種

單用戶模式

多用戶模式

遠程服務(wù)器模式

 

2、單用戶模式

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

Hive入門到剖析(四)

 

3、多用戶模式

通過網(wǎng)絡(luò)連接到一個數(shù)據(jù)庫中,是最經(jīng)常使用到的模式

Hive入門到剖析(四)

4、遠程服務(wù)器模式

Hive入門到剖析(四)用于非 Java 客戶端訪問元數(shù)據(jù)庫,在服務(wù)器端啟動MetaStoreServer,客戶端利用 Thrift 協(xié)議通過MetaStoreServer 訪問元數(shù)據(jù)庫。


10.6  Hive的數(shù)據(jù)存儲

1、Hive數(shù)據(jù)存儲的基本概念

Hive的數(shù)據(jù)存儲是建立在Hadoop HDFS之上的

Hive沒有專門的數(shù)據(jù)存儲格式

存儲結(jié)構(gòu)主要包括:數(shù)據(jù)庫、文件、表、視圖

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

創(chuàng)建表時,我們直接告訴Hive數(shù)據(jù)的列分隔符與行分隔符,Hive即可解析數(shù)據(jù)

 

2、Hive的數(shù)據(jù)模型-數(shù)據(jù)庫

類似傳統(tǒng)數(shù)據(jù)庫的DataBase

在第三方數(shù)據(jù)庫里實際是一張表

簡單示例:命令行hive > create database test_database;

 

3、內(nèi)部表

與數(shù)據(jù)庫中的 Table 在概念上是類似

每一個 Table 在 Hive 中都有一個相應(yīng)的目錄存儲數(shù)據(jù)

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

warehouse是在 hive-site.xml 中由

   ${hive.metastore.warehouse.dir}指定的數(shù)據(jù)倉庫的目錄

所有的 Table 數(shù)據(jù)(不包括 External Table)都保存在這個目錄中。

刪除表時,元數(shù)據(jù)與數(shù)據(jù)都會被刪除


4、內(nèi)部表簡單示例

創(chuàng)建數(shù)據(jù)文件test_inner_table.txt

創(chuàng)建表

create table test_inner_table (key string)

加載數(shù)據(jù)

LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table

查看數(shù)據(jù)

select * from test_inner_table
select count(*) from test_inner_table

刪除表 

drop table test_inner_table

 

5、分區(qū)表

Partition 對應(yīng)于數(shù)據(jù)庫中的 Partition 列的密集索引

在 Hive 中,表中的一個 Partition 對應(yīng)于表下的一個目錄,所有的 Partition 的數(shù)據(jù)都存儲在對應(yīng)的目錄中

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

對應(yīng)于  = 20100801, position = US 的HDFS 子目錄為;/ warehouse/xiaojun/date=20120801/ position =US


6、分區(qū)表簡單示例

創(chuàng)建數(shù)據(jù)文件test_partition_table.txt

創(chuàng)建表

create table test_partition_table (key string) partitioned by (dtstring)

加載數(shù)據(jù)

LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_tablepartition (dt=‘2006’)

查看數(shù)據(jù)

select * from test_partition_table
select count(*) from test_partition_table

刪除表

 drop table test_partition_table

 

7、外部表

指向已經(jīng)在 HDFS 中存在的數(shù)據(jù),可以創(chuàng)建 Partition

它和 內(nèi)部表 在元數(shù)據(jù)的組織上是相同的,而實際數(shù)據(jù)的存儲則有較大的差異

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

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


8、外部表簡單示例

創(chuàng)建數(shù)據(jù)文件test_external_table.txt

創(chuàng)建表

create external table test_external_table (key string)

加載數(shù)據(jù)

LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table

查看數(shù)據(jù)

select * from test_external_table
select count(*) from test_external_table

刪除表

drop table test_external_table

 

9、Bucket Table(桶表)

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

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

如果想應(yīng)用很多的Map任務(wù)這樣是不錯的選擇


10、Bucket Table簡單示例

創(chuàng)建數(shù)據(jù)文件test_bucket_table.txt

創(chuàng)建表

create table test_bucket_table (key string)
     clustered by (key)into 20 buckets

加載數(shù)據(jù)

LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table

查看數(shù)據(jù)

select * from test_bucket_table
set hive.enforce.bucketing = true;

 

11、Hive的數(shù)據(jù)模型-視圖

視圖與傳統(tǒng)數(shù)據(jù)庫的視圖類似

視圖是只讀的

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

如果不指定視圖的列,會根據(jù)select語句后的生成

示例

create view test_view as select * from test

 

10.7  Hive的數(shù)據(jù)存儲

配置步驟:

hive-site.xml 添加


       hive.hwi.war.file
       lib/hive-hwi-0.8.1.war
  

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

11 Hive原理

11.1  Hive原理

1、什么要學(xué)習(xí)Hive的原理

一條Hive HQL將轉(zhuǎn)換為多少道MR作業(yè)

怎么樣加快Hive的執(zhí)行速度

編寫Hive HQL的時候我們可以做什么

Hive 怎么將HQL轉(zhuǎn)換為MR作業(yè)

Hive會采用什么樣的優(yōu)化方式

 

2、Hive架構(gòu)&執(zhí)行流程圖 

Hive入門到剖析(四)

3、Hive執(zhí)行流程

編譯器將一個Hive QL轉(zhuǎn)換操作符

操作符是Hive的最小的處理單元

每個操作符代表HDFS的一個操作或者一道MapReduce作業(yè)

 

4、Operator

Operator都是hive定義的一個處理過程

Operator都定義有:

protected List > childOperators;

protected List > parentOperators;

protected boolean done; // 初始化值為false

所有的操作構(gòu)成了 Operator圖,hive正是基于這些圖關(guān)系來處理諸如limit, group by, join等操作。

Hive入門到剖析(四)

5、Hive執(zhí)行流程

操作符

描述

TableScanOperator

掃描hive表數(shù)據(jù)

ReduceSinkOperator

創(chuàng)建將發(fā)送到Reducer端的

JoinOperator

Join兩份數(shù)據(jù)

SelectOperator

選擇輸出列

FileSinkOperator

建立結(jié)果數(shù)據(jù),輸出至文件

FilterOperator

過濾輸入數(shù)據(jù)

GroupByOperator

GroupBy語句

MapJoinOperator

/*+mapjoin(t)  */

LimitOperator

Limit語句

UnionOperator

Union語句

Hive通過ExecMapper和ExecReducer執(zhí)行MapReduce任務(wù)

在執(zhí)行MapReduce時有兩種模式

本地模式

分布式模式

   

   6、ANTLR詞法語法分析工具

ANTLR—Another Tool for Language Recognition

ANTLR 是開源的

為包括Java,C++,C#在內(nèi)的語言提供了一個通過語法描述來自動構(gòu)造自定義語言的識別器(recognizer),編譯器(parser)和解釋器(translator)的框架

Hibernate就是使用了該分析工具


11.2  一條HQL引發(fā)的思考

1、案例HQL

select key from test_limit limit 1

Stage-1

TableScan Operator>Select Operator-> Limit->File OutputOperator

Stage-0

Fetch Operator

讀取文件

 

2、Mapper與InputFormat

該hive MR作業(yè)中指定的mapper是:

mapred.mapper.class = org.apache.hadoop.hive.ql.exec.ExecMapper

input format是:

hive.input.format  =

   org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

該hive MR作業(yè)中指定的mapper是:

mapred.mapper.class = org.apache.hadoop.hive.ql.exec.ExecMapper

input format是:

hive.input.format  =

   org.apache.hadoop.hive.ql.io.CombineHiveInputFormat


文章名稱:Hive入門到剖析(四)
轉(zhuǎn)載來于:http://weahome.cn/article/jdpshg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部