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