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