一文了解Hive是什么
一、Hive介紹
hive: 由 Facebook 開源用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計(jì)工具。
Hive 是基于 Hadoop 的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張表,并提供類 SQL 查詢功能。
Hive的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 類似于SQL語(yǔ)句,簡(jiǎn)單學(xué)習(xí)易上手
- 避免了去寫 MapReduce,減少開發(fā)人員的學(xué)習(xí)成本
- Hive 的執(zhí)行延遲比較高,因此 Hive 常用于數(shù)據(jù)分析,對(duì)實(shí)時(shí)性要求不高的場(chǎng)合
- Hive 優(yōu)勢(shì)在于處理大數(shù)據(jù),對(duì)于處理小數(shù)據(jù)沒有優(yōu)勢(shì),因?yàn)?Hive 的執(zhí)行延遲比較高
- Hive 支持用戶自定義函數(shù),用戶可以根據(jù)自己的需求來(lái)實(shí)現(xiàn)自己的函數(shù)
缺點(diǎn):
- Hive 的 HQL 表達(dá)能力有限
- Hive 的效率比較低
- Hive本質(zhì)是一個(gè)MR
Hive架構(gòu)
Hive用戶接口
- Hive CLI(Hive Command Line) Hive的命令行
- HWI(Hive Web Interface) HiveWeb接口
- Hive提供了Thrift服務(wù),也就是Hiveserver。
Hive元數(shù)據(jù)的三種存儲(chǔ)模式
- 單用戶模式 : Hive安裝時(shí),默認(rèn)使用的是Derby數(shù)據(jù)庫(kù)存儲(chǔ)元數(shù)據(jù),這樣不能并發(fā)調(diào)用Hive。
- 多用戶模式 : MySQL服務(wù)器存儲(chǔ)元數(shù)據(jù)
- 遠(yuǎn)程服務(wù)器模式 : 啟動(dòng)MetaStoreServer
Hive數(shù)據(jù)存儲(chǔ)
Hive數(shù)據(jù)可區(qū)分為表數(shù)據(jù)和元數(shù)據(jù),表數(shù)據(jù)我們都知道是表中的數(shù)據(jù),而元數(shù)據(jù)是用來(lái)存儲(chǔ)表的名字、列、表分區(qū)以及屬性
Hive是基于Hadoop分布式文件存儲(chǔ)的,它的數(shù)據(jù)存儲(chǔ)在HDFS中?,F(xiàn)在我們介紹Hive中常見的數(shù)據(jù)導(dǎo)入方式
- 本地文件系統(tǒng)中導(dǎo)入數(shù)據(jù)到Hive
- 從HDFS上導(dǎo)入數(shù)據(jù)到Hive表
- 從其他表中查詢出相應(yīng)的數(shù)據(jù)并導(dǎo)入Hive表中
- 在創(chuàng)建表的時(shí)候通過(guò)從其他表中查詢出相應(yīng)的記錄并插入到所創(chuàng)建的表中
#1.演示從本地裝載數(shù)據(jù)到hive #1.1創(chuàng)建表 create table student(id string, name string) row format delimited fields terminated by '\t'; #1.2加載本地的文件到hive load data local inpath '/root/student.txt' into table default.student; #default.test 數(shù)據(jù)庫(kù).表名 也可直接表名 #2.演示加載HDFS文件到hive中 #2.1 將文件上傳到HDFS根目錄 dfs -put /root/student.txt /; #2.2加載HDFS上的數(shù)據(jù) load data inpath '/student.txt' into table test.student; #3.加載數(shù)據(jù)覆蓋表中原有的數(shù)據(jù) #3.1上傳文件到HDFS中 dfs -put /root/student.txt /; #將文件裝載到表下 文件就相當(dāng)于Windows中的剪切操作 #3.2加載數(shù)據(jù)覆蓋表中原有數(shù)據(jù) load data inpath '/student.txt' overwrite into table test.student; #4.查詢表 select * from student;
#通過(guò)查詢語(yǔ)句向表中插入數(shù)據(jù)(insert) #1.1創(chuàng)建表 create table student_par(id int,name String) row format delimited fields terminated by '\t'; #1.2通過(guò)insert插入數(shù)據(jù) insert into table student_par values(1,'zhangsan'),(2,'lisi');
架構(gòu)原理
用戶接口
CLI(command-line interface)、JDBC/ODBC(jdbc 訪問(wèn) hive)、WEBUI(瀏覽器訪問(wèn) hive)
元數(shù)據(jù)
元數(shù)據(jù)包括:表名、表所屬的數(shù)據(jù)庫(kù)(默認(rèn)是 default)、表的擁有者、列/分區(qū)字段、表的類型(是否是外部表)、表的數(shù)據(jù)所在目錄等
Hadoop
使用 HDFS 進(jìn)行存儲(chǔ),使用 MapReduce 進(jìn)行計(jì)算。
驅(qū)動(dòng)器:Driver
(1)解析器(SQL Parser):將 SQL 字符串轉(zhuǎn)換成抽象語(yǔ)法樹 AST,這一步一般都用第三方工具庫(kù)完成,比如 antlr;對(duì) AST 進(jìn)行語(yǔ)法分析,比如表是否存在、字段是否存在、SQL語(yǔ)義是否有誤。
(2)編譯器(Physical Plan):將 AST 編譯生成邏輯執(zhí)行計(jì)劃。
(3)優(yōu)化器(Query Optimizer):對(duì)邏輯執(zhí)行計(jì)劃進(jìn)行優(yōu)化。
(4)執(zhí)行器(Execution):把邏輯執(zhí)行計(jì)劃轉(zhuǎn)換成可以運(yùn)行的物理計(jì)劃。對(duì)于 Hive 來(lái)說(shuō),就是 MR/Spark。
Hive文件格式
- TextFile
這是默認(rèn)的文件格式。數(shù)據(jù)不會(huì)壓縮處理,磁盤開銷大,數(shù)據(jù)解析開銷也大。
SequenceFile
這是HadooAPI提供的一種二進(jìn)制文件支持,以二進(jìn)制的形式序列化到文件中。
- RCFile
這種格式是行列存儲(chǔ)結(jié)構(gòu)的存儲(chǔ)方式。
- ORC
Optimized Row Columnar ORC文件格式是一種Hadoop生態(tài)圈中的列式存儲(chǔ)格式。
ORC的優(yōu)勢(shì):
- 列示存儲(chǔ),有多種文件壓縮方式
- 文件是可分割的。
- 提供了多種索引
- 可以支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu) 比如Map
ORC文件格式是以二進(jìn)制方式存儲(chǔ)的,所以是不可直接讀取的。
Hive本質(zhì)
將HQL轉(zhuǎn)換成MapReduce程序。
- Hive處理的數(shù)據(jù)存儲(chǔ)在HDFS上
- Hive分析數(shù)據(jù)底層的實(shí)現(xiàn)是MapReduce
- 執(zhí)行程序運(yùn)行在Yarn上
Hive工作原理
簡(jiǎn)單來(lái)說(shuō)Hive就是一個(gè)查詢引擎。當(dāng)Hive接受到一條SQL語(yǔ)句會(huì)執(zhí)行如下操作:
- 詞法分析和語(yǔ)法分析。使用antlr將SQL語(yǔ)句解析成抽象語(yǔ)法樹
- 語(yǔ)義分析。從MetaStore中獲取元數(shù)據(jù)信息,解釋SQL語(yǔ)句中的表名、列名、數(shù)據(jù)類型
- 邏輯計(jì)劃生成。生成邏輯計(jì)劃得到算子樹
- 邏輯計(jì)劃優(yōu)化。對(duì)算子樹進(jìn)行優(yōu)化
- 物理計(jì)劃生成。將邏輯計(jì)劃生成出的MapReduce任務(wù)組成的DAG的物理計(jì)劃
- 物理計(jì)劃執(zhí)行。將DAG發(fā)送到Hadoop集群進(jìn)行執(zhí)行
- 將查詢結(jié)果返回。
Hive展現(xiàn)的MapReduce任務(wù)設(shè)計(jì)到組件有:
- 元存儲(chǔ) : 該組件存儲(chǔ)了Hive中表的信息,其中包括了表、表的分區(qū)、模式、列及其類型、表映射關(guān)系等
- 驅(qū)動(dòng) : 控制HiveQL生命周期的組件
- 查詢編輯器
- 執(zhí)行引擎
- Hive服務(wù)器
- 客戶端組件 提供命令行接口Hive CLI、Web UI、JDBC驅(qū)動(dòng)等
Hive數(shù)據(jù)類型
Hive支持兩種數(shù)據(jù)類型,一種原子數(shù)據(jù)類型、還有一種叫復(fù)雜數(shù)據(jù)類型。
基本數(shù)據(jù)類型 | ||
---|---|---|
類型 | 描述 | 示例 |
TINYINT | 1字節(jié)有符合整數(shù) | 1 |
SMALLINT | 2字節(jié)有符號(hào)整數(shù) | 1 |
INT | 4字節(jié)有符號(hào)整數(shù) | 1 |
BIGINT | 8字節(jié)有符號(hào)整數(shù) | 1 |
FLOAT | 4字節(jié)單精度浮點(diǎn)數(shù) | 1.0 |
DOUBLE | 8字節(jié)雙精度浮點(diǎn)數(shù) | 1.0 |
BOOLEAN | true/false | true |
STRING | 字符串 | “hive”,‘hive’ |
Hive類型中的String數(shù)據(jù)類型類似于MySQL中的VARCHAR。該類型是一個(gè)可變的字符串。
Hive支持?jǐn)?shù)據(jù)類型轉(zhuǎn)換,Hive是用Java編寫的,所以數(shù)據(jù)類型轉(zhuǎn)換規(guī)則遵循Java :
隱式轉(zhuǎn)換 --> 小轉(zhuǎn)大
強(qiáng)制轉(zhuǎn)換 --> 大傳小
類型 | 描述 | 示例 |
---|---|---|
ARRAY | 有序的字段。字符類型必須相同 | ARRAY(1,2) |
MAP | 無(wú)序的鍵值對(duì)。建的類型必須是原子的,值可以是任何類型。 | Map(‘a’,1,‘b’,2) |
STRUCT | 一組命名的字段。字段類型可以不同 | STRUCT(‘a’,1,1,0) |
到此這篇關(guān)于一文了解Hive是什么的文章就介紹到這了,更多相關(guān)Hive是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
git add -A 和 git add . 的區(qū)別詳解
這篇文章主要介紹了git add -A 和 git add . 的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07net-snmp靜態(tài)編譯鏈接的獲取程序及生成執(zhí)行程序詳解
這篇文章主要介紹了net-snmp靜態(tài)編譯鏈接的獲取程序及生成執(zhí)行程序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08完全卸載VSCode--解決卸載重新安裝后還有原來(lái)配置的問(wèn)題(圖解)
這篇文章主要介紹了完全卸載VSCode--解決卸載重新安裝后還有原來(lái)配置的問(wèn)題,本文給大家分享VSCode卸載不徹底的問(wèn)題,需要的朋友可以參考下2020-04-04使用sublime Text3過(guò)程中的各種問(wèn)題的解決
本文主要介紹了使用sublime Text3過(guò)程中的各種問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01關(guān)于圖片存儲(chǔ)格式的整理(BMP格式介紹)
BMP文件的圖像深度可選lbit、4bit、8bit及24bit。BMP文件存儲(chǔ)數(shù)據(jù)時(shí),圖像的掃描方式是按從左到右、從下到上的順序。由于BMP文件格式是Windows環(huán)境中交換與圖有關(guān)的數(shù)據(jù)的一種標(biāo)準(zhǔn),因此在Windows環(huán)境中運(yùn)行的圖形圖像軟件都支持BMP圖像格式2016-01-01Visual Studio和Visual Studio Code之間有什么區(qū)別
本文給大家介紹的是Visual Studio和Visual Studio Code之間有什么區(qū)別,希望對(duì)大家的學(xué)習(xí)能夠有所幫助2020-02-02