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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

将服务器文件加载至hive表中,Hive入门到剖析(四)

發(fā)布時間:2024/1/23 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将服务器文件加载至hive表中,Hive入门到剖析(四) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

10 Hive體系架構

10.1概念

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

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

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

編譯器:編譯HQL的組件

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

10.2 ?Hive架構與基本組成

1、架構圖

2、基本組成

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

元數(shù)據(jù)存儲,通常是存儲在關系數(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 調用執(zhí)行

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

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調用編譯器(compiler)處理HiveQL字串,這些字串可能是一條DDL、DML或查詢語句

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

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

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

10.3 ?Hive運行模式

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

分為本地與集群兩種

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

設置方式: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、復雜數(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ù)庫模式有三種

單用戶模式

多用戶模式

遠程服務器模式

2、單用戶模式

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

3、多用戶模式

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

4、遠程服務器模式

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

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

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

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

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

存儲結構主要包括:數(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 中都有一個相應的目錄存儲數(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 對應于數(shù)據(jù)庫中的 Partition 列的密集索引

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

例如: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

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計算,對應為0的寫入/warehouse/test/date=20120801/postion=zh/part-00000,對應為1的寫入/warehouse/test/date=20120801/postion=zh/part-00001

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

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、什么要學習Hive的原理

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

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

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

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

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

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

3、Hive執(zhí)行流程

編譯器將一個Hive QL轉換操作符

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

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

4、Operator

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

Operator都定義有:

protected List > childOperators;

protected List > parentOperators;

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

所有的操作構成了 Operator圖,hive正是基于這些圖關系來處理諸如limit, group by, join等操作。

5、Hive執(zhí)行流程操作符描述

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

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

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

SelectOperator選擇輸出列

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

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

GroupByOperatorGroupBy語句

MapJoinOperator/*+mapjoin(t) ?*/

LimitOperatorLimit語句

UnionOperatorUnion語句

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

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

本地模式

分布式模式

6、ANTLR詞法語法分析工具

ANTLR—Another Tool for Language Recognition

ANTLR 是開源的

為包括Java,C++,C#在內(nèi)的語言提供了一個通過語法描述來自動構造自定義語言的識別器(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表中,Hive入门到剖析(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。