餘老師帶你學習大數據-Spark快速大數據處理第五章第一節​Hive總體介紹

Hive是什麼

在這裏插入圖片描述Hive是大數據倉庫的基本組件。右側是用java寫的MapReduce的Wordcount例子,使用SQL語句去實現數據的查詢、數據的分析。左側是SQL語句實現Wordcount,首先將每一行切開根據每一個單詞Space,從file中hdfs文件,然後根據Word進行排列,這都是map形式,最後再計算每個Word的總量,根據Word進行Order。下方是將上方的語句分解爲兩個部分,將子查詢單獨開來,門檻較低,不用寫java程序,也不需要調試。
在這裏插入圖片描述

這幅圖是Wordcount的Python版本。左側是Python的map和reduce。右側是SQL語句實現。相對於SQL語句,Python也是複雜的。
所以說,用SQL語句作爲大數據查詢分析的語言,可以有效合理而且直觀的組織和使用數據模型,以降低數據分析的門檻,這就是Hive能夠發展起來的一個動力。但是,這並不說明其他語言的編程接口沒有價值,它們所解決的層次是不一樣的。在其他的數據處理框架,比如說,Spark、Flink都有對應的SQL語句相關的一些接口。SQL語句不僅僅可以在做批處理上用還可以進入動態表理論、流上使用SQL。並說明,不是其他語言做大數據處理沒有價值,將會被SQL淘汰,因爲解決問題的層次是不一樣的,有一些問題,仍然需要java、Python這種表現力更豐富的語言去做處理。這些框架使用的語言任然是底層語言java語言來編寫的,或者理解爲用高級語言編寫的數據處理效率會更高而且相應的框架會對原生的語言(java語言)支持或者融合度會更好。

Hive基本架構

在這裏插入圖片描述Hive包括了三個部分,Hive的客戶端、Hive的服務器、數據。Hive的客戶端有三類,Thrift、JDBC、ODBC,通過客戶端連接服務器,服務器經過一系列的Driver將查詢驅動數據倉庫,數據倉庫是文件。Hive合作的事情是將在HDFS文件,一個個文件抽象成結構化數據的結構,然後用SQL語句去查詢分析這些文件的內容。比如說做MapReduce,Hive的服務器將對應的查詢SQL語言轉化爲一系列的MapReduce或者Tez以docker的形式提交給集羣比如YARN集羣去執行我們相應的數據處理程序。除了Hive Server之外,還可以通過Hive services提供的客戶端,或者Web界面的形式去操作SQL語句。體系架構裏面有個Metastore,是因爲Hive上存的都是一個個文件,文件裏是一行行數據或者一行行的記錄。爲了執行SQL語句,必須要了解數據的各式信息,所謂的元數據信息,這就是Metastore存的基本信息,它不存數據,數據存在HDFS裏,Metastore存在關係型數據庫裏。
在這裏插入圖片描述

這是詳細分析Metastore,可以有多個Metastore後端,MySQL是比較常用的,在Hive中提供了內置的Metastore,還有本地的方式也就是將MySQL部署在Hive Services所在的JVM的機器上,還支持遠程的JVM去訪問MySQL。將採用第三種方式,Hive Service不和MySQL在同一臺機器上的部署方式。
Hive可以是計算引擎,唯一接觸到數據的地方就是Metastore,存儲的也僅僅是元數據,所有帶分析的數據都存在的HDFS裏面,由HDFS保證數據安全一致性。

和傳統數據對比

Hive並不存儲數據,僅僅存儲元數據信息,數據都是以源文件的形式存儲到HDFS中。在關係數據庫中如果數據、描述丟失將很難恢復,但是在Hive中,HDFS數據沒有丟失,Metastore丟失可以通過數據去恢復Metastore相對容易。
在傳統的數據庫中,表的模式是在數據加載時強制制定的。如果在加載時,發現數據不符合模式,加載肯定失敗。Hive在查詢時進行模式檢查,在查詢的時候才檢查要查詢的文件在元數據裏面是否匹配,可以繞過Hive寫入HDFS。這兩種方法各有利弊,在Hive中是進入HDFS的,可以進行大數據量的。而傳統的關係型數據庫很難做到這一點。
性能不一樣,Hive數據模式加載時非常快的,因爲不需要檢查數據格式信息,直接寫到HDFS中。在傳統數據中寫入需要一條條的檢查,但是有另一種優勢,查詢性能是非常高的,因爲可以進行數據的索引。
傳統型數據庫是做事務處理的,Hive在做事務處理方面就不如傳統數據庫。Hive不支持更新、刪除等。

詳細學習內容可觀看Spark快速大數據處理掃一掃~~~或者引擎搜索Spark餘海峯
在這裏插入圖片描述