熊剛 黃明和
摘 要:云計算是當前國內外比較熱門的研究課題。Hadoop開源實現了谷歌公司的GFS(Google File System),并且成為云計算平臺的標準模型。本文在對Hadoop的核心組件HDFS和子項目HBase、Hive深入分析基礎上,基于Hadoop+HBase+Hive搭建起云計算平臺,經過實驗證明云計算平臺具有查詢速度快和高容錯性等特點。
關鍵詞:云計算;Hadoop;HDFS;HBase;Hive
1 引言
為了解決大數據的存儲和分析的問題,云計算[1]的解決方案應運而生。云計算綜合了分布式計算、并行計算、網格計算、網絡存儲技術、虛擬化技術和負載均衡等傳統計算機技術。實質上,云計算就是通過虛擬化技術將相應的硬件資源和軟件資源構建為虛擬化資源池,通過網絡的方式,按照自身需要獲取其中的資源,根據實際使用量來付費,并且不用管理他們。當前,云計算平臺眾多,但大多數是商業平臺,而Hadoop是免費的,它開源實現了谷歌公司的GFS(Google File System),采用Java語言編程,具有Java可移植性強等特點,從而為研究云計算提供了平臺。
2 Hadoop介紹
Hadoop[2]是Apache的一個開源分布式系統架構,具有低存儲成本、高效率、高容錯性、高擴展性及高可移植性等主要優點,它可以在大量廉價的普通PC機器上搭建起分布式集群,通過分布式集群來存儲和處理海量數據。
Apache Hadoop項目包含許多個子項目,下面我們主要介紹本課題所用到的幾個子項目。
2.1 HDFS
HDFS[3](Hadoop Distributed File System)是Hadoop分布式文件系統,它采用主/從架構,由一個控制節點(Namenode)和多個數據節點(Datanode)組成。其中,控制節點是中心服務器,負責管理文件系統的命名空間以及客戶端對文件的操作,同時負責建立數據塊和數據節點的映射關系。數據節點負責管理本節點上的存儲,響應客戶端的讀寫請求,同時在控制節點的統一指揮下進行數據塊的創建、復制和刪除。HDFS的工作流程及架構圖如圖1所示。
在HDFS中,一個大文件其實被分成一個或多個數據塊,數據塊默認是64MB,存儲在數據節點中,每個數據塊都有一定數量的備份,備份數是可配置的,默認備份數是3。通過這種方式,來提高數據安全性和可靠性。
2.2 HBase
HBase(Hadoop Database)是Google Bigtable的開源實現,是一個面向列的分布式數據庫。HBase就是為存儲和快速讀取海量數據而專門設計的。利用HBase技術可在廉價的PC服務器上搭建起大規模存儲集群。HBase不是傳統的關系型數據庫,它采用的是基于列存儲模式而不是基于行存儲模式,基于列存儲的好處就是數據庫中表的數據按每列存放在物理相鄰的存儲單元里,查詢數據時只查詢所在的列,不用把整行數據都讀取出來,這樣就能極大的降低I/O的開銷。
2.3 Hive
Hive是建立在Hadoop基礎上的一個數據倉庫工具,它將結構化數據文件映射成一張數據表,并提供了類似SQL語句的查詢功能,通過類似SQL語句直接編譯成MapReduce任務,對于那些不熟悉MapReduce編程模型的用戶有很大的幫助。
Hive主要由以下幾部分組成:用戶接口:Client,CLI和WUI。其中常用的接口是CLI。元數據存儲:為了避免多個用戶建立不同的元數據,Hive將元數據存儲在共享的數據庫服務器中,如mysql、derby。元數據包括表名,表的屬性,表的列屬性,表的數據所在目錄等。解釋器、編譯器、優化器、執行器:前三個器完成類SQL語句從詞法分析、語法分析、編譯、優化及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,由執行器調用執行。Hadoop:Hive的數據都存儲在HDFS中,大部分查詢是由MapReduce完成的。
3 云計算平臺的搭建步驟
3.1 硬件和軟件配置
云計算平臺由一個控制節點(Namenode)和三個數據節點(Datanode)組成,每個節點就是一臺普通的PC服務器。所有節點都配置ubuntu10.04版本的Linux操作系統,Hadoop1.0.4的集群框架,JDK1.6.29的JAVA環境。
3.2 Hadoop、HBase、Hive環境配置
配置Hadoop、HBase、Hive環境首先需要配置Hadoop中的幾個文件:hadoop-env.sh、hdfs-site.xml、core-site.xml、hbase-env.sh、hbase-site.xml、regionservers 、hive-env.sh、hive-site.xml,具體配置參見文獻[5]。
3.3 HBase數據庫設計
我們在userinfo表中添加1億條數據,以便進行下面的性能比較。具體數據庫設計如下Userinfo表所示。
Userinfo表
Row Key TimeStamp Column Family Column Keys
id t1 Userinfo id,name,sex,city
其中,Row Key:行鍵,表的主鍵,表默認按行鍵升序。TimeStamp:時間戳,每次操作數據所記錄的時間戳。Coulmn Family:列族,表在水平方向可以有一個或多個列族,一個列族可以由多個列組成,在這里列族只有userinfo,列族下面有四個列id,name,sex,city。
4 云計算平臺的優勢
4.1 快速查詢
我們通過針對1億數據進行復雜SQL查詢,將云計算平臺與Oracle進行響應速度比較。查詢語句如下:SELECT city,count(1) from userinfo Where city like‘%南昌%Group by city Order By count(1) DESC;得出結果是:云計算查詢時間僅需92秒,而Oracle查詢時間為365秒,足足提高了4倍。
我們再通過單條SQL語句來進行比較。查詢語句如下:
SELECT * from userinfo Where id=‘123測試結果是:云計算查詢時間僅需0.164秒,而Oracle查詢時間為0.796秒,足足提高了5倍。
4.2 高容錯性
與傳統的關系型數據庫不同,云計算平臺節點出現宕機、系統崩潰和網絡故障都是屬于常態的,任何一個節點出現故障都不會中斷用戶的當前操作,也不會影響數據的完整性。在整個節點正常的情況下,執行select count(1) from userinfo,其結果為220639254 rows。
場景1:先手動撥除主機名為hadoop_2的節點的網線,再執行上述SQL語句,結果為220639254 rows。場景2:查詢過程中撥掉節點網線,同樣執行上述SQL語句,結果為220639254 rows。
手動撥除主機名為hadoop_2的節點的網線,30秒后監控報警提示。重新插上節點的網線,30秒后監控中顯示恢復正常
5 結論
本文基于Hadoop+HBase+Hive分布式技術搭建起云計算平臺,云計算平臺所有節點都是采用廉價的普通PC機器。整個云計算平臺具有低存儲成本、高存儲效率、易于實現等現實優點。在云計算平臺基礎之上,我們做了與Oracle數據庫查詢響應速度比較和云計算平臺出現故障兩個實驗,結果表明,云計算平臺在海量數據下查詢性能優于Oracle和出現故障能快速自我修復。
[參考文獻]
[1]張建勛,古志民,鄭超.云計算研究綜述[J].計算機應用研究,2010.27(2):429-433.
[2]朱珠.基于Hadoop的海量數據處理模型研究和應用[D].北京:北京郵電大學,2008:32-40.
[3]黃曉去.基于HDFS的云存儲服務系統研究[D].大連:大學海事大學,2010:11-14.