您好,登錄后才能下訂單哦!
小編給大家分享一下Hive基礎知識點有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1、Hive 由 Facebook 實現并開源
2、是基于 Hadoop 的一個數據倉庫工具
3、可以將結構化的數據映射為一張數據庫表
4、并提供 HQL(Hive SQL)查詢功能
5、底層數據是存儲在 HDFS 上
6、Hive的本質是將 SQL 語句轉換為 MapReduce 任務運行
7、使不熟悉 MapReduce 的用戶很方便地利用 HQL 處理和計算 HDFS 上的結構化的數據,適用于離線的批量數據計算。
數據倉庫之父比爾·恩門(Bill Inmon)在 1991 年出版的“Building the Data Warehouse”(《建 立數據倉庫》)一書中所提出的定義被廣泛接受——數據倉庫(Data Warehouse)是一個面 向主題的(Subject Oriented)、集成的(Integrated)、相對穩定的(Non-Volatile)、反映歷史 變化(Time Variant)的數據集合,用于支持管理決策(Decision Making Support)。
Hive 依賴于 HDFS 存儲數據,Hive 將 HQL 轉換成 MapReduce 執行,所以說 Hive 是基于 Hadoop 的一個數據倉庫工具,實質就是一款基于 HDFS 的 MapReduce 計算框架,對存儲在 HDFS 中的數據進行分析和管理
直接使用 MapReduce 所面臨的問題:
1、人員學習成本太高
2、項目周期要求太短
3、MapReduce實現復雜查詢邏輯開發難度太大
為什么要使用 Hive:
1、更友好的接口:操作接口采用類 SQL 的語法,提供快速開發的能力
2、更低的學習成本:避免了寫 MapReduce,減少開發人員的學習成本
3、更好的擴展性:可自由擴展集群規模而無需重啟服務,還支持用戶自定義函數
優點:
1、可擴展性,橫向擴展,Hive 可以自由的擴展集群的規模,一般情況下不需要重啟服務 橫向擴展:通過分擔壓力的方式擴展集群的規模 縱向擴展:一臺服務器cpu i7-6700k 4核心8線程,8核心16線程,內存64G => 128G
2、延展性,Hive 支持自定義函數,用戶可以根據自己的需求來實現自己的函數
3、良好的容錯性,可以保障即使有節點出現問題,SQL 語句仍可完成執行
缺點:
1、Hive 不支持記錄級別的增刪改操作,但是用戶可以通過查詢生成新表或者將查詢結 果導入到文件中(當前選擇的 hive-2.3.2 的版本支持記錄級別的插入操作)
2、Hive 的查詢延時很嚴重,因為 MapReduce Job 的啟動過程消耗很長時間,所以不能 用在交互查詢系統中。
3、Hive 不支持事務(因為不沒有增刪改,所以主要用來做 OLAP(聯機分析處理),而 不是 OLTP(聯機事務處理),這就是數據處理的兩大級別)。
總結:
Hive 具有 SQL 數據庫的外表,但應用場景完全不同,Hive 只適合用來做海量離線數 據統計分析,也就是數據倉庫。
從上圖看出hive的內部架構由四部分組成:
CLI,Shell 終端命令行(Command Line Interface),采用交互形式使用 Hive 命令行與 Hive 進行交互,最常用(學習,調試,生產)
JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客戶端,用戶(開發員,運維人員)通過 這連接至 Hive server 服務
Web UI,通過瀏覽器訪問 Hive
Thrift 是 Facebook 開發的一個軟件框架,可以用來進行可擴展且跨語言的服務的開發, Hive 集成了該服務,能讓不同的編程語言調用 Hive 的接口
Driver 組件完成 HQL 查詢語句從詞法分析,語法分析,編譯,優化,以及生成邏輯執行 計劃的生成。生成的邏輯執行計劃存儲在 HDFS 中,并隨后由 MapReduce 調用執行
Hive 的核心是驅動引擎, 驅動引擎由四部分組成:
(1) 解釋器:解釋器的作用是將 HiveSQL 語句轉換為抽象語法樹(AST)
(2) 編譯器:編譯器是將語法樹編譯為邏輯執行計劃
(3) 優化器:優化器是對邏輯執行計劃進行優化
(4) 執行器:執行器是調用底層的運行框架執行邏輯執行計劃
元數據,通俗的講,就是存儲在 Hive 中的數據的描述信息。
Hive 中的元數據通常包括:表的名字,表的列和分區及其屬性,表的屬性(內部表和 外部表),表的數據所在目錄
Metastore 默認存在自帶的 Derby 數據庫中。缺點就是不適合多用戶操作,并且數據存 儲目錄不固定。數據庫跟著 Hive 走,極度不方便管理
解決方案:通常存我們自己創建的 MySQL 庫(本地 或 遠程)
Hive 和 MySQL 之間通過 MetaStore 服務交互
HiveQL 通過命令行或者客戶端提交,經過 Compiler 編譯器,運用 MetaStore 中的元數 據進行類型檢測和語法分析,生成一個邏輯方案(Logical Plan),然后通過的優化處理,產生 一個 MapReduce 任務。
1、Hive 的存儲結構包括數據庫、表、視圖、分區和表數據等。數據庫,表,分區等等都對 應 HDFS 上的一個目錄。表數據對應 HDFS 對應目錄下的文件。
2、Hive 中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式,因為 Hive 是讀模式 (Schema On Read),可支持 TextFile,SequenceFile,RCFile 或者自定義格式等
3、 只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據
Hive 的默認列分隔符:控制符 Ctrl + A,\x01 Hive 的
Hive 的默認行分隔符:換行符 \n
4、Hive 中包含以下數據模型:
database:在 HDFS 中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾
table:在 HDFS 中表現所屬 database 目錄下一個文件夾
external table:與 table 類似,不過其數據存放位置可以指定任意 HDFS 目錄路徑
partition:在 HDFS 中表現為 table 目錄下的子目錄
bucket:在 HDFS 中表現為同一個表目錄或者分區目錄下根據某個字段的值進行 hash 散 列之后的多個文件
view:與傳統數據庫類似,只讀,基于基本表創建
5、Hive 的元數據存儲在 RDBMS 中,除元數據外的其它所有數據都基于 HDFS 存儲。默認情 況下,Hive 元數據保存在內嵌的 Derby 數據庫中,只能允許一個會話連接,只適合簡單的 測試。實際生產環境中不適用,為了支持多用戶會話,則需要一個獨立的元數據庫,使用 MySQL 作為元數據庫,Hive 內部對 MySQL 提供了很好的支持。
6、Hive 中的表分為內部表、外部表、分區表和 Bucket 表
內部表和外部表的區別:
刪除內部表,刪除表元數據和數據
刪除外部表,刪除元數據,不刪除數據
內部表和外部表的使用選擇:
大多數情況,他們的區別不明顯,如果數據的所有處理都在 Hive 中進行,那么傾向于 選擇內部表,但是如果 Hive 和其他工具要針對相同的數據集進行處理,外部表更合適。
使用外部表訪問存儲在 HDFS 上的初始數據,然后通過 Hive 轉換數據并存到內部表中
使用外部表的場景是針對一個數據集有多個不同的 Schema
通過外部表和內部表的區別和使用選擇的對比可以看出來,hive 其實僅僅只是對存儲在 HDFS 上的數據提供了一種新的抽象。而不是管理存儲在 HDFS 上的數據。所以不管創建內部 表還是外部表,都可以對 hive 表的數據存儲目錄中的數據進行增刪操作。
分區表和分桶表的區別:
Hive 數據表可以根據某些字段進行分區操作,細化數據管理,可以讓部分查詢更快。同 時表和分區也可以進一步被劃分為 Buckets,分桶表的原理和 MapReduce 編程中的 HashPartitioner 的原理類似。
分區和分桶都是細化數據管理,但是分區表是手動添加區分,由于 Hive 是讀模式,所 以對添加進分區的數據不做模式校驗,分桶表中的數據是按照某些分桶字段進行 hash 散列 形成的多個文件,所以數據的準確性也高很多
以上是“Hive基礎知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。