1. 程式人生 > >Hadoop(5)--hive

Hadoop(5)--hive

asto ges -h alt dbms sql語句 元數據 reduce report

在Hadoop的存儲處理方面提供了兩種不同的機制,一種是之前介紹過的Hbase,另外一種就是Hive,有關於Hbase,它是一種nosql數據庫的一種,是一種數據庫,基於分布式的列式存儲,適合海量數據的操作,,底層依賴HDFS,與rdbms的區別和其他的nosql基本類似,例如不支持sql語句對於數據進行操作,具體的關於Hbase的細節可以去參考我的上一篇博客,今天我們會通過hive和Hbase的區別對於hive進行相應的講解。
Hive 在其官方網站上的定義說hive是一個數據倉庫(數據倉庫中存儲數量級大且數據結構復雜的數據,是多個其他數據庫的集合)的軟件,通過sql的方式幫助用戶讀寫管理分布式存儲中的數據,展開來說:Apache Hive是一個建立在Hadoop上的數據倉庫基礎架構,它可以使用類似於sql語句的Hql對於存儲在HDFS上的數據進行相應的操作,可以轉化為MapReduce作業,但是,雖然相比於Hbase,hive提供了大家所熟悉的sql的功能,但是,對於一般sql的交互式查詢還是沒有被支持,Hive實際上就是只在Hadoop上運行批處理,而HBase操作的是數據庫而不是在mapreduce上實時運行
Hive可以做什麽:
1、ETL(把多個關系型數據庫存儲到數據倉庫中的數據遷移過程就是ETL(flume/sqoop),包括數據的抽取,轉化,落地,加載等操作)、reporting、數據分析
2、可以把多種數據進行格式化或者結構化管理的工具
3、可以更加簡潔的訪問HDFS或者Hbase
4、可以直接通過sql直接使用訪問Mapreduce等框架
Hive的組件
1、服務端組件:
Driver組件:包括編譯器、優化器、執行器,將我們寫的HQL進行解析,便宜又話,生成執行計劃,然後調用底層的計算框架
Metastore組件:元數據服務組件,負責存儲hive的元數據,存儲在關系型數據庫中
Thrift服務:用來進行可擴展且跨語言的開發服務
Hive集成服務:能讓不同的開發語言調用hive接口

2、客戶端組件:
CLI:命令行接口,可以使用命令操作查看
Thrift客戶端:hive的許多客戶端接口是建立在thrift客戶端的基礎之上的,包括JDBC等
WEB UI :可以在瀏覽器中訪問hive提供的服務接口
優點及使用場景
操作接口采用類SQL語法,提供快速開發的能力(簡單、容易上手);
避免了去寫MapReduce,減少開發人員的學習成本,可以直接寫sql進行操作;
統一的元數據管理,可與impala/spark等共享元數據;
易擴展(HDFS+MapReduce:可以擴展集群規模;支持自定義函數);
數據的離線處理;比如:日誌分析,海量結構化數據離線分析…

Hive的執行延遲比較高,因此hive常用於數據分析的,對實時性要求 不高的場合;
Hive優勢在於處理大數據,對於處理小數據沒有優勢,因為Hive的執 行延遲比較高。
而對於Hive的執行流程,我借用某大神的一句神總結:將用戶提交的SQL語句轉換成Hadoop上的MR任務執行,並向用戶返回結果。(Sql傳入之後會提交到編譯器中,編譯器分析sql,然後去元數據中查數據的位置以及查看sql要進行什麽操作,然後轉化成mapreduce程序(執行計劃),吧執行計劃交給執行器,然後執行器開始執行並將結果進行返回到客戶端,而優化器的作用就是對整個計算過程進行優化,比如在數據量特別小的時候就直接在內存中申請處理)

如需更多的交流可以添加qq群859121793
或添加微信群:技術分享圖片

Hadoop(5)--hive