Hadoop文件放置策略及數據傾斜的balance方法

轉自:

http://www.cnblogs.com/zhanghuijunjava/archive/2013/04/22/hadoop-block_hdfs.html?utm_source=tuicool

http://www.cnblogs.com/Richardzhu/p/3623323.html


Hadoop文件放置

1:什麼是HDFS?

HDFS適合做:

  1. 存儲大文件。上G、T甚至P。
  2. 一次寫入,多次讀取。並且每次作業都要讀取大部分的數據。
  3. 搭建在普通商業機羣上就可以了。雖然會經常宕機,但HDFS有良好的容錯機制。

HDFS不適合做:

  1. 實時數據獲取。如果有這個需求可以用HBase。
  2. 很多小文件。因爲namenode要存儲HDFS的metadata(比如目錄的樹狀結構,每個文件的文件名、ACL、長度、owner、文件內容存放的位置等等信息),所以HDFS上文件的數目受到namenode內存的限制。
  3. 併發環境下的寫入和修改。

hadoop中存儲文件以HDFS形式存儲,HDFS擁有自己的設計原則:

1:文件大小以block塊的形式存儲
2:每個塊至少分配到三臺DataNode(看集羣情況而定)
3:通過副本機制提高可靠度和吞吐量
4:hadoop1.0使用單一的master(NameNode)來協調存儲元數據(metadata)
5:最有意思的是hadoop設計者沒有設置客戶端緩存機制,因爲我們對處理數據有足夠的信心。
下圖爲HDFS的系統結構
        
        NameNode:主要存儲元數據:例如:文件名,拷貝幾份,分別備份到哪裏;
過程大概如下:
client要向集羣中寫入數據,首先詢問Master(NameNode),Master告知客戶端向哪些DataNode
寫入數據,在往DataNode寫入數據的同時,DataNode與NameNode保持心跳,如果DataNode在執行
任務失敗,NameNode會通過心跳機制得知DataNode死掉,將重新分配新的任務到其他的DataNode。
2:Block之副本放置策略
第一副本:放置在上傳文件DataNode,如果是集羣外提交,由NameNode選擇一臺磁盤不太滿,
  CPU不太忙的節點。
第二副本:放置在於第一副本不同的機架的節點上
第三副本:與第二個副本相同集羣的節點
也許根據業務的需要我們需要更多地副本,其他副本隨機分配
   
3:Block的存儲形式
1:Block默認大小64M,如果上傳文件小於64M,那麼仍然佔用一個命名空間(NameNode metadata),
   但是物理存儲不會佔用64M空間;(這也是hadoop爲什麼不太適合處理小數據的原因之一)
2:Block大小和副本數由Client端上傳文件到HDFS時設置,其中副本數可以變更,Block是不可以再上傳後變更的

數據傾斜的balance方法

一、hadoop balance工具的用法:

    啓動balance:

      bin/start-balancer.sh -threshold 5

    停止balance:

      bin/stop-balancer.sh

二、影響hadoop balance工具的幾個參數:

    -threshold默認設置:10,參數取值範圍:0-100,參數含義:判斷集羣是否平衡的目標參數,每一個datanode存儲使用率和集羣總存儲使用率的差值都應該小於這個閥值,理論上,該參數設置的越小,整個集羣就越平衡,但是線上環境中,hadoop集羣在進行balance時,還在併發的進行數據的吸入和刪除,所以有可能無法到達設定的平衡參數值。

    dfs.balance.bandwidthPerSec默認設置:1048576(1M/S),參數含義:設置balance工具的運行中所能佔用的帶寬,設置的過大可能會造成mapred運行緩慢。

設置該參數需要修改hdfs-site.xml文件:

<property> 
<name>dfs.balance.bandwidthPerSec</name> 
<value>20971520</value> 
<description>  Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description> 
</property>

上面是設置傳輸速率爲20M/S。

三、hadoop balance工具其它特點:

    balance工具的運行過程中,迭代的將文件塊從高使用率的datanode移動到低使用率的datanode上,每一個迭代過程中移動的數據量不超過下面兩個值的較小者:10G或者指定閥值*容量,且每次迭代不超過20分鐘。每次迭代結束後,balance工具將更新該datanode的文件塊分佈情況。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章