汪瑜斌
(貴州財(cái)經(jīng)大學(xué),貴州 貴陽550004)
眾所周知,目前大數(shù)據(jù)的風(fēng)浪已經(jīng)席卷整個(gè)計(jì)算機(jī)行業(yè),像國(guó)外的Twitter和新浪微博的網(wǎng)絡(luò)社交平臺(tái)上,每天都有數(shù)以萬計(jì)的文字、圖片和視頻數(shù)據(jù)量產(chǎn)生。據(jù)不完全統(tǒng)計(jì),淘寶網(wǎng)每日新增的交易數(shù)據(jù)達(dá)到10 TB;eBay分析平臺(tái)每日處理的數(shù)據(jù)量高達(dá)100 PB;Facebook的10億活躍用戶,每天生成的照片沖洗出來堆起來的高度相當(dāng)于80個(gè)埃菲爾鐵塔;YouTube網(wǎng)站每分鐘大約會(huì)有60 h的視頻數(shù)據(jù)[1]。面臨如此大的數(shù)據(jù)量,提高服務(wù)器的并行計(jì)算性能已成為業(yè)界不斷探索的重要課題。隨著大數(shù)據(jù)(Big Data)的流行,Hadoop的出現(xiàn)使得在處理上述海量數(shù)據(jù)成為可能,并能從中得出相應(yīng)的結(jié)論。Hadoop是Lucene創(chuàng)始人Doug Cutting,根據(jù)Google的相關(guān)內(nèi)容所研發(fā)出來的分布式文件系統(tǒng)和對(duì)海量數(shù)據(jù)進(jìn)行分析計(jì)算的基礎(chǔ)與框架系統(tǒng)(MapReduce)。
Hadoop是大家所熟知的一個(gè)處理大數(shù)據(jù)的實(shí)用框架,其核心就是:HDFS和 MapReduce[2]。HDFS是一個(gè)分布式存儲(chǔ)系統(tǒng),可以為計(jì)算提供海量數(shù)據(jù)的存儲(chǔ),由于其分布式,所以HDFS具有高容錯(cuò)性的特點(diǎn);而MapReduce的功能是為海量的數(shù)據(jù)進(jìn)行相應(yīng)的計(jì)算。Hadoop一開始設(shè)計(jì)出來只是用來處理數(shù)據(jù)進(jìn)行信息檢索等一些單一的業(yè)務(wù),但是隨著大數(shù)據(jù)的到來,Hadoop還存在響應(yīng)速度慢和單點(diǎn)故障等缺點(diǎn),Hadoop高性能服務(wù)器集群的實(shí)現(xiàn)就是針對(duì)上述問題,并基于HDFS和MapReduce這兩個(gè)文件去配置,從而達(dá)到理想的效果。
MapReduce編程框架最早是Google提出來,用于大規(guī)模數(shù)據(jù)集的并行計(jì)算。隨著MapReduce應(yīng)用的不斷發(fā)展和研究的不斷深入,Hadoop生態(tài)圈也隨之不斷地?cái)U(kuò)大,出現(xiàn)了 HBASE、Zookeeper、HIVE、Pig等相關(guān)組件。Hadoop是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架,具有可靠、高效和可伸縮性的特點(diǎn)。其生態(tài)系統(tǒng)框架如圖1。
圖1 Hadoop生態(tài)系統(tǒng)框架
圖1 描述了Hadoop生態(tài)系統(tǒng)框架的各個(gè)層次的構(gòu)成。最底層的是核心組件HDFS和MapReduce,之上的是生態(tài)圈的必備組件,包括Hive(數(shù)據(jù)庫)組件、Pig(數(shù)據(jù)流處理)組件和Mahout(數(shù)據(jù)挖掘庫)組件,兩邊的組件在現(xiàn)實(shí)的生產(chǎn)過程中,服務(wù)器集群也是必須要有的。Zookeeper組件可以監(jiān)視服務(wù)器的工作情況,方便運(yùn)維人員維護(hù)服務(wù)器。Sqoop是Hadoop生態(tài)圈一個(gè)重要的組件,它的標(biāo)準(zhǔn)寫法是SQL to Hadoop,主要作用是在傳統(tǒng)數(shù)據(jù)庫和Hadoop之間進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)庫中數(shù)據(jù)的導(dǎo)入和導(dǎo)出本質(zhì)上是依賴于MapReduce,充分利用了MR的并行化速度和高容錯(cuò)性。Flume是Hadoop生態(tài)圈中的另一個(gè)重要的組件,它的主要作用是進(jìn)行日志收集和匯總,具有分布式、高可靠、高容錯(cuò)和易于定制的特點(diǎn),它將數(shù)據(jù)從產(chǎn)生、傳輸、處理并最終寫入目標(biāo)的路徑過程抽象為數(shù)據(jù)流,在具體的數(shù)據(jù)流中,數(shù)據(jù)源支持在Flume中定制數(shù)據(jù)發(fā)送方,從而支持收集各種不同協(xié)議數(shù)據(jù)[3]。最上層就是安裝、部署、配置和管理的工具,使其它應(yīng)用與原始Hadoop框架更好地協(xié)調(diào)在一起,共同在海量數(shù)據(jù)的處理上兼容,從而獲得更加滿意的效果。
對(duì)于Hadoop服務(wù)器集群的搭建[4]存在多種多樣的實(shí)現(xiàn)方式,本文采用3節(jié)點(diǎn)結(jié)構(gòu),一個(gè)主節(jié)點(diǎn)(NameNode)和兩個(gè)從節(jié)點(diǎn)(DataNode)[5],主節(jié)點(diǎn)又稱為作業(yè)節(jié)點(diǎn)(jobtracker),負(fù)責(zé)作業(yè)的接收和匯總,從節(jié)點(diǎn)又稱任務(wù)節(jié)點(diǎn)(tasktracker),負(fù)責(zé)任務(wù)的分配和執(zhí)行。在任務(wù)節(jié)點(diǎn)中,運(yùn)行第一階段的代碼稱為Map任務(wù),運(yùn)行第二階段的代碼稱為Reduce任務(wù)[6]。
實(shí)驗(yàn)環(huán)境統(tǒng)一為Redhat6.2版本的Linux系統(tǒng),還有 Hadoop-2.2.0版本的tar包和JAVA 的rpm包,在這里主要給出以下幾個(gè)重要的步驟:
(1)配置在NameNode節(jié)點(diǎn)上通過ssh無密碼登錄另外兩個(gè)DataNode節(jié)點(diǎn),這樣就可以將主節(jié)點(diǎn)和從節(jié)點(diǎn)連接起來,方便后期的文件復(fù)制和服務(wù)啟動(dòng)。
(2)配置安裝JAVA的JDK在Hadoop環(huán)境上,三臺(tái)機(jī)器都要配置才能使后期程序執(zhí)行不致于出錯(cuò)。
(3)因?yàn)樵趯?shí)際的生產(chǎn)工作中,服務(wù)器的安全一直是備受關(guān)注的,越少人擁有root權(quán)限越好,這樣才能使得Hadoop服務(wù)器相對(duì)安全,為此在3臺(tái)機(jī)器上都要?jiǎng)?chuàng)建一個(gè)hadoop賬戶來啟動(dòng)和執(zhí)行服務(wù)。由于root權(quán)限很大,在生產(chǎn)工作中一般都使用hadoop賬戶才不會(huì)產(chǎn)生誤操作。
由于Hadoop是由HDFS和MapReduce兩部分構(gòu)成,要實(shí)現(xiàn)Linux下的Hadoop高性能服務(wù)器集群的搭建,需要?jiǎng)?chuàng)建一個(gè)hadoop賬號(hào),然后在hadoop賬號(hào)的home目錄下的hadoop文件夾中對(duì)相關(guān)的6個(gè)配置文件進(jìn)行配置。
前面在配置Hadoop集群的時(shí)候,已給3臺(tái)機(jī)子都添加了一個(gè)名為hadoop_admin的普通用戶,因?yàn)樵诎惭b好hadoop-2.2.0后就可以直接到該用戶的/etc/hadoop目錄下進(jìn)行相關(guān)配置文件的書寫。在該目錄下有很多的文件,其中Hadoop高性能的配置,主要是通過對(duì)hadoop目錄下的yarn-site.sh文件、coresite.xml文件、mapred-site.xml和hdfs-site.xml文件配置來實(shí)現(xiàn)的。這四個(gè)配置文件主要是通過設(shè)置hdfs.replication配置文件塊的副本數(shù),Map和Reduce的任務(wù)數(shù)的配置,通過和硬件的切合來使Hadoop服務(wù)器性能達(dá)到最優(yōu)。
其它文件的配置可以根據(jù)官方文檔的規(guī)定進(jìn)行規(guī)范配置即可。另外我們需要提前在目錄/hadoop/dfs/下新建name、data和tmp文件夾以供后面文件的配置使用[7]。
(1)對(duì)于core-site.xml文件的配置,主要功能是指出hadoop web界面訪問路徑,這個(gè)是hadoop的核心配置文件。在配置該文件過程中,在rhel6-64上,進(jìn)行配置hadoop的HDFS系統(tǒng)的命名為fs.defaultFSS.name,并設(shè)置系統(tǒng)的9000端口來監(jiān)聽并進(jìn)行操作HDFS系統(tǒng);hadoop.tmp.directory配置成hadoop的tmp目錄的根。具體代碼段如圖2。
圖2 core-site.xml文件配置
(2)接下來配置 HDFS的核心配置文件hdfssite.xml文件[8],在該文件中,dfs.http.a(chǎn)ddress配置成hdfs的http的訪問位置為rhel6-64這臺(tái)機(jī)器上,dfs.replication配置了系統(tǒng)文件存儲(chǔ)的副本數(shù)為2份(原則上不能超過NameNode節(jié)點(diǎn)個(gè)數(shù));另外配置系統(tǒng)的9001端口來查看HDFS的狀態(tài)以便及時(shí)進(jìn)行相應(yīng)的任務(wù)操作和發(fā)現(xiàn)錯(cuò)誤。
(3)Mapred-site.xml文件是 MR 任務(wù)的配置文件,因?yàn)閔adoop2.0版本以后使用的是yarn框架,所以在部署的時(shí)候必須在mapreduce.framework.name屬性下配置yarn,配置系統(tǒng)rhel6-64的10020端口查看MR的任務(wù)數(shù),配置系統(tǒng)rhel6-64的19888端口查看任務(wù)狀態(tài)。
(4)最 后 配 置 yarn-site.xml文 件,該 文 件 是YARN框架的配置文件,主要配置相關(guān)任務(wù)的啟動(dòng)位置,這樣就可以根據(jù)其啟動(dòng)位置來進(jìn)行任務(wù)的啟動(dòng)和操作,這些位置都是配置在NameNode機(jī)器上的。
本文主要采用RHEL6的Linux系統(tǒng)來實(shí)現(xiàn)Hadoop系統(tǒng),以分布式文件系統(tǒng)和MapReduce并行計(jì)算框架為基礎(chǔ),通過配置四個(gè)核心配置文件來實(shí)現(xiàn)3節(jié)點(diǎn)集群的高性能。Hadoop框架的出現(xiàn)為大數(shù)據(jù)的處理和并行計(jì)算的實(shí)現(xiàn)提供了基礎(chǔ),正因?yàn)镠DFS和MR的出現(xiàn),使得大數(shù)據(jù)產(chǎn)業(yè)蓬勃發(fā)展,而實(shí)現(xiàn)Hadoop的高性能集群的搭建,正是順應(yīng)當(dāng)下大數(shù)據(jù)時(shí)代的主流。大數(shù)據(jù)生態(tài)系統(tǒng)和Hadoop技術(shù)為全球垂直領(lǐng)域的組織提供了一個(gè)成熟、穩(wěn)定和功能豐富的平臺(tái)來實(shí)施復(fù)雜的數(shù)字化項(xiàng)目[9]。