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