前言本筆記主要記錄以下兩個(gè)方面:
Google三大核心技術(shù):GFS[1]、Mapreduce、Bigtable[2] [1]. Google文件系統(tǒng)(Google File System,縮寫(xiě)為GFS或GoogleFS)是Google公司為了滿足其需求而開(kāi)發(fā)的基于Linux的專有分布式文件系統(tǒng)。 [2]. BigTable是一種壓縮的、高性能的、高可擴(kuò)展性的,基于Google文件系統(tǒng)(Google File System,GFS)的數(shù)據(jù)存儲(chǔ)系統(tǒng),不是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),用于存儲(chǔ)大規(guī)模結(jié)構(gòu)化數(shù)據(jù),適用于云計(jì)算。 Hadoop MapReduce與Hive技術(shù)研究 一、Hadoop框架工作機(jī)制 Hadoop框架定義:Hadoop分布式文件系統(tǒng)(HDFS)和Mapreduce實(shí)現(xiàn)。并行程序設(shè)計(jì)方法中最重要的一種結(jié)構(gòu)就是主從結(jié)構(gòu),而Hadoop則屬于該架構(gòu)。 HDFS架構(gòu):HDFS采用Master/Slave架構(gòu),也是主從模式的結(jié)構(gòu)。一個(gè)HDFS集群由一個(gè)NameNode節(jié)點(diǎn)和一組DataNode節(jié)點(diǎn)(通常也作為計(jì)算節(jié)點(diǎn),若干個(gè))組成。 NameNode定義:NameNode是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間(NameSpace)、數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)塊之間的映射關(guān)系以及客戶端對(duì)文件的訪問(wèn)。它會(huì)將包含文件信息、文件相對(duì)應(yīng)的文件塊信息以及文件塊在DataNode的信息等文件系統(tǒng)的緣數(shù)據(jù)存儲(chǔ)在內(nèi)存中,是整個(gè)集群的主節(jié)點(diǎn)。 DataNode定義:集群系統(tǒng)中,一個(gè)節(jié)點(diǎn)上通常只運(yùn)行一個(gè)DataNode,負(fù)責(zé)管理他所在節(jié)點(diǎn)上的數(shù)據(jù)存儲(chǔ),并負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫(xiě)請(qǐng)求,在NameNode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。集群中的數(shù)掘節(jié)點(diǎn)管理存儲(chǔ)的數(shù)據(jù),會(huì)將塊的元數(shù)據(jù)存儲(chǔ)在本地,并且會(huì)將全部存在的塊信息周期性的發(fā)給NameNode。 在節(jié)點(diǎn)中操縱數(shù)據(jù): 當(dāng)要向集群中的某一節(jié)點(diǎn)寫(xiě)入數(shù)據(jù):NameNode負(fù)責(zé)分配數(shù)據(jù)塊,客戶端把數(shù)據(jù)寫(xiě)入到對(duì)應(yīng)節(jié)點(diǎn)中; 當(dāng)要從集群中的某一節(jié)點(diǎn)讀取數(shù)據(jù):客戶端在找到這一節(jié)點(diǎn)之前需要先獲取到數(shù)據(jù)塊的映射關(guān)系(關(guān)系由Namenode提供),之后從節(jié)點(diǎn)上讀取數(shù)據(jù)。 為了應(yīng)對(duì)HDFS大量節(jié)點(diǎn)構(gòu)成的特殊分布式數(shù)據(jù)結(jié)構(gòu)的特征,所以HDFS架構(gòu)最重要的就是要有錯(cuò)誤故障檢測(cè)以及故陣的快速恢復(fù)機(jī)制,這是通過(guò)數(shù)據(jù)節(jié)點(diǎn)和名字節(jié)點(diǎn)之間的一種稱為心跳的機(jī)制來(lái)實(shí)現(xiàn)的,他能夠使HDFS系統(tǒng)任意增刪節(jié)點(diǎn)。 同時(shí),分布式系統(tǒng)的采用和MapReduce模型的實(shí)現(xiàn)使得Hadoop框架具有高容錯(cuò)性以及對(duì)數(shù)據(jù)讀寫(xiě)的高吞吐率,能自動(dòng)處理失敗節(jié)點(diǎn)。 HDFS兩大特性: 高容錯(cuò)系統(tǒng):HDFS增加了數(shù)據(jù)的冗余性。即每一個(gè)文件的所有數(shù)掘塊都將會(huì)有副本。HDFS釆用一種機(jī)架感知的策略,這種策略需在經(jīng)驗(yàn)積累的基礎(chǔ)上調(diào)優(yōu)。經(jīng)過(guò)機(jī)架感知,NameNode可以知道DataNode所在位置的機(jī)架。這樣的策略可使副本均勻分布在集群中的節(jié)點(diǎn)上,對(duì)于節(jié)點(diǎn)故障時(shí)的負(fù)載均衡有利。 高存取數(shù)據(jù)性能:通過(guò)客戶端臨時(shí)緩存在本地的數(shù)據(jù)減少對(duì)于網(wǎng)絡(luò)帶寬的依賴程度;讀取副本時(shí)遵循就近原則;采用流水線復(fù)制技術(shù)提高性能(第一個(gè)接收數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)在把數(shù)據(jù)寫(xiě)到本地后會(huì)依次接著把數(shù)據(jù)傳到存有數(shù)據(jù)副本的節(jié)點(diǎn),直到所有的存對(duì)副本的節(jié)點(diǎn),在這個(gè)過(guò)程中每個(gè)節(jié)點(diǎn)都是一邊接受一邊傳送,減少了備份的時(shí)間); Hadoop集群系統(tǒng)架構(gòu)示意圖 Client:獲取分布式文件系統(tǒng)文件的應(yīng)用程序。 Master:負(fù)責(zé)NameNode和JobTracker的工作,其中JobTracker負(fù)責(zé)應(yīng)用程序的啟動(dòng)、跟蹤和調(diào)度各個(gè)Slave任務(wù)的執(zhí)行,各個(gè)Tracker中TaskTracker管理本地?cái)?shù)據(jù)處理與結(jié)果,并與JobTracker通信。 二、MapReduce(映射-歸并算法)分布式并行計(jì)算編程模型 該主從框架結(jié)構(gòu)可以把一個(gè)作業(yè)任務(wù)分解成若干個(gè)細(xì)粒度的子任務(wù),根據(jù)節(jié)點(diǎn)空閑狀況來(lái)調(diào)度和快速的處理子任務(wù),最后通過(guò)一定的規(guī)則合并生成最終的結(jié)果。有一個(gè)主節(jié)點(diǎn)和若干個(gè)從節(jié)點(diǎn),其中主節(jié)點(diǎn)的作用是負(fù)責(zé)任務(wù)分配和資源的調(diào)度;而從節(jié)點(diǎn)則主要是負(fù)責(zé)作業(yè)的執(zhí)行處理。基于此框架的程序能在通配置的機(jī)器上實(shí)現(xiàn)并行化的處理。 MapReduce借用函數(shù)式編程的思想,通過(guò)把海量數(shù)據(jù)集的常見(jiàn)操作抽象為Map(映射過(guò)程)和Reduce(聚集過(guò)程)兩種集合操作,而不用過(guò)多考慮分布式相關(guān)的操作。 MapReduce任務(wù)計(jì)算流程示意圖 MR任務(wù)的基本計(jì)算流程: 1、對(duì)輸入數(shù)據(jù)進(jìn)行數(shù)據(jù)塊劃分,便于每個(gè)map處理一個(gè)分片作業(yè); 2、RecordReader對(duì)數(shù)據(jù)塊進(jìn)行生成鍵值; 3、Map操作:Partitioner類(lèi)以指定的方式將數(shù)據(jù)區(qū)分的寫(xiě)入文件,此時(shí)集群中多個(gè)節(jié)點(diǎn)可以同時(shí)進(jìn)行map作業(yè)操作處理; 4、Reduce過(guò)程:組合、排序、聚集數(shù)據(jù),最后結(jié)果寫(xiě)入Hadoop的分布式文件系統(tǒng)HDFS管理的輸出文件中。 對(duì)MapReduce模型使用的思考: MapReduce是一個(gè)可擴(kuò)展的架構(gòu),通過(guò)切分塊數(shù)據(jù)實(shí)現(xiàn)集群上各個(gè)節(jié)點(diǎn)的并發(fā)計(jì)算。理論上隨著集群節(jié)點(diǎn)節(jié)點(diǎn)數(shù)量的增加,它的運(yùn)行速度會(huì)線性上升,但在實(shí)際應(yīng)用時(shí)要考慮到以下的一些限制因素。數(shù)據(jù)不可能無(wú)限的切分,如果每份數(shù)據(jù)太小,那么它的開(kāi)銷(xiāo)就會(huì)相對(duì)變大;集群節(jié)點(diǎn)數(shù)目增多,節(jié)點(diǎn)之間的通信開(kāi)銷(xiāo)也會(huì)隨之增大,而且網(wǎng)絡(luò)也會(huì)有Oversubscribe的問(wèn)題(也就是機(jī)架間的網(wǎng)絡(luò)帶寬遠(yuǎn)遠(yuǎn)小于每個(gè)機(jī)架內(nèi)部的總帶寬),所以通常情況下如果集群的規(guī)模在百個(gè)節(jié)點(diǎn)以上,MapReduce的速度可以和節(jié)點(diǎn)的數(shù)目成正比;超過(guò)這個(gè)規(guī)模,雖然它的運(yùn)行速度可以繼續(xù)提高,但不再以線性增長(zhǎng)。 三、并行隨機(jī)數(shù)發(fā)生器算法的MapReduce實(shí)現(xiàn) 算法實(shí)現(xiàn)流程基本步驟如下: 1、由MapReduce框架為每個(gè)映射任務(wù)分配計(jì)算負(fù)載,即確定每個(gè)映射任務(wù)要生成的隨機(jī)數(shù)個(gè)數(shù)(m),m=nRandom(總隨機(jī)個(gè)數(shù))/(nMaps(映射任務(wù)數(shù))); 2、集群中各計(jì)算節(jié)點(diǎn)執(zhí)行Map任務(wù),根據(jù)負(fù)載分配計(jì)算得出m個(gè)隨機(jī)數(shù)并存入一個(gè)數(shù)組,產(chǎn)生一組中間結(jié)果; 3、MapReduce框架進(jìn)行分區(qū)操作。Partitioner類(lèi)使用Hash函數(shù)按key(或者一個(gè)key子集)進(jìn)行分區(qū)操作,分區(qū)的數(shù)目等同于一個(gè)作業(yè)的Reduce任務(wù)的數(shù)目。即由Partitioner控制將中間過(guò)程的key發(fā)送給m個(gè)Reduce任務(wù)中的哪一個(gè)來(lái)進(jìn)行Reduce操作。 4、各計(jì)算節(jié)點(diǎn)啟動(dòng)Reduce任務(wù),將有相同key的隨機(jī)數(shù)值進(jìn)行聚集操作,并將最終結(jié)果寫(xiě)入文件進(jìn)行輸出。 四、Hive架構(gòu) 什么是Hive? Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢功能,可以將SQL語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過(guò)類(lèi)SQL語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開(kāi)發(fā)專門(mén)的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。 Hive是建立在Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架。它提供了一系列的工具,可以用來(lái)進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL),這是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制。Hive定義了簡(jiǎn)單的類(lèi)SQL查詢語(yǔ)言,稱為HQL,它允許熟悉SQL的用戶查詢數(shù)據(jù)。同時(shí),這個(gè)語(yǔ)言也允許熟悉 MapReduce 開(kāi)發(fā)者的開(kāi)發(fā)自定義的mapper和reducer來(lái)處理內(nèi)建的mapper和reducer無(wú)法完成的復(fù)雜的分析工作。 Hive架構(gòu) 用戶接口(User Interface) Hive主要有三個(gè)用戶接口,分別是命令行接(CLI),web用戶接口(WUI)和客戶端(Client)。其中CLI是最常用的,Client是用戶連接至Hive Server的客戶端,要指出運(yùn)行Hive服務(wù)器的節(jié)點(diǎn),并在此節(jié)點(diǎn)之上動(dòng)Hive服務(wù)器。對(duì)于WUI來(lái)說(shuō)采用使用瀏覽器方式訪問(wèn)Hive。 元存儲(chǔ)(MetaStore) Hive是把元數(shù)掘存儲(chǔ)在hadoop文件系統(tǒng)HDFS中,元數(shù)據(jù)包括數(shù)據(jù)表的名字,數(shù)據(jù)表的列、分區(qū)及其屬性,數(shù)掘表的屬性,數(shù)據(jù)所在的目錄等,大部分的的查詢由MapReduce完成。 其他 HQL語(yǔ)句的語(yǔ)法和語(yǔ)法分析、編譯和優(yōu)化以及查詢計(jì)劃都是通過(guò)解釋器、優(yōu)化器和編譯器共同完成的,生成的中間數(shù)據(jù)是存儲(chǔ)在hadoop分布式文件系統(tǒng)中,并在某個(gè)時(shí)間調(diào)用MapReduce程序來(lái)執(zhí)行。 Hive優(yōu)點(diǎn) 針對(duì)海量數(shù)據(jù)的高性能查詢和分析系統(tǒng):除天生的高性能查詢功能外,Hive針對(duì)HiveQL到MapReduce的翻譯進(jìn)行了大量的優(yōu)化,從而保證了生成的MapReduce任務(wù)是高效的。實(shí)際應(yīng)用中,Hive支持處理TB甚至PB級(jí)的數(shù)據(jù)。 類(lèi)SQL的查詢語(yǔ)言HiveQL:熟悉SQL的用戶基本不需要培訓(xùn)就可以非常容易的使用Hive進(jìn)行很復(fù)雜的查詢。 HiveQL極大可擴(kuò)展性:除了HiveQL自身提供的能力,用戶還可以自定義其使用的數(shù)據(jù)類(lèi)型、也可以用任何語(yǔ)言自定義mapper和reducer腳本,還可以自定義函數(shù)(普通函數(shù)、聚集函數(shù))等,以此實(shí)現(xiàn)復(fù)雜查詢的目的。 高擴(kuò)展性(Scalability)和容錯(cuò)性 Hive沒(méi)有執(zhí)行的機(jī)制,用戶的查詢執(zhí)行過(guò)程都是由分布式計(jì)算框架MapReduce完成的,因此Hive相應(yīng)具有MapReduce的高度可擴(kuò)展和高容錯(cuò)特點(diǎn)。 與Hadoop其他產(chǎn)品完全兼容:Hive自身并不存儲(chǔ)用戶數(shù)據(jù),而是通過(guò)接口訪問(wèn)用戶數(shù)據(jù)。這就使得Hive支持各種數(shù)據(jù)源和數(shù)據(jù)格式。用戶可以實(shí)現(xiàn)用自己的驅(qū)動(dòng)來(lái)增加新的數(shù)據(jù)源和數(shù)據(jù)格式。一種理想的應(yīng)用模型是將數(shù)據(jù)存儲(chǔ)在HBase中實(shí)現(xiàn)實(shí)時(shí)訪問(wèn),而用Hive對(duì)HBase中的數(shù)據(jù)進(jìn)行批量分析。 五、Hbase Hbase是使用java的google bigtable的開(kāi)源實(shí)現(xiàn),它是建立在分布式文件系統(tǒng)之上的分布式數(shù)據(jù)系統(tǒng),屬于面向列的數(shù)據(jù)庫(kù)。 HBase主要由三個(gè)部分組成,分別是Hmaster、HRegionServer和HbaseClient。 1、HMaster是HBase中的主服務(wù)器,主要負(fù)責(zé)對(duì)表和Region的管理,包括管理對(duì)表的操作、以及Region的負(fù)載均衡以及災(zāi)難處理等。 2、HRegions是由HBase中的數(shù)據(jù)表逐漸分裂而成的,因?yàn)樵贖Base中存在著一系列往往比較大的表,當(dāng)一張表的記錄數(shù)不斷的增加達(dá)到一定的容量上限時(shí)便會(huì)逐漸分裂成Regions,而這些Regions會(huì)比較均勻的分布在集群中的,并且—個(gè)Region下還會(huì)還會(huì)有一定數(shù)量的列族。 3、HBaseClient是指HBase客戶端的API,通信都采用RPC機(jī)制,用戶程序通過(guò)調(diào)用客戶端的API來(lái)和HBase的后臺(tái)中的HMaster和HRegion進(jìn)行交互的。Client主要進(jìn)行兩類(lèi)的操作:管理操作(和HMaster之問(wèn)進(jìn)行通信)和數(shù)據(jù)讀寫(xiě)類(lèi)操作(和HRegion進(jìn)行通信)。 數(shù)據(jù)分析平臺(tái)框架設(shè)計(jì)與環(huán)境配置 一、平臺(tái)總體架構(gòu)和模塊設(shè)計(jì)
注:從上至下為數(shù)據(jù)流方向,,黃色虛線指向?yàn)檐浖鞒谭较???偣蚕到y(tǒng)包括七個(gè)層面,除圖中六個(gè)模塊均處于監(jiān)控管理模塊下,其為分布式系統(tǒng)監(jiān)控管理層。 二、平臺(tái)數(shù)據(jù)采集預(yù)處理模塊詳細(xì)設(shè)計(jì) 數(shù)據(jù)采集模塊:根據(jù)不同的信息來(lái)源,需要采取不同的技術(shù)。 數(shù)據(jù)預(yù)處理模塊:清洗、規(guī)約等階段。 三、存儲(chǔ)模塊詳細(xì)設(shè)計(jì) HBase調(diào)用文件系統(tǒng)接口來(lái)獲取日志數(shù)據(jù)的物理存儲(chǔ)位置,MapReduce程序調(diào)用文件接口來(lái)將處理后的海量數(shù)據(jù)存儲(chǔ)在HDFS中。 1、外部調(diào)用:此部分由MapReduce程序、HBase和web接口三部分組成。這三部分都可以通過(guò)調(diào)用HDFS接口,在底層文件系統(tǒng)上存儲(chǔ)數(shù)據(jù)。 2、HDFS接口:文件系統(tǒng)底層的接口是底層HDFS系統(tǒng)呈現(xiàn)的接口,所有對(duì)文件系統(tǒng)的操作都要通過(guò)此接口來(lái)完成。 3、底層文件系統(tǒng):位于最底層的文件系統(tǒng)足整個(gè)系統(tǒng)我正的存儲(chǔ)平臺(tái),所有的數(shù)掘倍總都足存儲(chǔ)在文件系統(tǒng)中的,外部調(diào)用模塊根據(jù)需要調(diào)用HDFS接口來(lái)對(duì)文件系統(tǒng)進(jìn)行操作。 四、平臺(tái)監(jiān)控模塊詳細(xì)設(shè)計(jì) 集群管理器設(shè)計(jì): 集群管理器設(shè)計(jì) 配置管理器設(shè)計(jì): 功能實(shí)現(xiàn):讀取、修改、創(chuàng)建共享配置。 五、平臺(tái)監(jiān)控模塊詳細(xì)設(shè)計(jì) Hadoop集群安裝部署: 1、在集群的每個(gè)節(jié)點(diǎn)上安裝hadoop并編輯每個(gè)節(jié)點(diǎn)的hosts文件,分別將主節(jié)點(diǎn)和各從節(jié)點(diǎn)的主機(jī)名稱與IP地址的映射關(guān)系添加到hosts文件之中; 2、配置SSH服務(wù),并在master上通過(guò)運(yùn)行ssh-keygen-trsa命令用于生成一個(gè)無(wú)口令RSA密鑰對(duì),然后再將此公朗復(fù)制到每個(gè)slave節(jié)點(diǎn)的.ssh文件夾下的authorized_keys文件里; 3、修改Hadoop的一些重要的配置文件,在安裝hadoop的目錄下的conf目錄下對(duì)其中的coresite.xml、mapredsite.xml和HDFS_site.xmI等幾項(xiàng)配置信息進(jìn)行修改。 Hive安裝配置:由于Hive安裝過(guò)于簡(jiǎn)單,故這里略去。 參考文獻(xiàn) 《基于hadoop的海量搜索日志分析平臺(tái)的設(shè)計(jì)和實(shí)現(xiàn)》,趙龍,大連,大連理工大學(xué),2013.6 《基于HadoopMapReduce模型的應(yīng)用研究》,謝桂蘭,四川,《軟件天地》雜志,2010.01 本文轉(zhuǎn)自Joe Jiang的github博客 End. |
|