前提和設計目標
硬體錯誤
硬體錯誤是常態而不是異常。HDFS可能由成百上千的伺服器所構成,每個伺服器上儲存著檔案系統的部分資料。我們面對的現實是構成系統的組件數目是巨大的,而且任一組件都有可能失效,這意味著總是有一部分HDFS的組件是不工作的。因此錯誤偵測和快速、自動的恢複是HDFS最核心的架構目標。
流式資料訪問
運行在HDFS上的應用和普通的應用不同,需要流式訪問它們的資料集。HDFS的設計中更多的考慮到了資料批處理,而不是使用者互動處理。比之資料訪問的低延遲問題,更關鍵的在於資料訪問的高輸送量。POSIX標準設定的很多硬性約束對HDFS應用系統不是必需的。為了提高資料的輸送量,在一些關鍵方面對POSIX的語義做了一些修改。
大規模資料集
運行在HDFS上的應用具有很大的資料集。HDFS上的一個典型檔案大小一般都在G位元組至T位元組。因此,HDFS被調節以支援大檔案儲存體。它應該能提供整體上高的資料傳輸頻寬,能在一個叢集裡擴充到數百個節點。一個單一的HDFS執行個體應該能支撐數以千萬計的檔案。
簡單的一致性模型
HDFS應用需要一個“一次寫入多次讀取”的檔案訪問模型。一個檔案經過建立、寫入和關閉之後就不需要改變。這一假設簡化了資料一致性問題,並且使高輸送量的資料訪問成為可能。Map/Reduce應用或者網路爬蟲應用都非常適合這個模型。目前還有計劃在將來擴充這個模型,使之支援檔案的附加寫操作。
“移動計算比移動資料更划算”
一個應用請求的計算,離它操作的資料越近就越高效,在資料達到海量層級的時候更是如此。因為這樣就能降低網路阻塞的影響,提高系統資料的輸送量。將計算移動到資料附近,比之將資料移動到應用所在顯然更好。HDFS為應用提供了將它們自己移動到資料附近的介面。
異構軟硬體平台間的可移植性
HDFS在設計的時候就考慮到平台的可移植性。這種特性方便了HDFS作為大規模資料應用平台的推廣。
hdfs的結構
既然 Hadoop 守護進程已經在運行了,現在看看每個守護進程在 Hadoop 架構中的作用。namenode 是 Hadoop 中的主伺服器,它管理檔案系統名稱空間和對叢集中儲存的檔案的訪問。還有一個 secondary namenode,它不是 namenode 的冗餘守護進程,而是提供周期檢查點和清理任務。在每個 Hadoop 叢集中可以找到一個 namenode 和一個 secondary namenode。
datanode 管理串連到節點的儲存(一個叢集中可以有多個節點)。每個儲存資料的節點運行一個 datanode 守護進程。
最後,每個叢集有一個 jobtracker,它負責調度 datanode 上的工作。每個 datanode 有一個 tasktracker,它們執行實際工作。jobtracker 和 tasktracker 採用主-從形式,jobtracker 跨 datanode 分發工作,而 tasktracker 執行任務。jobtracker 還檢查請求的工作,如果一個 datanode 由於某種原因失敗,jobtracker 會重新調度以前的任務。
使用jps查看進程
要想檢查守護進程是否正在運行,可以使用 jps 命令(這是用於 JVM 進程的 ps 公用程式)。這個命令列出 5 個守護進程及其進程標識符。
HDFS常用操作
hadoop dfs -ls 列出HDFS下的檔案
hadoop dfs -ls in 列出HDFS下某個文檔中的檔案
hadoop dfs -put test1.txt test 上傳檔案到指定目錄並且重新命名,只有所有的DataNode都接收完資料才算成功
hadoop dfs -get in getin 從HDFS擷取檔案並且重新命名為getin,同put一樣可操作檔案也可操作目錄
hadoop dfs -rmr out 刪除指定檔案從HDFS上
hadoop dfs -cat in/* 查看HDFS上in目錄的內容
hadoop dfsadmin -report 查看HDFS的基本統計資訊,結果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 進入安全模式
添加節點
可擴充性是HDFS的一個重要特性,首先在新加的節點上安裝hadoop,然後修改$HADOOP_HOME/conf/master檔案,加入NameNode主機名稱,然後在NameNode節點上修改$HADOOP_HOME/conf/slaves檔案,加入新加節點主機名稱,再建立到新加節點無密碼的SSH串連
運行啟動命令:
start-all.sh
然後可以通過http://(Master node的主機名稱):50070查看新添加的DataNode
負載平衡
start-balancer.sh,可以使DataNode節點上選擇策略重新平衡DataNode上的資料區塊的分布
Hadoop(包括HDFS)非常適合在商用硬體(commodity hardware)上做分布式儲存和計算,因為它不僅具有容錯性和可擴充性,而且非常易於擴充。Map-Reduce架構以其在大型分布式系統應用上的簡單性和可用性而著稱,這個架構已經被整合進Hadoop中。
HDFS的可配置性極高,同時,它的預設配置能夠滿足很多的安裝環境。多數情況下,這些參數只在非常大規模的叢集環境下才需要調整。
用Java語言開發,支援所有的主流平台。
支援類Shell命令,可直接和HDFS進行互動。
NameNode和DataNode有內建的Web伺服器,方便使用者檢查叢集的目前狀態。
新特性和改進會定期加入HDFS的實現中。下面列出的是HDFS中常用特性的一部分:
檔案許可權和授權。
機架感知(Rack awareness):在調度任務和分配儲存空間時考慮節點的物理位置。
安全模式:一種維護需要的管理員模式。
fsck:一個診斷檔案系統健康情況的工具,能夠發現丟失的檔案或資料區塊。
Rebalancer:當datanode之間資料不均衡時,平衡叢集上的資料負載。
升級和復原:在軟體更新後有異常發生的情形下,能夠復原到HDFS升級之前的狀態。
Secondary Namenode:對檔案系統名字空間執行循環性的檢查點,將Namenode上HDFS改動記錄檔的大小控制在某個特定的限度下。
具體操作可以看官方中文的樣本
http://hadoop.apache.org/common/docs/r0.19.2/cn/quickstart.html
hadoop使用:
- hadoop使用(一)
- hadoop使用(二)
- hadoop使用(三)
- hadoop使用(四)
- hadoop使用(五)
- hadoop使用(六)
hbase實戰:
- hbase實戰——(1.1 nosql介紹)