Hive 是基于 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,并提供類 SQL 查詢功能,對Hive是什么及優缺點感興趣的朋友跟隨小編一起看看吧。
一、Hive介紹
hive: 由 Facebook 開源用于解決海量結構化日志的數據統計工具。文章源自四五設計網-http://www.wasochina.com/40019.html
Hive 是基于 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,并提供類 SQL 查詢功能。文章源自四五設計網-http://www.wasochina.com/40019.html
Hive的優缺點
優點:文章源自四五設計網-http://www.wasochina.com/40019.html
- 類似于SQL語句,簡單學習易上手
- 避免了去寫 MapReduce,減少開發人員的學習成本
- Hive 的執行延遲比較高,因此 Hive 常用于數據分析,對實時性要求不高的場合
- Hive 優勢在于處理大數據,對于處理小數據沒有優勢,因為 Hive 的執行延遲比較高
- Hive 支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數
缺點:文章源自四五設計網-http://www.wasochina.com/40019.html
- Hive 的 HQL 表達能力有限
- Hive 的效率比較低
- Hive本質是一個MR
Hive架構
Hive用戶接口
- Hive CLI(Hive Command Line) Hive的命令行
- HWI(Hive Web Interface) HiveWeb接口
- Hive提供了Thrift服務,也就是Hiveserver。
Hive元數據的三種存儲模式
- 單用戶模式 : Hive安裝時,默認使用的是Derby數據庫存儲元數據,這樣不能并發調用Hive。
- 多用戶模式 : MySQL服務器存儲元數據
- 遠程服務器模式 : 啟動MetaStoreServer
Hive數據存儲
Hive數據可區分為表數據和元數據,表數據我們都知道是表中的數據,而元數據是用來存儲表的名字、列、表分區以及屬性文章源自四五設計網-http://www.wasochina.com/40019.html
Hive是基于Hadoop分布式文件存儲的,它的數據存儲在HDFS中。現在我們介紹Hive中常見的數據導入方式文章源自四五設計網-http://www.wasochina.com/40019.html
- 本地文件系統中導入數據到Hive
- 從HDFS上導入數據到Hive表
- 從其他表中查詢出相應的數據并導入Hive表中
- 在創建表的時候通過從其他表中查詢出相應的記錄并插入到所創建的表中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #1.演示從本地裝載數據到hive #1.1創建表 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 數據庫.表名 也可直接表名 #2.演示加載HDFS文件到hive中 #2.1 將文件上傳到HDFS根目錄 dfs -put /root/student.txt /; #2.2加載HDFS上的數據 load data inpath '/student.txt' into table test.student; #3.加載數據覆蓋表中原有的數據 #3.1上傳文件到HDFS中 dfs -put /root/student.txt /;? #將文件裝載到表下 文件就相當于Windows中的剪切操作 #3.2加載數據覆蓋表中原有數據 load data inpath '/student.txt' overwrite into table test.student; #4.查詢表 select * from student; |
1 2 3 4 5 6 | #通過查詢語句向表中插入數據( insert ) #1.1創建表 create table student_par(id int , name String) row format delimited fields terminated by '\t' ; #1.2通過 insert 插入數據 insert into table student_par values (1, 'zhangsan' ),(2, 'lisi' ); |
架構原理
用戶接口文章源自四五設計網-http://www.wasochina.com/40019.html
CLI(command-line interface)、JDBC/ODBC(jdbc 訪問 hive)、WEBUI(瀏覽器訪問 hive)文章源自四五設計網-http://www.wasochina.com/40019.html
元數據文章源自四五設計網-http://www.wasochina.com/40019.html
元數據包括:表名、表所屬的數據庫(默認是 default)、表的擁有者、列/分區字段、表的類型(是否是外部表)、表的數據所在目錄等文章源自四五設計網-http://www.wasochina.com/40019.html
Hadoop
使用 HDFS 進行存儲,使用 MapReduce 進行計算。
驅動器:Driver
(1)解析器(SQL Parser):將 SQL 字符串轉換成抽象語法樹 AST,這一步一般都用第三方工具庫完成,比如 antlr;對 AST 進行語法分析,比如表是否存在、字段是否存在、SQL語義是否有誤。
(2)編譯器(Physical Plan):將 AST 編譯生成邏輯執行計劃。
(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。
(4)執行器(Execution):把邏輯執行計劃轉換成可以運行的物理計劃。對于 Hive 來說,就是 MR/Spark。
Hive文件格式
- TextFile
這是默認的文件格式。數據不會壓縮處理,磁盤開銷大,數據解析開銷也大。
SequenceFile
這是HadooAPI提供的一種二進制文件支持,以二進制的形式序列化到文件中。
- RCFile
這種格式是行列存儲結構的存儲方式。
- ORC
Optimized Row Columnar ORC文件格式是一種Hadoop生態圈中的列式存儲格式。
ORC的優勢:
- 列示存儲,有多種文件壓縮方式
- 文件是可分割的。
- 提供了多種索引
- 可以支持復雜的數據結構 比如Map
ORC文件格式是以二進制方式存儲的,所以是不可直接讀取的。
Hive本質
將HQL轉換成MapReduce程序。
- Hive處理的數據存儲在HDFS上
- Hive分析數據底層的實現是MapReduce
- 執行程序運行在Yarn上
Hive工作原理
簡單來說Hive就是一個查詢引擎。當Hive接受到一條SQL語句會執行如下操作:
- 詞法分析和語法分析。使用antlr將SQL語句解析成抽象語法樹
- 語義分析。從MetaStore中獲取元數據信息,解釋SQL語句中的表名、列名、數據類型
- 邏輯計劃生成。生成邏輯計劃得到算子樹
- 邏輯計劃優化。對算子樹進行優化
- 物理計劃生成。將邏輯計劃生成出的MapReduce任務組成的DAG的物理計劃
- 物理計劃執行。將DAG發送到Hadoop集群進行執行
- 將查詢結果返回。
Hive展現的MapReduce任務設計到組件有:
- 元存儲 : 該組件存儲了Hive中表的信息,其中包括了表、表的分區、模式、列及其類型、表映射關系等
- 驅動 : 控制HiveQL生命周期的組件
- 查詢編輯器
- 執行引擎
- Hive服務器
- 客戶端組件 提供命令行接口Hive CLI、Web UI、JDBC驅動等
Hive數據類型
Hive支持兩種數據類型,一種原子數據類型、還有一種叫復雜數據類型。
基本數據類型 | ||
---|---|---|
類型 | 描述 | 示例 |
TINYINT | 1字節有符合整數 | 1 |
SMALLINT | 2字節有符號整數 | 1 |
INT | 4字節有符號整數 | 1 |
BIGINT | 8字節有符號整數 | 1 |
FLOAT | 4字節單精度浮點數 | 1.0 |
DOUBLE | 8字節雙精度浮點數 | 1.0 |
BOOLEAN | true/false | true |
STRING | 字符串 | “hive”,‘hive’ |
Hive類型中的String數據類型類似于MySQL中的VARCHAR。該類型是一個可變的字符串。
Hive支持數據類型轉換,Hive是用Java編寫的,所以數據類型轉換規則遵循Java :
隱式轉換 --> 小轉大
強制轉換 --> 大傳小
類型 | 描述 | 示例 |
---|---|---|
ARRAY | 有序的字段。字符類型必須相同 | ARRAY(1,2) |
MAP | 無序的鍵值對。建的類型必須是原子的,值可以是任何類型。 | Map(‘a’,1,‘b’,2) |
STRUCT | 一組命名的字段。字段類型可以不同 | STRUCT(‘a’,1,1,0) |
到此這篇關于一文了解Hive是什么的文章就介紹到這了


評論