左譜軍,朱曉民
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室,北京 100876;2 東信北郵信息技術(shù)有限公司,北京 100191)
基于Hive的數(shù)據(jù)管理圖形化界面的設(shè)計與實現(xiàn)
左譜軍1,2,朱曉民1,2
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室,北京 100876;2 東信北郵信息技術(shù)有限公司,北京 100191)
本文提出了一種對Hive進(jìn)行圖形化界面管理的設(shè)計方案,實現(xiàn)了用戶對Hive數(shù)據(jù)倉庫的數(shù)據(jù)表管理,數(shù)據(jù)查看檢索,以及用戶對數(shù)據(jù)庫的權(quán)限管理等功能,使用戶可以友好的訪問屬于自己權(quán)限Hive數(shù)據(jù)內(nèi)容。
Hive;圖形化界面;數(shù)據(jù)管理
為了處理海量的原始數(shù)據(jù),很多大型數(shù)據(jù)倉庫開發(fā)者和程序員在過去5年內(nèi)實現(xiàn)了數(shù)以百計的、專用計算方法。這些計算方法可實現(xiàn)類似網(wǎng)絡(luò)爬蟲程序的文檔抓取,Web請求日志處理等操作;也可處理各種類型的衍生數(shù)據(jù)。上述大多數(shù)數(shù)據(jù)處理運算由于輸入的數(shù)據(jù)量巨大,想在可接受的時間內(nèi)完成運算,現(xiàn)行條件下的單臺機器無法滿足要求,需要采取分布處理技術(shù),亦即將這些計算分布在成百上千的主機上完成。
針對大規(guī)模和超大規(guī)模數(shù)據(jù)的分布式計算處理技術(shù)成為倍受關(guān)注的工程研究課題。工程研發(fā)界普遍關(guān)注在互聯(lián)網(wǎng)領(lǐng)域得以廣泛應(yīng)用的Hadoop技術(shù),Hadoop是一個分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會開發(fā),其主要子項目包含HDFS和MapReduce,HDFS是Hadoop的分布式文件系統(tǒng),而MapReduce是Hadoop分布式計算框架[1]。
分布式數(shù)據(jù)存儲倉庫Hive是基于Hadoop的一種數(shù)據(jù)倉庫基礎(chǔ)框架。因此在功能上有些不同于傳統(tǒng)意義上的Orical和Mysql數(shù)據(jù)庫,不支持隨機插入記錄和刪除記錄的操作。它能提供應(yīng)用工具來支持?jǐn)?shù)據(jù)提取,轉(zhuǎn)化和加載(ETL),可用來查詢,存儲和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)集。使用簡單的類SQL語言,稱為HQL(Hive Query Language,Hive查詢語言)。
Hadoop兩個基礎(chǔ)構(gòu)架HDFS(Hadoop Distributed File System,Hadoop分布式文件系統(tǒng))和MapReduce同樣是Hive架構(gòu)的根基。如圖1所示,Hive架構(gòu)包括如下組件: CLI(Command Line Interface,命令行接口)、JDBC/ODBC、Thrift Server、Hive Web Interface、Metastore和Driver(Complier、Optimizer和Executor),這些組件按照功能來分可以分為兩大類:服務(wù)端組件和客戶端組件。
圖1[2][3]Hive系統(tǒng)框架圖
1.1 服務(wù)端組件
(1)Driver組件:該組件包括Complier、Optimizer和Executor,它的作用是將HQL(類SQL)語句進(jìn)行解析、編譯優(yōu)化,生成執(zhí)行計劃,然后調(diào)用底層的MapReduce計算框架。
(2)Metastore組件:元數(shù)據(jù)服務(wù)組件,所謂元數(shù)據(jù),指的是Hive數(shù)據(jù)庫或者數(shù)據(jù)表的屬性信息,包括表結(jié)構(gòu),表名以及字段名等等信息。Metastore這個組件用來管理Hive的元數(shù)據(jù),Hive的元數(shù)據(jù)信息持久化在關(guān)系數(shù)據(jù)庫里,目前最新版本Hive-0.12.0支持的關(guān)系數(shù)據(jù)庫有Derby、Mysql。元數(shù)據(jù)對于Hive十分重要,因此Hive支持把Metastore服務(wù)獨立出來,安裝到遠(yuǎn)程的服務(wù)器集群里,這樣一來可以解耦Hive服務(wù)和Metastore服務(wù),保證Hive運行的健壯性。
為了能夠存儲和管理Hive的元數(shù)據(jù),從結(jié)構(gòu)上說,Metastore組件包括兩個部分:Metastore服務(wù)和后臺數(shù)據(jù)的存儲。后臺數(shù)據(jù)存儲的介質(zhì)就是關(guān)系數(shù)據(jù)庫,用例如Hive默認(rèn)的嵌入式磁盤數(shù)據(jù)庫Derby,還有Mysql數(shù)據(jù)庫。Metastore服務(wù)是建立在后臺數(shù)據(jù)存儲介質(zhì)之上,并且可以和Hive服務(wù)進(jìn)行交互的服務(wù)組件,默認(rèn)情況下,Metastore服務(wù)和Hive服務(wù)安裝在一起,運行在同一個進(jìn)程當(dāng)中。也可以把Metastore服務(wù)從Hive服務(wù)里剝離出來,Metastore獨立安裝在一個集群里,Hive遠(yuǎn)程調(diào)用Metastore服務(wù),這樣可以把元數(shù)據(jù)這一層放到防火墻之后,客戶端訪問Hive服務(wù),就可以連接到元數(shù)據(jù)這一層,從而提供了更好的管理性和安全保障。使用遠(yuǎn)程的Metastore服務(wù),可以讓Metastore服務(wù)和Hive服務(wù)運行在不同的進(jìn)程里,這樣也保證了Hive的穩(wěn)定性,提升了Hive服務(wù)的效率。(3)Thrift服務(wù):Thrift是Facebook開發(fā)的一個軟件框架,它用來進(jìn)行可擴展且跨語言的服務(wù)的開發(fā),Hive集成了該服務(wù),能讓不同的編程語言調(diào)用Hive的接口。
1.2 客戶端組件
(1)CLI:Command Line Interface,命令行接口,用于操作Hive數(shù)據(jù)庫和數(shù)據(jù)表。
(2)Thrift客戶端:上面的架構(gòu)圖里沒有寫上Thrift客戶端,但是Hive架構(gòu)的許多客戶端接口是建立在Thrift客戶端之上,包括JDBC和ODBC接口。
(3)WEBGUI:Hive客戶端提供了一種通過網(wǎng)頁的方式訪問Hive所提供的服務(wù)。這個接口對應(yīng)Hive的hwi組件(Hive web interface),使用前要啟動hwi服務(wù)。
本文致力于開發(fā)一個基于Hive的數(shù)據(jù)管理圖形化界面,底層以Hadoop和Hive平臺為依托,針對輕技術(shù)人員,即普通的業(yè)務(wù)人員,使其可通過該平臺實現(xiàn)數(shù)據(jù)管理。系統(tǒng)架構(gòu)可以分成3個層次,如圖2所示。
2.1 客戶端
客戶端實現(xiàn)的是對于數(shù)據(jù)表的基本操作,包含數(shù)據(jù)表的操作、數(shù)據(jù)庫的操作以及數(shù)據(jù)展示,將客戶端操作轉(zhuǎn)化為相應(yīng)的指令,提交到服務(wù)端執(zhí)行。
圖2 基于Hive操作的圖形化平臺系統(tǒng)架構(gòu)
(1) 數(shù)據(jù)表的操作,Hive表是以數(shù)據(jù)和Hive表元數(shù)據(jù)分離的形式實現(xiàn)的,當(dāng)創(chuàng)建一個數(shù)據(jù)表的時候,需要創(chuàng)建這兩部分信息,Hive表的元數(shù)據(jù)存儲在Mysql數(shù)據(jù)庫,而數(shù)據(jù)存儲在Hadoop集群上,以分布式文件的形式存在,由于Hadoop不支持對文件數(shù)據(jù)的隨機修改,因此對于Hive表數(shù)據(jù)的添加只能以整個文件的形式上傳,不支持對Hive表數(shù)據(jù)單條數(shù)據(jù)的插入,數(shù)據(jù)的刪除同樣不支持對單條數(shù)據(jù)記錄的刪除。Hive表的原數(shù)據(jù)包含的是數(shù)據(jù)表的屬性,數(shù)據(jù)表是否是外部表,所謂外部表,就是修改的內(nèi)容僅限于元數(shù)據(jù),存儲的位置,列名,列的類型,數(shù)據(jù)間隔等等。數(shù)據(jù)表的操作,包含清空,創(chuàng)建,刪除,更改。
(2) 數(shù)據(jù)的展示,數(shù)據(jù)展示所需要的是Hadoop集群上的數(shù)據(jù),如果文件中數(shù)據(jù)需要正確展示,那么它數(shù)據(jù)的格式必須得匹配數(shù)據(jù)表的元數(shù)據(jù),否則數(shù)據(jù)無法正確顯示,例如,當(dāng)文件中數(shù)據(jù)間隔以“ ”為間隔,而元數(shù)據(jù)設(shè)置數(shù)據(jù)表的格式以“u0001”為間隔,在客戶端就不能顯示正確的數(shù)據(jù)。數(shù)據(jù)顯示一次性顯示100條數(shù)據(jù),隨著滾動條下拉,每次增量顯示200條數(shù)據(jù)。數(shù)據(jù)表同時展示整個數(shù)據(jù)表內(nèi)容所占空間的大小。
(3) 數(shù)據(jù)庫操作,對于不同的用戶,擁有對不同數(shù)據(jù)庫的操作權(quán)限,默認(rèn)一個用戶只能擁有3個數(shù)據(jù)庫,但是操作的數(shù)據(jù)庫格式不限,用戶可以將一個數(shù)據(jù)庫的操作權(quán)限賦予其他的用戶,被賦予操作權(quán)限的用戶只能對數(shù)據(jù)庫的數(shù)據(jù)表進(jìn)行操作,不能刪除數(shù)據(jù)庫,只有數(shù)據(jù)庫的擁有者才能刪除數(shù)據(jù)庫。數(shù)據(jù)庫里面包含數(shù)據(jù)表,數(shù)據(jù)庫之間數(shù)據(jù)表可以相互移動。
2.2 客戶端和服務(wù)端的通信
客戶端和服務(wù)端通信是通過Thrift工具實現(xiàn),Thrift是一個服務(wù)端和客戶端的架構(gòu)體系,Thrift具有自己內(nèi)部定義的傳輸協(xié)議規(guī)范(TProtocol)和傳輸數(shù)據(jù)標(biāo)準(zhǔn)(TTransports),通過IDL腳本對傳輸數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(struct) 和傳輸數(shù)據(jù)的業(yè)務(wù)邏輯(service)根據(jù)不同的運行環(huán)境快速的構(gòu)建相應(yīng)的代碼,并且通過自己內(nèi)部的序列化機制對傳輸?shù)臄?shù)據(jù)進(jìn)行簡化和壓縮提高并發(fā)、大型系統(tǒng)中數(shù)據(jù)交互的成本,圖3描繪了Thrift的整體架構(gòu),分為6個部分:
(1)業(yè)務(wù)邏輯實現(xiàn)(Your Code),業(yè)務(wù)邏輯的實現(xiàn)需要自己編寫特定的thrift-code。
(2)客戶端和服務(wù)端對應(yīng)的Service,對于每一個客戶端為建立一個連接。
(3)執(zhí)行讀寫操作的計算結(jié)果,由服務(wù)端執(zhí)行,將結(jié)果返回給客戶端。
圖3 Thrift的整體架構(gòu)
(4)TProtocol,定義數(shù)據(jù)格式協(xié)議,包含二進(jìn)制編碼協(xié)議TBinaryProtocol 和高效率的、密集的二進(jìn)制編碼格式進(jìn)行數(shù)據(jù)傳輸TCompactProtocol 。
(5)TTransports,定義數(shù)據(jù)傳輸方式,包含阻塞式I/O進(jìn)行傳輸TSocket和非阻塞方式TFramed Transport,底層只有一個服務(wù),所以傳輸方式選擇的事阻塞式I/O。
(6)底層I/O通信,底層通信協(xié)議。
2.3 服務(wù)端
服務(wù)端處于整個系統(tǒng)的中間層,往上負(fù)責(zé)和客戶端通信,接收客戶端的請求,并且將執(zhí)行結(jié)構(gòu)返回給客戶端;往下負(fù)責(zé)和底層服務(wù)溝通,將執(zhí)行指令提交到底層服務(wù)執(zhí)行,另外管理一些緩存的內(nèi)容,主要完成的功能是權(quán)限管理,數(shù)據(jù)表管理,數(shù)據(jù)庫管理以及連接池管理。
(1) 權(quán)限管理,Hive本身不存在對數(shù)據(jù)表和數(shù)據(jù)庫的限制,為了限制不同用戶對Hive數(shù)據(jù)庫的使用,服務(wù)端建立了一套權(quán)限管理體系,用于管理不同用戶的數(shù)據(jù)庫和數(shù)據(jù)表,不同用戶對數(shù)據(jù)庫操作擁有不同的權(quán)限,這一部分信息存儲在Mysql數(shù)據(jù)庫當(dāng)中。
(2) 數(shù)據(jù)表管理,數(shù)據(jù)表的元數(shù)據(jù)信息可以通過底層MetaStoreServer獲得,權(quán)限信息則需要通過權(quán)限管理體系獲取,數(shù)據(jù)表的信息經(jīng)常要被訪問,為了能夠及時的反饋客戶端請求,服務(wù)端存儲了一份數(shù)據(jù)表的緩存信息,以減輕對底層Hive的操作次數(shù)。
(3) 數(shù)據(jù)庫管理,不同的用戶對Hive數(shù)據(jù)庫擁有兩種權(quán)限,一種是數(shù)據(jù)庫的擁有者,另外一種是數(shù)據(jù)庫的可操作者,數(shù)據(jù)庫擁有者能夠刪除自己創(chuàng)建的數(shù)據(jù)庫,而數(shù)據(jù)庫的可操作者權(quán)限,則需要數(shù)據(jù)庫擁有者賦予。
(4) 連接池管理,連接池為Hive操作提供連接,用于Java客戶端訪問元數(shù)據(jù)庫,在服務(wù)器端啟動Meta StoreServer,客戶端利用連接通過MetaStoreServer訪問元數(shù)據(jù)庫,為了保證連接有效性,對已經(jīng)建立的連
接間隔一定的時間做信息發(fā)送操作,若連接中斷,則重啟連接服務(wù),以保證服務(wù)的可靠性。
2.4 底層服務(wù)配置
底層服務(wù)由Hadoop為支撐,需要配置MetaStore服務(wù)和Hive服務(wù),MetaStore服務(wù)底層是以Mysql為支撐,存儲Hive的元數(shù)據(jù)。Hive服務(wù)提供數(shù)據(jù)信息,底層依托Hdfs。
Facebook主要依靠可以使業(yè)務(wù)開發(fā)者同時使用的Hadoop、標(biāo)準(zhǔn)商業(yè)智能工具的Hive以及由Facebook自主開發(fā)的閉源終端用戶工具HiPal等方式拓展業(yè)務(wù)。為了使業(yè)務(wù)人員更加方便的使用Hive,基于Hive的數(shù)據(jù)管理圖形化界面的實現(xiàn)解決了Hive數(shù)據(jù)操作圖形化的問題,能夠直接與Hive對話,并且具有數(shù)據(jù)查詢,數(shù)據(jù)刪除,數(shù)據(jù)庫管理功能。
[1] A. Gates, O. Natkovich ect. Building a high-level dataflow system on top of Map-Reduce: The pig experience[M]. In Proc. of VLDB, 2009:1414-1425.
[2] Tom White著,周傲英等譯. Hadoop權(quán)威指南(中文版)第二版[M].北京:清華大學(xué)出版社,2011.
[3] Tom White. Hadoop: The Definitive Guide[M]. Second Edtion O’Reilly Media, 2011.
Graphical data management design and implementation based on hive
ZUO Pu-jun1,2, ZHU Xiao-min1,2
(1 State Key Laboratory of Networking and Switching Technology, Beijing University of Posts and Telecommunications, Beijing 100876, China; 2 EBUPT Information Technology Co., Ltd., Beijing 100191, China)
This paper proposes a design of graphical interface that provides the user table management of Hive data warehouse, data view retrieval and the database user priority management functions, so that the user can access their own Hive data friendly.
Hive; graphic UI; data management
TN915
A
1008-5599(2014)01-0089-04
2013-12-05
國家973計劃項目(No. 2013CB329102);國家自然科學(xué)基金資助項目(No. 61372120,61271019, 61101119, 61121001, 61072057, 60902051);長江學(xué)者和創(chuàng)新團隊發(fā)展計劃資助(No. IRT1049);北京市支持中央高校共建項目——青年英才計劃。