Hive已為Hadoop帶來實時查詢機制
譯文【51CTO外電頭條】Apache Hive是一款以Hadoop為基礎打造而成的工具,其專長在于利用類SQL語法對大規模非結構化數據集進行分析,從而幫助現有商務智能及企業分析研究人員對Hadoop內容進行訪問。作為由Facebook工程師們開發、受到Apache基金會認可并貢獻的開源項目,Hive目前已經在商用環境下的大數據分析領域取得了領先地位。
與Hadoop生態系統中的其它組成部分一樣,Hive的發展速度同樣非常迅猛。在今天的評測文章中,我們將以0.13為目標——該版本解決了其它前續版本中的一些缺陷。0.13版本還顯著提升了類SQL查詢在多個大規模Hadoop集群之間的處理速度,并針對前續版本中的交互查詢機制添加了多項全新功能。
相比之下,Hive數據存儲機制將大量非結構化數據整合到了一起——其中包括日志文件、客戶推文、電子郵件信息、地理數據以及CRM交互等——并將它們以非結構化格式保存在成本低廉的商用硬件之上。Hive允許分析師們以這些數據為基礎構建類似于數據庫的項目結構,引入與傳統表、列以及行相仿的機制并針對其編寫類SQL查詢。這意味著用戶完全可以根據查詢特性在同一套數據集之上采用不同類型的處理規劃,從而透過收集到的數據找出關鍵性運營問題的確切答案。
過去,Hive查詢一直存在比較嚴重的延遲狀況,即使是涉及數據量不大的小型查詢也需要耗費相當長的一段時間——這是因為查詢需要首先被轉化為映射-歸約作業,而后才能提交給集群并以批量方式得到執行。這種延遲一般不至于造成什么問題,因為早在查詢規劃與映射-歸約機制起效之前、查詢本身就會對整個處理周期的時耗作出預判——至少在運行Hive設計思路所指向的大規模數據集時是如此。
不過用戶們很快發現,這類運行周期過長的查詢流程在多用戶環境下會造成嚴重的不便甚至麻煩,因為在這種狀況下單一作業有可能成為整體集群的首要完成目標。
***,盡管HiveQL查詢語言以SQL-92為基礎,但它仍然與SQL之間存在一系列重大差別——原因很簡單,前者運行在Hadoop基礎之上。舉例來說,DDL(即數據定義語言)命令需要考慮到表中現有多用戶文件系統能夠支持多種存儲格式這一客觀現實。不過總體而言,SQL用戶在使用HiveQL語言時能夠獲得理想的熟悉之感,而且在適應過程中應該不會遇到任何障礙。
Hive平臺架構示意圖。
通過Mac及Windows系統下的JDBC以及ODBC驅動程序,數據工作人員們可以將自己喜愛的SQL客戶端與Hive相對接,從而對表進行瀏覽、查詢以及創建。對于資深用戶而言,Hive也提供原始的胖客戶端CLI、能夠與Hive驅動程序直接交互。這套客戶端最為強大且要求與Hadoop直接對接,因此特別適合處理本地網絡執行事務——防火墻、DNS以及網絡拓樸結構都將不是問題。
Hive元存儲機制HCatalog原本曾經作為獨立的Hadoop項目存在,如今則成為Hive發行版當中的組成部分。在其自有關系型數據庫的支持之下,HCatalog能夠免去在Hive當中定義規劃的步驟、簡化新查詢同時使此類規劃能夠為Hadoop工具鏈中的其它工具——例如Pig——所用。
#p#
Hive上手指南
正如前面所提到,Hive使用的是名為HiveQL的簡化版類SQL語言,其支持數據定義與操作語句。任何一位SQL用戶都能在使用Hive時擁有熟悉的使用體驗。HiveQL在設計思路上盡量簡化了由SQL向其過渡的過程,并能夠直接讓數據分析機制建立并運行在Hadoop之上。
大多數商務智能與SQL開發者工具都能輕松與Hive對接,正如與其它任何數據庫相對接一樣。在ODBC連接機制的輔助下,用戶可以將導入數據并利用PowerPivot for Excel等工具探索并分析數據,進而幫助企業了解到蘊藏在大數據當中的寶貴價值。
HiveQL與標準SQL之間也存在著多項顯著區別。Hive 0.13在設計思路上需要利用YARN以及Tez架構對PB級別的數據集進行全表掃描,因此關系型數據庫當中的一部分常見功能在Hive當中已經不復存在。缺乏的特性包括事務處理、光標、編報表、行級更新與刪除以及對運行中的查詢加以撤銷等等。
雖然這些功能的缺失不會對數據分析產生影響,但卻有可能影響到我們在Hive集群上對現有SQL查詢加以使用的能力。查詢命令的編寫方式可能與其它支持完整SQL語言的引擎有所區別,但經驗豐富的傳統數據庫用戶應該不至于在編寫Hive查詢時遇到阻礙。很多傳統SQL編輯環境現在已經可以通過連接機制支持Hive,而Hive表也能夠利用多數SQL編輯器實現訪問,其中包括甲骨文及微軟推出的相關工具。
數據庫用戶在使用Hive時面臨的主要差異在于對存儲細節的識別層面。在傳統數據庫環境當中,數據庫引擎控制著指向數據庫的全部讀取與寫入操作。但在Hive方面,數據庫表以文件形式被保存在Hadoop分布式文件系統(簡稱HDFS)當中,而其它應用程序也可以對其加以修改。不過這在某種意義上也算是好事,這意味著Hive會強制要求數據與現有規劃的讀取機制相匹配,也就是說Hive會針對讀取操作對規劃加以修改。如果底層數據格式發生變化,Hive將盡力彌合這種差異,但用戶也可能因此面對意料之外的調整結果。
Hive用戶必須了解數據存儲的兩大要素:文件格式與壓縮機制。經過調整的Hive查詢能夠對數據庫表中的數字、類以及文件作出優化,從而讓底層映射-歸約作業以更富效率的方式執行。Hive以文本作為默認存儲格式,其優勢在于能夠更輕松地為其它工具所使用。不過作為弊端,我們很難在查詢中對于原始文本文件作出優化。
Hive能夠讀取并寫入多種文件格式,并在運行過程中對相關內容進行壓縮。不同的文件格式可能給存儲要求與查詢效率帶來巨大影響,大家可以通過以下圖表進一步加以了解(由Hortonworks提供)。文件格式屬于Hadoop社區的一大研究重點。高效的文件格式既能夠降低存儲成本,也可以提高查詢效率。
HDFS上的文件格式與文件大小。(圖表由Hortonworks提供)
大規模數據集的處理流程往往需要分為幾步進行,而HiveQL當中包含多種語言結構、用于指定ETL流程。通常情況下,根據具體問題的實際要求,一項作業通常需要保存臨時表,而將TB級別的數據移動至HDFS當中顯然不切實際。Hive提供三種UDF(即用戶定義函數),能夠在查詢當中被用于完成處理流程定制。由于它們作為Hive查詢的組成部分運行而且能夠與數據直接對接,因此其執行效率更高且能夠消除流程內的中間步驟。UDF必須利用Java語言來編寫,因此SQL程序員們可能會面臨一些難題——不過Hive工具包的出現在一定程度上消除了此類障礙。如果沒有這三種UDF,特定類型的問題將變得更難于解決。
Hive查詢性能
Hive 0.13屬于毒刺項目(即技術社區為改進Hive性能所構建的項目)的***一部分,而且很明顯相關努力收到了不錯的成效。我在0.11到0.13版本當中對多項速度參數進行了測試,并實際感受到了版本提升給處理效率帶來的改善。其中最引人注目的特性是0.13版本在全新Tez執行框架上運行查詢的能力。
在我的測試當中,我發現在引入Tez之后、查詢次數與原先相比縮減了一半,而且查詢時耗在緩存機制的輔助下也降低了30%。在大規模數據集方面,其速度提升效果變得更為顯著。使用在0.11版本中引入的ORC(即優化行列)文件格式時,查詢次數降低了約15%。微軟專為Hive 0.13打造的Vectorization則進一步將速度提高約10%。0.13版本中的另一項新功能——基于成本的查詢優化機制——也能夠實現20%效率改進。
需要指出的是,這些測試全部運行在我自己的筆記本設備上、處理對象為小型數據集、使用臨時性查詢,因此其結果可能無法準確反映Hive 0.13在真實使用環境下的性能水平。很明顯,性能調整工具包中的每一項功能特性都具備顯著的價值,其在大規模查詢作業中將發揮重要的實際作用。
未來幾年中,需要收集并加以分析的數據總量當然不可能有所減少。而企業級數據倉庫業務中最常用的度量單位——每TB成本——也只會變得更加重要。雖然這種衡量指標易于計算也方便理解,但與大多數簡便指標一樣、它也會讓買家對整體架構的復雜性缺乏足夠的理解。無論如何,幾乎所有從業人士都認為Hive的數據存儲成本要遠低于傳統數據倉庫方案——只相當于后者的1%甚至更低。
傳統數據倉庫方案的用戶們應該認真評估利用Hadoop進行非結構化分析數據存儲的可能性,并考慮能否將其引入數據倉庫體系。在Hive的幫助下,我們有能力執行PB級別查詢,從而定義并簡化數據內容并為日后引入數據倉庫分析作好準備。Hadoop與Hive也可以在逆向場景中發揮作用:將原本需要保存在數據倉庫中的匯總數據分離出來,從而顯著降低存儲成本。***,Hive能夠對非結構化數據進行實驗性分析,并在確認其實際價值后再將內容保存在數據倉庫當中。
尚未部署數據倉庫方案的企業或者技術部門也可以將Hive作為起點,從而在感受數據分析價值的同時將前期投入成本控制在***程度。雖然Hive并不能提供一套完整的數據倉庫解決方案,但它確實帶來一套具備多種分析工具的優秀、低成本、大規模、可操作型數據存儲機制。如果分析師們對于Hive的表現感到滿意,那么眾多傳統數據倉庫供應商也將提供相關連接機制與工具、保證用戶可以將數據引入數據倉庫當中以保護原有資產投入。
在實際運營層面,以數據與分析為基礎制定出準確決策的企業將擁有顯著的競爭優勢。Hive在查詢流程方面提供近線性可擴展能力,且擁有比傳統企業級數據倉庫高出一個量級的卓越性能與性價比,此外其入門門檻也比后者低得多。目前10TB級別的企業數據倉庫解決方案大約需要100萬美元啟動費用,相比之下善于管理大規模非結構化數據集的Hive可謂潛力無限。
原文鏈接:
http://www.infoworld.com/d/big-data/review-apache-hive-brings-real-time-queries-hadoop-246607