張國(guó)鋒
摘 要:相對(duì)傳統(tǒng)的分布式數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)技術(shù),Hadoop和MapReduce技術(shù)以其簡(jiǎn)單性、良好的可擴(kuò)展性和容錯(cuò)性成為當(dāng)前大規(guī)模數(shù)據(jù)處理的主流技術(shù)之一。而Hive等軟件產(chǎn)品在Hadoop基礎(chǔ)上實(shí)現(xiàn)了與關(guān)系數(shù)據(jù)庫(kù)的接口模式,從而進(jìn)一步改善了Hadoop的易用性。數(shù)據(jù)存儲(chǔ)使用Hadoop分布式存儲(chǔ),使用Hive特有的數(shù)據(jù)庫(kù)語(yǔ)言HiveQL實(shí)現(xiàn)數(shù)據(jù)的查詢以及分析操作。最后使用Java JFreeChart實(shí)現(xiàn)結(jié)果可視化,將結(jié)果以柱狀圖的形式顯示出來。由于使用Hadoop作為基礎(chǔ),數(shù)據(jù)的查詢分析速度更快,能夠更好地與系統(tǒng)后臺(tái)對(duì)接,方便管理者操作。
關(guān)鍵詞:數(shù)據(jù)分析; 分布式存儲(chǔ); Hive; JFreeChart
Abstract: Compared to traditional distributed database and data warehouse technologies, Hadoop and MapReduce technologies become one of the mainstream of the current large-scale data processing for their simplicity, good scalability and fault tolerance. The Hive and other software products based on the Hadoop implement the interface and model of relational database, thereby further improve the easy using of Hadoop. Correspondingly, the frame structure arouses widespread attention and achieves extensive use. Hadoop-based Web consulting medical data analysis system is based on Hadoop which could be able to query and analyze data already stored in the system. Data is stored by using the Hadoop Distributed Storage, and by using the special database language HiveQL of Hive, the query and analysis of operating data are implemented. Finally, the use of Java JFreeChart achieves result visualization, the results are displayed in bar graph. Using Hadoop as a basis, data query and analysis are faster, which could better interface with the system to facilitate the operation of the administrator.
Key words: data analysis; distributed storage; Hive; JFreeChart
引言
如今已經(jīng)進(jìn)入大數(shù)據(jù)時(shí)代,各式各樣的數(shù)據(jù)與日俱增。不僅是數(shù)據(jù)總量在迅速增加,同時(shí)數(shù)據(jù)生成速率也在不斷增加。截止到目前,數(shù)據(jù)量已從TB級(jí)別躍升到PB、EB乃至ZB級(jí)別。
為了緊跟全球大數(shù)據(jù)技術(shù)發(fā)展的趨勢(shì),國(guó)內(nèi)各界對(duì)大數(shù)據(jù)也賦予了高度關(guān)注。在這種情況下,人們要挑戰(zhàn)的是,如何從大數(shù)據(jù)中提取價(jià)值最大的信息。
Hadoop2解決了namenode的單點(diǎn)故障和內(nèi)存壓力過大難以擴(kuò)展問題,解決JobTracker單點(diǎn)故障和訪問壓力過大問題,同時(shí)還解決了對(duì)MapReduce之外的框架支持問題。
本系統(tǒng)主要研究的內(nèi)容是對(duì)Web醫(yī)療咨詢數(shù)據(jù)記錄進(jìn)行分析。使用HDFS和MapReduce,把預(yù)的數(shù)據(jù)導(dǎo)入并存儲(chǔ)在集群的節(jié)點(diǎn)上。利用Hadoop自帶的Hive數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行數(shù)據(jù)的查詢和分析。數(shù)據(jù)分析的結(jié)果進(jìn)行可視化,使得結(jié)果可以以圖表的樣式展示給用戶。系統(tǒng)中需要使用JFreeChart中的柱狀圖樣式將數(shù)據(jù)展示給用戶。
1 主要技術(shù)介紹
1.1 HDFS
Hadoop分布式文件系統(tǒng)(HDFS)是適合運(yùn)行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。與現(xiàn)有的分布式文件系統(tǒng)有很多共同之處。同時(shí)也有一些顯著的不同。HDFS是一個(gè)容錯(cuò)性很高的系統(tǒng),適合運(yùn)用在廉價(jià)的機(jī)器上。HDFS訪問數(shù)據(jù)的吞吐量非常高,非常適合應(yīng)用于大型數(shù)據(jù)集。HDFS在最開始是作為Apache Nutch搜索引擎項(xiàng)目的基礎(chǔ)架構(gòu)而開發(fā)的。HDFS是Apache Hadoop Core項(xiàng)目的一部分。
1.2 Hive
Hive是建立在Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架[2],提供了能夠用來提取轉(zhuǎn)化加載(ETL)數(shù)據(jù)的一系列工具。Hive是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制。定義了特有的簡(jiǎn)單類SQL查詢語(yǔ)言HiveQL,利于熟悉SQL的用戶查詢數(shù)據(jù)。該語(yǔ)言也可以讓熟悉MapReduce的用戶開發(fā)自定義的mapper函數(shù)和reducer函數(shù)來處理內(nèi)部建立的mapper和reducer無(wú)法完成的復(fù)雜的工作。Hive采用類SQL的查詢方式,將SQL查詢轉(zhuǎn)換為MapReduce的job在Hadoop集群上執(zhí)行。
2 系統(tǒng)分析
網(wǎng)頁(yè)數(shù)據(jù)是以.txt格式存儲(chǔ)在文件中。使用Hadoop操作技術(shù)將數(shù)據(jù)拷貝到系統(tǒng)的HDFS中, Hive腳本利用“|”符號(hào)將數(shù)據(jù)屬性劃分存儲(chǔ);用戶可以在數(shù)據(jù)分析頁(yè)面分別以性別分布、年齡段分布、地區(qū)分布以及各年齡段性別分布將分析出的結(jié)果可視化,等條件進(jìn)行選擇以柱狀圖的形式返回頁(yè)面顯示。系統(tǒng)需求如圖1所示。
3 系統(tǒng)設(shè)計(jì)
3.1 總體結(jié)構(gòu)
數(shù)據(jù)分析系統(tǒng)總體結(jié)構(gòu)如圖2所示。
由圖2中可以看出數(shù)據(jù)分析系統(tǒng)的流程如下:首先進(jìn)入首頁(yè),選擇功能界面。由用戶選擇功能進(jìn)入相應(yīng)的界面;如進(jìn)入數(shù)據(jù)查詢界面后,用戶在輸入框中輸入想要查詢的數(shù)據(jù)ID編號(hào),點(diǎn)擊查詢按鈕,所要查詢的數(shù)據(jù)會(huì)在頁(yè)面的數(shù)據(jù)顯示區(qū)域顯示出來,并按照屬性劃分以表格形式展示;進(jìn)入數(shù)據(jù)分析頁(yè)面后,用戶根據(jù)自己意愿選擇分析條件,點(diǎn)擊查詢按鈕,分析結(jié)果會(huì)在頁(yè)面的顯示區(qū)域以柱狀圖的形式展示。
3.2 數(shù)據(jù)存儲(chǔ)設(shè)計(jì)
在使用系統(tǒng)前,需要將即將使用的數(shù)據(jù)存入系統(tǒng)中。把數(shù)據(jù)以文本形式存儲(chǔ),放在主文件夾中;使用Hadoop命令將文件拷貝到HDFS中;使用Hive把數(shù)據(jù)按照屬性劃分,建立表格。
3.3 詳細(xì)設(shè)計(jì)
3.3.1 數(shù)據(jù)屬性劃分設(shè)計(jì)
根據(jù)數(shù)據(jù)的實(shí)際情況,將數(shù)據(jù)屬性劃分為13個(gè)部分。當(dāng)用戶進(jìn)行數(shù)據(jù)查詢時(shí),數(shù)據(jù)的信息會(huì)按照這13個(gè)屬性劃分在頁(yè)面中,并以表格的形式呈現(xiàn)出來。其中,數(shù)據(jù)查詢會(huì)用到“編號(hào)”來進(jìn)行數(shù)據(jù)查閱;數(shù)據(jù)分析則會(huì)用到性別、年齡和地區(qū)屬性作為條件進(jìn)行數(shù)據(jù)分析。
3.3.2 數(shù)據(jù)分析設(shè)計(jì)
數(shù)據(jù)分析共包含4個(gè)分析條件,分別是性別分布、年齡段分布、地區(qū)分布以及各年齡段性別分布。
4 系統(tǒng)實(shí)現(xiàn)
4.1 Hadoop基礎(chǔ)構(gòu)架
在安裝Hadoop之前,需要在ubuntu系統(tǒng)中安裝SSH免密碼登錄。
在.ssh文件夾下創(chuàng)建id_dsa和id_dsa.pub兩個(gè)文件,這是一對(duì)私匙和公匙,需把公匙追加到授權(quán)的key里面。
4.2 Hive安裝配置
解壓Hive-1.2.1.tar.gz至主文件夾,配置環(huán)境變量。在Hive文件中配置信息,Hive元數(shù)據(jù)庫(kù)配置為Mysql,如圖3所示。
在HDFS上創(chuàng)建Hive所需路徑/tmp和/user/hive/warehouse
4.3 功能實(shí)現(xiàn)
4.3.1 數(shù)據(jù)存儲(chǔ)
準(zhǔn)備好的數(shù)據(jù)放入主文件夾中,使用Hive語(yǔ)言基于現(xiàn)有文件創(chuàng)建表。把數(shù)據(jù)文件illness.txt拷貝到HDFS,然后確認(rèn)該文件確實(shí)存在。操作過程如圖4所示。
在Hive腳本文件hql文件中將數(shù)據(jù)分屬性存儲(chǔ),文件名命名為illness.hql:執(zhí)行HiveQL腳本。
4.3.2 數(shù)據(jù)查詢模塊及界面實(shí)現(xiàn)
選擇數(shù)據(jù)查詢功能后,進(jìn)入數(shù)據(jù)查詢界面。頁(yè)面包含了一個(gè)文本輸入框,用來輸入數(shù)據(jù)的編號(hào)ID,一個(gè)查詢按鈕,連接后端QueryServlet類。QueryServlet中doPost()方法接收輸入的數(shù)據(jù)ID編號(hào),進(jìn)入系統(tǒng)DBConn類,使用HiveQL語(yǔ)言,執(zhí)行select語(yǔ)句,將與ID符合的數(shù)據(jù)返回QueryServlet類,由QueryServlet中的HttpSession類傳輸?shù)角岸藬?shù)據(jù)查詢頁(yè)面的表格中。
4.3.3 數(shù)據(jù)分析模塊及界面實(shí)現(xiàn)
選擇數(shù)據(jù)分析功能后,進(jìn)入數(shù)據(jù)分析界面。右邊部分有4個(gè)單選按鈕,分別為性別分布、年齡段分布、地區(qū)分布和各年齡段男女分布,還有一個(gè)查詢按鈕,連接后端SelectServlet。查詢界面如圖5所示。
4.3.4 分析結(jié)果可視化
進(jìn)入系統(tǒng)后選擇數(shù)據(jù)分析進(jìn)入數(shù)據(jù)分析界面,圖像顯示部分就連接至后端SelectServlet類。把所選按鈕的value值傳送給SelectServlet類。SelectServlet類中有4個(gè)方法分別對(duì)應(yīng)4個(gè)不同的value值,按照value值選擇對(duì)應(yīng)方法將結(jié)果可視化??梢暬瓿珊?,通過“onClick”執(zhí)行一個(gè)JavaScript函數(shù)clk_searchImg()。這個(gè)函數(shù)先與頁(yè)面的imgForm表格連接,從表格中得到chart值,然后連接后端ChartServlet,通過request方法和response方法,將可視化圖像顯示在頁(yè)面上。顯示頁(yè)面如圖6所示。
使用DefaultCategoryDataset類建立一個(gè)對(duì)象,用來輸入圖像所用的數(shù)據(jù)。addValue()方法中number數(shù)據(jù)的數(shù)量,就是根據(jù)該數(shù)據(jù)畫出在圖像中的柱的高度,數(shù)據(jù)輸入完成,由JFreeChart類建立一個(gè)圖表對(duì)象,將數(shù)據(jù)放入對(duì)象類中。最后將圖表類輸入到ChartUtilities類,將圖表對(duì)象轉(zhuǎn)化為圖表文件。
5 結(jié)束語(yǔ)
基于Hadoop的Web醫(yī)療咨詢數(shù)據(jù)分析系統(tǒng)采用了當(dāng)下較為普遍和便捷的Hadoop技術(shù),提供了大數(shù)據(jù)的查詢和分析功能,查看分析結(jié)果。系統(tǒng)完成了將數(shù)據(jù)按照用戶希望的形式展現(xiàn)出來的任務(wù),將分析結(jié)果變成了圖表,提高了用戶使用系統(tǒng)的直觀性和舒適度。由于受Hive語(yǔ)言的限制,在系統(tǒng)中還不允許用戶隨時(shí)存儲(chǔ)數(shù)據(jù),也不能隨意更改和刪除數(shù)據(jù)。系統(tǒng)有待進(jìn)一步改善和提高。
參考文獻(xiàn)
[1] 陸嘉恒. Hadoop實(shí)戰(zhàn)[M]. 北京:機(jī)械工業(yè)出版社,2011.
[2] CAPRIOLO E,WAMPLER D,RUTHERGLEN J. Hive編程指南[M]. 曹坤,等. 北京:人民郵電出版社,2013.
[3] 陳恒,樓偶俊,朱毅,等譯. JSP網(wǎng)站設(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2017.
[4] TURKINGTON G. Hadoop基礎(chǔ)教程[M]. 張治起,譯. 北京:人民郵電出版社,2014.
[5] 岑文初. 分布式計(jì)算開源框架Hadoop入門實(shí)踐[EB/OL]. [2018-08-29] Http://blog.csdn.net/cenwenchu79/archive/2008/08/29/2847529.aspx.
[6] Apache Software Foundation. Apache Hadoop[EB/OL]. [2018-06-13]. Http://hadoop.apache.org.
[7] WHITE T. Hadoop權(quán)威指南[M]. 周傲英,曾大聃,譯. 北京:清華大學(xué)出版社,2010.
[8] NOLL M G. Running Hadoop on ubuntu Linux (Single-Node Cluster)[EB/OL]. [2011-07-17]. http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/.
[9] WANG Cong,WANG Qian, REN Kui,et al. Ensuring data storage security in Cloud Computing[C]//2009 17th International Workshop on Quality of Service. CHARLESTON, SC, USA:IEEE,2009:1-9.
[10]CHANG F,DEAN J, GHEMAWAT S, et al. Bigtable:A distributed storage system for structured data[C]//7th USENIX Symposium on Operating Systems Design and Implementation. Seattle, WA:USENIX Association,2006:205-218.