閱讀259 返回首頁    go 阿裏雲 go 技術社區[雲棲]


hive 初認識

結構
Hive 是建立在hadoop上的數據倉庫架構,它提供了一係列的工具,可以進行數據提取轉換加載(這個過程叫做ETL),這是一種可以存儲,查詢和分析存儲在hadoop中的大規模數據的機製.Hive定義了簡單的類SQL查詢語句 成為hql,他允許數據SQL的用戶查詢數據.同時 這個語言也允許數據mapreduce開發者的開發自定義mapper和reducer來處理內建的複雜的分析工作.
image

Hive的核心
hive的核心是Driver驅動引擎,驅動驅動有四部分組成:
1>解釋器:解釋器的作用是將HiveSQL語句轉換為語法樹(AST)
2>編譯器:編譯器是講語法樹編譯為邏輯執行計劃
3>優化器:優化是對邏輯執行計劃進行優化
4>執行器:執行器是調用底層的運行康佳執行邏輯執行計劃.

Hive的底層存儲
Hive的數據是存儲在HDFS上的 Hive中的庫和表可以看做是HDFS上數據做的一個映射,所以Hive必須是運行在Hadoop集群上的.

Hive程序的執行過程
hive中的執行器,試講最終要執行的MapReduce程序放在YARN上以一係列的Job的方式執行.

Hive的元數據的存儲
HIve的元數據是一般是存儲在MYSQL這種關係型數據庫上的,Hive和MYSQL之間通過MetaStore服務交互.

image

Hive客戶端
1>cli命令行客戶端:采用交互窗口.用hive命令行和Hive進行通信
2>HiveSever2客戶端:yongThrift寫進行通信,Thrift是不同語言之間的轉化器,是連接不同語言程序間的協議,通過JDBC或者ODBC去訪問Hive
3>HWI客戶端:hive自帶的一個客戶端,一般不用
4>HUE客戶端:通過Web頁麵來和Hive進行交互,使用的比較多.

Hive與HADHOOP的關係
image

Hive構建在Hadoop之上
1>HQL中對查詢語句的解析,優化,生成查詢計劃是由Hive完成的
2>所有的數據都是存儲在Hadoop中
3>查詢計劃被轉換為MapReduce任務,在Hadoop中執行(有些查詢沒MR任務,入select * from table)
4>Hadoop和Hive都是使用UTF-8編碼的

Hive和普通關係數據庫的異同
image

(1)查詢語言.有SQL被廣泛的應用在數據倉庫中.因此,專門針對Hive的特性設計了類SQL的查詢語言HQL 數據SQL開發者可以很方便的使用Hive進行開發的
(2)數據存儲位置,Hive是建立在HAdoop之上的.所以HIve的數據都是存儲在HDFS中的,而數據庫則可以將數據保存在這塊設備或者本地文件係統中
(3)數據格式.Hive中沒有定義專門的數據格式,數據格式可以有用戶指定,用戶定義數據格式需要指定三個屬性:列分隔符(通常為空格,'\t','\x001'),行分隔符以及讀取文件數據的方法(Hive中默認有三個文件格式TextFile,SequenceFile以及RCFile),由於加載數據的過程中,不需要從用戶數據格式到Hive定義的數據格式轉換,因此Hive在加載的過程中不會對數據本身進行任何的修改,而隻是將數據內容複製或者移動到相應的HDFS目錄中.而在數據庫中,不同的數據庫有不同的存儲引擎,定義了自己的數據格式,所有的數據都會按照一定的住址存儲,因此數據庫加載數據的過程會比較耗時.
(4)數據更新.由於Hive是針對數據倉庫應用設計的.而數據倉庫的內容都鐸寫少的,**因此Hive中不支持數據的改寫和添加,所有的數據都是在加載的時候中確定好的**.而數據庫中的數據通常是需要經常進行修改的,因此可以使用insert into ...values 添加數據,使用update ....set修改數據.
(5)索引,之前已經說過Hive在加載數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此也沒有對數據中的某些Key建立索引,Hive要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高,數據庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,數據庫中有很高的效率,較低的延遲,由於數據的訪問延遲較高沒界定了Hive不適合在線數據查詢.
(6)執行,Hive中的大多數查詢的執行師通過Hadoop提供的MapReduce來實現的,而數據庫通常有自己的執行引擎.
(7)執行延遲:之前提到,Hive在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高,另外一個導致Hive執行延遲較高的因素是MapReduce框架,由於MapReduce本身具有較高的延遲,因此在利用MapReduce執行Hive查詢時,也會有較高的延遲,相對的,數據庫的執行延遲較低,當然,這個是有條件的,即數據量小,如果數據量很大,則延遲會遠超過Hive
(8)可擴展性,由於Hive是建立在Hadoop之上的.因此Hive的可擴展性適合Hadoop的可擴展性是一致的,而數據庫由於ACID語句的嚴格限製,擴展性非常有限,目前先進的並行數據庫Oracle在理論上的擴展能力也隻有100台左右
(8)數據規模:由於Hive建立在集群上並行利用MapReduce進行並行計算,因此可以支持很大規模的數據,對飲的,數據庫可以支持的數據庫規模較小.

最後更新:2017-10-23 20:42:56

  上一篇:go  UC瀏覽器全免流活動正在進行
  下一篇:go  在iOS11中使用Core ML 和TensorFlow對手勢進行智能識別