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