Hadoop項目背景簡介
- 2003-2004年,Google公開了部分GFS個Mapreduce思想的細(xì)節(jié),以此為基礎(chǔ)Doug Cutting等人用了2年的業(yè)余時間,實現(xiàn)了DFS和Mapreduce機制,一個微縮版:Nutch
- 名字來源于Doug Cutting兒子的玩具大象
- Hadoop于2005年秋天作為Lucene的子項目Nutch的一不分正式引入Apahce基金會。2006年3月份,Map-Reduce和Nutch Distributed File System(NDFS)分別被納入稱為Hadoop的項目
Hadoop之父
Hadoop之父是Doug Cutting,關(guān)于他的介紹就不羅列了,大家網(wǎng)上搜索下都能找到,總結(jié)下:
- 他就職于Yahoo期間,開發(fā)了Hadoop項目。而Hadoop項目是根據(jù)Google發(fā)布3篇的學(xué)術(shù)論文研究而來,既《Google File System》、《Google MapReduce 》、《Google BigTable》。
- 大名鼎鼎的Lucene、Nutch也是他弄出來的。
- 他目前在Cloudera公司擔(dān)任首席架構(gòu)師工作。
官方網(wǎng)站
Hadoop六大模塊
- Hadoop Common: 支持其他Hadoop模塊的實用常用程序。
- Hadoop Distributed File System (HDFS?): 一種分布式文件系統(tǒng),可提供對應(yīng)用程序數(shù)據(jù)的高吞吐量訪問。
- Hadoop YARN: 作業(yè)調(diào)度和集群資源管理的框架。
- Hadoop MapReduce:基于yarn系統(tǒng),用于并行處理大型數(shù)據(jù)集。
- Hadoop Ozone: 用于Hadoop的對象存儲。
- Hadoop Submarine:Hadoop的機器學(xué)習(xí)引擎
Apache的其他Hadoop相關(guān)項目
- Ambari?: 一個基于web的工具,用于配置、管理和監(jiān)視Apache Hadoop集群。
- Avro?: 一種數(shù)據(jù)序列化系統(tǒng)。
- Cassandra?: 一套開源分布式NoSQL數(shù)據(jù)庫系統(tǒng)。
- Chukwa?: 用于管理大型分布式系統(tǒng)的數(shù)據(jù)收集系統(tǒng)。
- HBase?: 一個可伸縮的分布式數(shù)據(jù)庫,支持大表的結(jié)構(gòu)化數(shù)據(jù)存儲。
- Hive?: 一種數(shù)據(jù)倉庫基礎(chǔ)設(shè)施,提供數(shù)據(jù)摘要和特殊查詢。
- Mahout?: 一個可伸縮的機器學(xué)習(xí)和數(shù)據(jù)挖掘庫。
- Pig?: 用于并行計算的高級數(shù)據(jù)流語言和執(zhí)行框架。
- Spark?: Hadoop數(shù)據(jù)的快速通用計算引擎。Spark提供了一個簡單而富有表現(xiàn)力的編程模型,支持廣泛的應(yīng)用程序,包括ETL、機器學(xué)習(xí)、流處理和圖形計算。
- Tez?: 針對Hadoop數(shù)據(jù)處理應(yīng)用程序的新分布式執(zhí)行框架,它提供了一個強大而靈活的引擎來執(zhí)行任意的DAG任務(wù)來處理批處理和交互用例的數(shù)據(jù)。
- ZooKeeper?: 分布式應(yīng)用程序的高性能協(xié)調(diào)服務(wù)。
Hadoop-HDFS
存儲模型
- 將文件線性切割成塊(Block)
- Block分散存儲在集群節(jié)點中
- 單個文件Block大小一致,文件于文件可以不一致
- Block可以設(shè)置副本數(shù),副本散在不同節(jié)點中
- 文件上傳可以設(shè)置Block大小和副本數(shù)
- 已上傳的文件Block副本數(shù)可以調(diào)整,大小不變
- 只支持一次寫入多次讀取,同一時刻只能有一個寫入者
- 可以用append追加數(shù)據(jù)
架構(gòu)模型
- 文件元數(shù)據(jù)MetaData,文件數(shù)據(jù)(元數(shù)據(jù)和數(shù)據(jù)本身)
- 元數(shù)據(jù),描述文件的,例如文件大小多大,所述者信息等
- 數(shù)據(jù)本身
- (主)NameNode節(jié)點保存文件元數(shù)據(jù)
- (從)DataNode節(jié)點保存文件Block數(shù)據(jù)
- DataNode與NameNode保持心跳,提交Block列表(這里的心跳指的是DataNode會周期性的給NameNode提交數(shù)據(jù)包,報告DataNode節(jié)點狀態(tài)以及Block列表)
- HdfsClient與NameNode交互元數(shù)據(jù)信息
- HdfsClient與DataNode交互文件Block數(shù)據(jù)
HDFS架構(gòu)圖

