@初識Hadoop
Hadoop
分布式計算架構,可以在大量低成本硬體裝置組成的叢集上運作應用程式。
@起源與發展(http://baike.baidu.com/item/Hadoop)
名字起源
Hadoop這個名字不是一個縮寫,而是一個虛構的名字。該項目的建立者,Doug Cutting解釋Hadoop
的得名 :“這個名字是我孩子給一個棕黃色的大象玩具命名的。我的命名标準就是簡短,容易發音和
拼寫,沒有太多的意義,并且不會被用于别處。小孩子恰恰是這方面的高手。”
@什麼是Hadoop
第一印象:
1)資料量 可以是PB級别以上
2)上千個節點上的分布式處理方式
3)可靠性:啟動和維護多個資料副本 用于確定失敗的節點重新分布式處理資料
4)并行的方式處理,是以處理速度很快
5)可伸縮性->用于不同的資料級别
6)依賴于社群服務,費用低
7)開發語言:java(主要)c++(也可以)
8)平台:Linux、windows(cygwin)
進一步了解:
設計目标
1)故障檢測與快速恢複
2)大 資料吞吐量,但是反應速度相對慢
3)移動計算:(計算過程 在 資料存儲的位置,個人了解)
4)資料一次寫入,多次讀寫
5)超大規模的資料集
6)可移植性強
模型:
Master/Slave
資料的複制與存放
# 統一機架
# 副本就近選擇
# 安全模式 (檢測資料塊[包括副本]的有效性,并根據政策需要删除/複制部分資料塊)
通信協定
# HDFS通信協定
# TCP/IP 網絡協定
健壯性:
1)磁盤資料錯識
NameNode 通過向 DateNode發送心跳信号判斷該DateNode是否發生宕(讀音:dang [捂臉])機,
若當機,NameNode将啟動複制操作。
2)叢集均衡
3)資料完整性
HDFS寫入的時候計算出校驗和,然後每次讀的時候再計算校驗和,
DateNode在存儲收到的資料前會校驗資料的校驗和。
通路:
FS Shell(https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html)
浏覽器
存儲空間回收:
#删除和恢複功能
#有效減少副本數量
@Hadoop的組成(核心架構)
Hadoop叢集搭建官方文檔(https://hadoop.apache.org/docs/r1.0.4/cn/cluster_setup.html)
* Hadoop叢集中的兩大角色
通常,叢集裡的一台機器被指定為 NameNode,另一台不同的機器被指定為JobTracker。這些機器是masters。
餘下的機器即作為DataNode也作為TaskTracker。這些機器是slaves。
NameNode:
# HDFS的守護程式
# 紀錄檔案是如何分割成資料塊的,還有這些資料塊被存儲到哪些節點上
# 對記憶體和I/O進行集中管理
# 是個單點,發生故障将使叢集崩潰
SecondaryNameNode:
#監控HDFS狀态的輔助背景程式
#與NameNode進行通訊,定期儲存HDFS中繼資料快照
#當NameNode故障可以作為備用NameNode使用
#每個叢集都有一個
JobTracker:
#用于處理作業(使用者送出代碼)的背景程式
#決定有哪些檔案參與處理,然後切割task并配置設定節點
#監控task,重新開機失敗的task(于不同的節點)
#每個叢集隻有唯一一個JobTracker,位于Master節點
DateNode:
# 每個 從伺服器
# 根據用戶端或者是NameNode的排程存儲和檢索資料,并且定期向NameNode發送他們所存儲的塊(block)的清單。
TaskTracker:
#每個節點隻有一個TaskTracker,但一個TaskTracker可以啟動多個JVM,用于并行執行Map或Reduce任務
# 位于Slave節點上,與DateNode結合(代碼與資料同位置)
#管理各自節點上的Task(由JobtTracker配置設定)
# 與JobTracker互動
1)HDFS(Hadoop分布式檔案存儲系統 )
資料塊(block):大檔案會被分割成多個塊進行存儲,塊(block)大小預設為64MB。
每一塊會在多個DateNode上存儲多份副本,預設是3份。
NameNode:負責管理檔案目錄、檔案和塊(block)的對應關系以及塊和DateNode的對應關系。
DateNode:負責存儲,大部分容錯機制都是在DateNode上實作的。
2)MapReduce(分布式計算架構)
一個Map/Reduce 作業(job) 通常會把輸入的資料集切分為若幹獨立的資料塊,
由 Map任務(task)以完全并行的方式處理它們。架構會對Map的輸出先進行排序,
然後把結果輸入給Reduce任務。
通常作業的輸入和輸出都會被存儲在檔案系統(HDFS)中。整個架構負責任務
的排程和監控,以及重新執行已經失敗的任務。
在運作一個MapReduce計算任務時候,任務過程被分為兩個階段:map階段和reduce階段,
每個階段都是用鍵值對(key/value)作為輸入(input)和輸出(output)。而程式員要做
的就是定義好這兩個階段的函數:map函數和reduce函數。
3)子項目家族