天天看點

Hadoop使用(二)

前提和設計目标

硬體錯誤

硬體錯誤是常态而不是異常。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

負載均衡

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改動日志檔案的大小控制在某個特定的限度下。

具體操作可以看官方中文的示例

<a href="http://hadoop.apache.org/common/docs/r0.19.2/cn/quickstart.html">http://hadoop.apache.org/common/docs/r0.19.2/cn/quickstart.html</a>

繼續閱讀