張國鋒
摘 要:相對傳統(tǒng)的分布式數(shù)據(jù)庫和數(shù)據(jù)倉庫技術(shù),Hadoop和MapReduce技術(shù)以其簡單性、良好的可擴(kuò)展性和容錯性成為當(dāng)前大規(guī)模數(shù)據(jù)處理的主流技術(shù)之一。而Hive等軟件產(chǎn)品在Hadoop基礎(chǔ)上實現(xiàn)了與關(guān)系數(shù)據(jù)庫的接口模式,從而進(jìn)一步改善了Hadoop的易用性。數(shù)據(jù)存儲使用Hadoop分布式存儲,使用Hive特有的數(shù)據(jù)庫語言HiveQL實現(xiàn)數(shù)據(jù)的查詢以及分析操作。最后使用Java JFreeChart實現(xiàn)結(jié)果可視化,將結(jié)果以柱狀圖的形式顯示出來。由于使用Hadoop作為基礎(chǔ),數(shù)據(jù)的查詢分析速度更快,能夠更好地與系統(tǒng)后臺對接,方便管理者操作。
關(guān)鍵詞:數(shù)據(jù)分析; 分布式存儲; 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ù)據(jù)與日俱增。不僅是數(shù)據(jù)總量在迅速增加,同時數(shù)據(jù)生成速率也在不斷增加。截止到目前,數(shù)據(jù)量已從TB級別躍升到PB、EB乃至ZB級別。
為了緊跟全球大數(shù)據(jù)技術(shù)發(fā)展的趨勢,國內(nèi)各界對大數(shù)據(jù)也賦予了高度關(guān)注。在這種情況下,人們要挑戰(zhàn)的是,如何從大數(shù)據(jù)中提取價值最大的信息。
Hadoop2解決了namenode的單點故障和內(nèi)存壓力過大難以擴(kuò)展問題,解決JobTracker單點故障和訪問壓力過大問題,同時還解決了對MapReduce之外的框架支持問題。
本系統(tǒng)主要研究的內(nèi)容是對Web醫(yī)療咨詢數(shù)據(jù)記錄進(jìn)行分析。使用HDFS和MapReduce,把預(yù)的數(shù)據(jù)導(dǎo)入并存儲在集群的節(jié)點上。利用Hadoop自帶的Hive數(shù)據(jù)庫語言進(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)有很多共同之處。同時也有一些顯著的不同。HDFS是一個容錯性很高的系統(tǒng),適合運(yùn)用在廉價的機(jī)器上。HDFS訪問數(shù)據(jù)的吞吐量非常高,非常適合應(yīng)用于大型數(shù)據(jù)集。HDFS在最開始是作為Apache Nutch搜索引擎項目的基礎(chǔ)架構(gòu)而開發(fā)的。HDFS是Apache Hadoop Core項目的一部分。
1.2 Hive
Hive是建立在Hadoop上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架[2],提供了能夠用來提取轉(zhuǎn)化加載(ETL)數(shù)據(jù)的一系列工具。Hive是一種可以存儲、查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制。定義了特有的簡單類SQL查詢語言HiveQL,利于熟悉SQL的用戶查詢數(shù)據(jù)。該語言也可以讓熟悉MapReduce的用戶開發(fā)自定義的mapper函數(shù)和reducer函數(shù)來處理內(nèi)部建立的mapper和reducer無法完成的復(fù)雜的工作。Hive采用類SQL的查詢方式,將SQL查詢轉(zhuǎn)換為MapReduce的job在Hadoop集群上執(zhí)行。
2 系統(tǒng)分析
網(wǎng)頁數(shù)據(jù)是以.txt格式存儲在文件中。使用Hadoop操作技術(shù)將數(shù)據(jù)拷貝到系統(tǒng)的HDFS中, Hive腳本利用“|”符號將數(shù)據(jù)屬性劃分存儲;用戶可以在數(shù)據(jù)分析頁面分別以性別分布、年齡段分布、地區(qū)分布以及各年齡段性別分布將分析出的結(jié)果可視化,等條件進(jìn)行選擇以柱狀圖的形式返回頁面顯示。系統(tǒng)需求如圖1所示。
3 系統(tǒng)設(shè)計
3.1 總體結(jié)構(gòu)
數(shù)據(jù)分析系統(tǒng)總體結(jié)構(gòu)如圖2所示。
由圖2中可以看出數(shù)據(jù)分析系統(tǒng)的流程如下:首先進(jìn)入首頁,選擇功能界面。由用戶選擇功能進(jìn)入相應(yīng)的界面;如進(jìn)入數(shù)據(jù)查詢界面后,用戶在輸入框中輸入想要查詢的數(shù)據(jù)ID編號,點擊查詢按鈕,所要查詢的數(shù)據(jù)會在頁面的數(shù)據(jù)顯示區(qū)域顯示出來,并按照屬性劃分以表格形式展示;進(jìn)入數(shù)據(jù)分析頁面后,用戶根據(jù)自己意愿選擇分析條件,點擊查詢按鈕,分析結(jié)果會在頁面的顯示區(qū)域以柱狀圖的形式展示。
3.2 數(shù)據(jù)存儲設(shè)計
在使用系統(tǒng)前,需要將即將使用的數(shù)據(jù)存入系統(tǒng)中。把數(shù)據(jù)以文本形式存儲,放在主文件夾中;使用Hadoop命令將文件拷貝到HDFS中;使用Hive把數(shù)據(jù)按照屬性劃分,建立表格。
3.3 詳細(xì)設(shè)計
3.3.1 數(shù)據(jù)屬性劃分設(shè)計
根據(jù)數(shù)據(jù)的實際情況,將數(shù)據(jù)屬性劃分為13個部分。當(dāng)用戶進(jìn)行數(shù)據(jù)查詢時,數(shù)據(jù)的信息會按照這13個屬性劃分在頁面中,并以表格的形式呈現(xiàn)出來。其中,數(shù)據(jù)查詢會用到“編號”來進(jìn)行數(shù)據(jù)查閱;數(shù)據(jù)分析則會用到性別、年齡和地區(qū)屬性作為條件進(jìn)行數(shù)據(jù)分析。
3.3.2 數(shù)據(jù)分析設(shè)計
數(shù)據(jù)分析共包含4個分析條件,分別是性別分布、年齡段分布、地區(qū)分布以及各年齡段性別分布。
4 系統(tǒng)實現(xiàn)
4.1 Hadoop基礎(chǔ)構(gòu)架
在安裝Hadoop之前,需要在ubuntu系統(tǒng)中安裝SSH免密碼登錄。
在.ssh文件夾下創(chuàng)建id_dsa和id_dsa.pub兩個文件,這是一對私匙和公匙,需把公匙追加到授權(quán)的key里面。
4.2 Hive安裝配置
解壓Hive-1.2.1.tar.gz至主文件夾,配置環(huán)境變量。在Hive文件中配置信息,Hive元數(shù)據(jù)庫配置為Mysql,如圖3所示。
在HDFS上創(chuàng)建Hive所需路徑/tmp和/user/hive/warehouse
4.3 功能實現(xiàn)
4.3.1 數(shù)據(jù)存儲
準(zhǔn)備好的數(shù)據(jù)放入主文件夾中,使用Hive語言基于現(xiàn)有文件創(chuàng)建表。把數(shù)據(jù)文件illness.txt拷貝到HDFS,然后確認(rèn)該文件確實存在。操作過程如圖4所示。
在Hive腳本文件hql文件中將數(shù)據(jù)分屬性存儲,文件名命名為illness.hql:執(zhí)行HiveQL腳本。
4.3.2 數(shù)據(jù)查詢模塊及界面實現(xiàn)
選擇數(shù)據(jù)查詢功能后,進(jìn)入數(shù)據(jù)查詢界面。頁面包含了一個文本輸入框,用來輸入數(shù)據(jù)的編號ID,一個查詢按鈕,連接后端QueryServlet類。QueryServlet中doPost()方法接收輸入的數(shù)據(jù)ID編號,進(jìn)入系統(tǒng)DBConn類,使用HiveQL語言,執(zhí)行select語句,將與ID符合的數(shù)據(jù)返回QueryServlet類,由QueryServlet中的HttpSession類傳輸?shù)角岸藬?shù)據(jù)查詢頁面的表格中。
4.3.3 數(shù)據(jù)分析模塊及界面實現(xiàn)
選擇數(shù)據(jù)分析功能后,進(jìn)入數(shù)據(jù)分析界面。右邊部分有4個單選按鈕,分別為性別分布、年齡段分布、地區(qū)分布和各年齡段男女分布,還有一個查詢按鈕,連接后端SelectServlet。查詢界面如圖5所示。
4.3.4 分析結(jié)果可視化
進(jìn)入系統(tǒng)后選擇數(shù)據(jù)分析進(jìn)入數(shù)據(jù)分析界面,圖像顯示部分就連接至后端SelectServlet類。把所選按鈕的value值傳送給SelectServlet類。SelectServlet類中有4個方法分別對應(yīng)4個不同的value值,按照value值選擇對應(yīng)方法將結(jié)果可視化。可視化完成后,通過“onClick”執(zhí)行一個JavaScript函數(shù)clk_searchImg()。這個函數(shù)先與頁面的imgForm表格連接,從表格中得到chart值,然后連接后端ChartServlet,通過request方法和response方法,將可視化圖像顯示在頁面上。顯示頁面如圖6所示。
使用DefaultCategoryDataset類建立一個對象,用來輸入圖像所用的數(shù)據(jù)。addValue()方法中number數(shù)據(jù)的數(shù)量,就是根據(jù)該數(shù)據(jù)畫出在圖像中的柱的高度,數(shù)據(jù)輸入完成,由JFreeChart類建立一個圖表對象,將數(shù)據(jù)放入對象類中。最后將圖表類輸入到ChartUtilities類,將圖表對象轉(zhuǎn)化為圖表文件。
5 結(jié)束語
基于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語言的限制,在系統(tǒng)中還不允許用戶隨時存儲數(shù)據(jù),也不能隨意更改和刪除數(shù)據(jù)。系統(tǒng)有待進(jìn)一步改善和提高。
參考文獻(xiàn)
[1] 陸嘉恒. Hadoop實戰(zhàn)[M]. 北京:機(jī)械工業(yè)出版社,2011.
[2] CAPRIOLO E,WAMPLER D,RUTHERGLEN J. Hive編程指南[M]. 曹坤,等. 北京:人民郵電出版社,2013.
[3] 陳恒,樓偶俊,朱毅,等譯. JSP網(wǎng)站設(shè)計[M]. 北京:清華大學(xué)出版社,2017.
[4] TURKINGTON G. Hadoop基礎(chǔ)教程[M]. 張治起,譯. 北京:人民郵電出版社,2014.
[5] 岑文初. 分布式計算開源框架Hadoop入門實踐[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.