大數(shù)據(jù)系列文章-Hadoop基礎(chǔ)介紹(一)

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é)下:

  1. 他就職于Yahoo期間,開發(fā)了Hadoop項目。而Hadoop項目是根據(jù)Google發(fā)布3篇的學(xué)術(shù)論文研究而來,既《Google File System》、《Google MapReduce 》、《Google BigTable》。
  2. 大名鼎鼎的Lucene、Nutch也是他弄出來的。
  3. 他目前在Cloudera公司擔(dān)任首席架構(gòu)師工作。

官方網(wǎng)站

http://hadoop.apache.org/

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)點

  1. 高容錯性
    • 數(shù)據(jù)自動保存多個副本
    • 副本丟失后,自動恢復(fù)
  2. 適合批處理
    • 移動計算而非移動數(shù)據(jù)
    • 數(shù)據(jù)位置暴漏給計算框架(Block偏移量)
  3. 適合大數(shù)據(jù)處理
    • GB、TB、PB數(shù)據(jù)
    • 百萬規(guī)模以上的文件數(shù)量
    • 10K+節(jié)點
  4. 可構(gòu)建在廉價機器上
    • 通過多副本,提升可靠性
    • 提供了容錯和恢復(fù)機制

HDFS缺點

  1. 低延遲數(shù)據(jù)訪問
    • 比如毫秒級
    • 低延遲與高吞吐率
  2. 小文件存儲
    • 占用NameNode大量內(nèi)存
    • 尋找時間超過讀取時間
  3. 并發(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)有錯,請留言,謝謝)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容