分布式计算框架Hadoop
http://blog.csdn.net/x15594/article/details/6275493
Hadoop是Apache軟件基金會所開發(fā)的并行計算框架與分布式文件系統(tǒng)。最核心的模塊包括Hadoop Common、HDFS與MapReduce。
HDFS
???????HDFS是Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。采用Java語言開發(fā),可以部署在多種普通的廉價機器上,以集群處理數(shù)量積達(dá)到大型主機處理性能。
???????HDFS?架構(gòu)原理
???????HDFS采用master/slave架構(gòu)。一個HDFS集群包含一個單獨的NameNode和多個DataNode。
???????NameNode作為master服務(wù),它負(fù)責(zé)管理文件系統(tǒng)的命名空間和客戶端對文件的訪問。NameNode會保存文件系統(tǒng)的具體信息,包括文件信息、文件被分割成具體block塊的信息、以及每一個block塊歸屬的DataNode的信息。對于整個集群來說,HDFS通過NameNode對用戶提供了一個單一的命名空間。
???????DataNode作為slave服務(wù),在集群中可以存在多個。通常每一個DataNode都對應(yīng)于一個物理節(jié)點。DataNode負(fù)責(zé)管理節(jié)點上它們擁有的存儲,它將存儲劃分為多個block塊,管理block塊信息,同時周期性的將其所有的block塊信息發(fā)送給NameNode。
???????下圖為HDFS系統(tǒng)架構(gòu)圖,主要有三個角色,Client、NameNode、DataNode。
???????文件寫入時:
??????????????Client向NameNode發(fā)起文件寫入的請求。
??????????????NameNode根據(jù)文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。
??????????????Client將文件劃分為多個block塊,并根據(jù)DataNode的地址信息,按順序?qū)懭氲矫恳粋€DataNode塊中。
???????當(dāng)文件讀取:
??????????????Client向NameNode發(fā)起文件讀取的請求。
??????????????NameNode返回文件存儲的block塊信息、及其block塊所在DataNode的信息。
??????????????Client讀取文件信息。
???????HDFS?數(shù)據(jù)備份
???????HDFS被設(shè)計成一個可以在大集群中、跨機器、可靠的存儲海量數(shù)據(jù)的框架。它將所有文件存儲成block塊組成的序列,除了最后一個block塊,所有的block塊大小都是一樣的。文件的所有block塊都會因為容錯而被復(fù)制。每個文件的block塊大小和容錯復(fù)制份數(shù)都是可配置的。容錯復(fù)制份數(shù)可以在文件創(chuàng)建時配置,后期也可以修改。HDFS中的文件默認(rèn)規(guī)則是write one(一次寫、多次讀)的,并且嚴(yán)格要求在任何時候只有一個writer。NameNode負(fù)責(zé)管理block塊的復(fù)制,它周期性地接收集群中所有DataNode的心跳數(shù)據(jù)包和Blockreport。心跳包表示DataNode正常工作,Blockreport描述了該DataNode上所有的block組成的列表。
???????備份數(shù)據(jù)的存放:
???????備份數(shù)據(jù)的存放是HDFS可靠性和性能的關(guān)鍵。HDFS采用一種稱為rack-aware的策略來決定備份數(shù)據(jù)的存放。通過一個稱為Rack Awareness的過程,NameNode決定每個DataNode所屬rack id。缺省情況下,一個block塊會有三個備份,一個在NameNode指定的DataNode上,一個在指定DataNode非同一rack的DataNode上,一個在指定DataNode同一rack的DataNode上。這種策略綜合考慮了同一rack失效、以及不同rack之間數(shù)據(jù)復(fù)制性能問題。
???????副本的選擇:
???????為了降低整體的帶寬消耗和讀取延時,HDFS會盡量讀取最近的副本。如果在同一個rack上有一個副本,那么就讀該副本。如果一個HDFS集群跨越多個數(shù)據(jù)中心,那么將首先嘗試讀本地數(shù)據(jù)中心的副本。
???????安全模式:
???????系統(tǒng)啟動后先進(jìn)入安全模式,此時系統(tǒng)中的內(nèi)容不允許修改和刪除,直到安全模式結(jié)束。安全模式主要是為了啟動檢查各個DataNode上數(shù)據(jù)塊的安全性。
MapReduce
???????MapReduce?來源
???????MapReduce是由Google在一篇論文中提出并廣為流傳的。它最早是Google提出的一個軟件架構(gòu),用于大規(guī)模數(shù)據(jù)集群分布式運算。任務(wù)的分解(Map)與結(jié)果的匯總(Reduce)是其主要思想。Map就是將一個任務(wù)分解成多個任務(wù),Reduce就是將分解后多任務(wù)分別處理,并將結(jié)果匯總為最終結(jié)果。熟悉Function Language的人一定感覺很熟悉,不是什么新的思想。
???????MapReduce?處理流程
???????上圖就是MapReduce大致的處理流程。在Map之前,可能還有對輸入數(shù)據(jù)的Split過程以保證任務(wù)并行效率,在Map之后可能還有Shuffle過程來提高Reduce的效率以及減小數(shù)據(jù)傳輸?shù)膲毫Α?/p>
Hadoop
???????Hadoop被定位為一個易于使用的平臺,以HDFS、MapReduce為基礎(chǔ),能夠運行上千臺PCServer組成的系統(tǒng)集群,并以一種可靠、容錯的方式分布式處理請求。
???????Hadoop?部署
???????下圖顯示Hadoop部署結(jié)構(gòu)示意圖
???????在Hadoop的系統(tǒng)中,會有一臺master,主要負(fù)責(zé)NameNode的工作以及JobTracker的工作。JobTracker的主要職責(zé)就是啟動、跟蹤和調(diào)度各個Slave的任務(wù)執(zhí)行。還會有多臺slave,每一臺slave通常具有DataNode的功能并負(fù)責(zé)TaskTracker的工作。TaskTracker根據(jù)應(yīng)用要求來結(jié)合本地數(shù)據(jù)執(zhí)行Map任務(wù)以及Reduce任務(wù)。
???????Hadoop?處理流程
???????在描述Hadoop處理流程之前,先提一個分布式計算最為重要的設(shè)計原則:Moving Computation is Cheaper than Moving Data。意思是指在分布式計算中,移動計算的代價總是低于移動數(shù)據(jù)的代價。本地計算使用本地數(shù)據(jù),然后匯總才能保證分布式計算的高效性。
???????下圖所示Hadoop處理流程:
???????Hadoop?安裝
???????到目前為止,已經(jīng)完成了基礎(chǔ)理論的介紹,下面介紹Hadoop的安裝過程。
???????硬件條件:3臺PCServer。
HostName | IP | Plan |
fa1 | 10.143.20.211 | master |
fa2 | 10.143.20.212 | slave |
fa3 | 10.143.20.213 | slave |
???????預(yù)裝:操作系統(tǒng)Linux,JDK1.6,ssh,并且保證 sshd一直運行。
???????安裝步驟:
???????1. 在所有機器上新建hadoop用戶,home目錄設(shè)置為/home/hadoop/
???????2. 下載Hadoop(這里下載的是hadoop-0.18.3),先解壓到master上。
???????3. 進(jìn)入/home/hadoop/hadoop-0.18.3/conf目錄,修改hadoop-site.xml文件。
??????????????hadoop-site.xml文件默認(rèn)配置為空,它主要被用來覆蓋hadoop-default.xml的系統(tǒng)級配置。
<property>
<name>fs.default.name</name>
<value>hdfs:// 10.143.20.211:8980/</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs:// 10.143.20.211:8990/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-0.18.3/tmp/</value>
</property>
<property>
<name> dfs.block.size </name>
<value>51200</value>
????????</property>
???????4. 進(jìn)入/home/hadoop/hadoop-0.18.3/conf目錄,修改hadoop-env.sh文件。
??????????????export JAVA_HOME= /usr/lib/java6
???????5. 建立master到slave的ssh訪問授權(quán)。
???????6. 通過scp將master上的hadoop-0.18.3目錄拷貝到所有slave同名目錄上。
???????7. 在每個slave上修改hadoop-env.sh文件,設(shè)置JAVA_HOME。
???????8. 修改profile文件,擴(kuò)展PATH路徑。
??????????????export HADOOP_HOME=/home/hadoop/hadoop-0.18.3/
??????????????export PATH=$PATH:$HADOOP_HOME/bin
???????9. 在master上執(zhí)行hadoop namenode -format
???????10. 執(zhí)行start-all.sh啟動。
?
?
?
參考文獻(xiàn):
http://hadoop.apache.org/hdfs/docs/current/hdfs_design.html
http://hadoop.apache.org/mapreduce/docs/current/mapred_tutorial.html
http://www.slideshare.net/waue/hadoop-map-reduce-3019713
http://www.infoq.com/cn/articles/hadoop-intro
轉(zhuǎn)載于:https://blog.51cto.com/3855471/1651282
總結(jié)
以上是生活随笔為你收集整理的分布式计算框架Hadoop的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android进程(关闭自己和关闭其他进
- 下一篇: awk工具的简单使用