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