HDFS架構(gòu)圖
簡單介紹下這個HDFS架構(gòu)圖,后面會詳細(xì)介紹讀寫流程,所以這里只是帶大家簡單理解下。
- 最底層是DataNode,用于存儲具體的數(shù)據(jù),在往上是NameNode,用于存儲數(shù)據(jù)的元信息。
- 讀數(shù)據(jù):HDFSClient(Client)先發(fā)請求,去NameNode中查找文件元信息,看看這個文件都存儲在哪些DataNode節(jié)點上,NameNode把這個數(shù)據(jù)存儲的節(jié)點信息告知HDFSClient后,HDFSClient去各個DataNode上拿數(shù)據(jù)。
- 寫數(shù)據(jù):HDFSClient(Client)先發(fā)請求,去NameNode中查找文件元信息,NameNode會看看哪些節(jié)點存活,可以寫到哪些節(jié)點上,然后NameNode把這些信息發(fā)送給HDFSClient,HDFSClient將數(shù)據(jù)直接存儲到這些節(jié)點上。等到文件全部寫入完成后,文件才可用(這里要特別說明一點,并不是把數(shù)據(jù)直接發(fā)到NameNode上,由NameNode進(jìn)行存儲分發(fā))
HDFS設(shè)計思想

HDFS設(shè)計思想
例如一個文件50GB,按照64MB切塊的話,切成若干個64MB大小的塊。這些塊是有副本概念,例如block1,會在不同的Server節(jié)點上都有其副本。右上角是描述清單,也就是所謂的原數(shù)據(jù),存在NameNode進(jìn)程中去,其中block1:node1,node2,node3,表示block1的位置信息。
HDFS優(yōu)點
- 高容錯性
- 數(shù)據(jù)自動保存多個副本
- 副本丟失后,自動恢復(fù)
- 適合批處理
- 移動計算而非移動數(shù)據(jù)
- 數(shù)據(jù)位置暴漏給計算框架(Block偏移量)
- 適合大數(shù)據(jù)處理
- GB、TB、PB數(shù)據(jù)
- 百萬規(guī)模以上的文件數(shù)量
- 10K+節(jié)點
- 可構(gòu)建在廉價機器上
- 通過多副本,提升可靠性
- 提供了容錯和恢復(fù)機制
HDFS缺點
- 低延遲數(shù)據(jù)訪問
- 比如毫秒級
- 低延遲與高吞吐率
- 小文件存儲
- 占用NameNode大量內(nèi)存
- 尋找時間超過讀取時間
- 并發(fā)寫入、文件隨機修改
- 一個文件只能有一個寫入者
- 僅支持append追加
Hadoop架構(gòu)中的角色
NameNode(NN)
- 基于內(nèi)存存儲
- 主要功能:
- 接受客戶端的讀寫服務(wù)
- 收集DataNode匯報的Block列表信息
- NameNode保存metadata信息包括
- 文件大小,時間
- Block列表,Block偏移量,位置信息
- Block每個副本位置(由DataNode上報)
DataNode(DN)
- 本地磁盤目錄存儲數(shù)據(jù)(Block),文件形式
- 同時存儲Block的元數(shù)據(jù)信息文件(這里的元數(shù)據(jù)非NameNode源數(shù)據(jù)文件,只是DataNode這個角色為這個Block塊創(chuàng)建的小的元數(shù)據(jù)文件,具體存的是對Block的校驗和,例如MD5,哈希值等,以保證合并數(shù)據(jù)時數(shù)據(jù)的完整性。)
- 啟動DataNode時會向NameNode匯報Block信息
- 通過向NameNode發(fā)送心跳保持聯(lián)系(3秒一次),如果NameNode10分鐘沒有收到DataNode心跳,則認(rèn)為已經(jīng)lost,并copy其上的Block到其他的DataNode上
Secondary NameNode(SNN)
- 為NameNode上的數(shù)據(jù)創(chuàng)建周期性檢查點的節(jié)點
- 周期性地下載當(dāng)前NameNode fsimage和edit logs文件,將edit logs和fsimage文件合并為一個新的fsimage文件然后上傳到NameNode中
- 它不是要取代掉NameNode也不是NameNode的備份
后記
下次,我們將詳細(xì)介紹HDFS讀寫流程,敬請期待。
(轉(zhuǎn)發(fā)請注明出處:http://www.itdecent.cn/u/829cbce64381 如發(fā)現(xiàn)有錯,請留言,謝謝)