1. 程式人生 > >大資料Hadoop之HDFS模組《》

大資料Hadoop之HDFS模組《》

      相信看到這篇文章的對於Hadoop已經有了一點的理解,那麼咱們廢話少說,直接進入正題。
    
      **《一》HDFS的概念**
      
      先來看一個問題: 什麼是HDFS?它有什麼用?
      **HDFS**,一個高可靠、高容錯、高吞吐量,適合大規模資料集應用的分散式檔案儲存系統。所謂分散式,就是指將資料分散儲存在多臺獨立的裝置上。傳統的網路儲存系統採用集中的儲存伺服器存放所有資料,儲存伺服器成為系統性能的瓶頸,也是可靠性和安全性的焦點,不能滿足大規模儲存應用的需要。分散式網路儲存系統採用可擴充套件的系統結構,利用多臺儲存伺服器分擔儲存負荷,利用位置伺服器定位儲存資訊,它不但提高了系統的可靠性、可用性和存取效率,還易於擴充套件。
   來看看它的優點:
   	一、高可靠性
   	   Hadoop一般應用在成千上萬的叢集之上,可以搭建hadoop的高可靠叢集,內部容錯功能優秀。
   	二、靠擴充套件性
   	    Hadoop是在可用的計算機集簇間分配資料並完成計算任務的,這些集簇可以方便地擴充套件到數以千計的節點中。
   	三、高效性
   	    Hadoop能夠在節點之間動態的移動資料,並保證各個節點的動態平衡,因此處理速度特別快。
   	四、高容錯性
   	    Hadoop能夠自動儲存資料的多個副本,並且能夠自動將失敗的任務重新分配。
    正所謂萬事萬物都有其兩面性,HDFS自然有它的缺點:
        1、 不適合低延遲資料訪問(資料比較大)。
        2、 無法高效儲存大量小檔案    
        3、 不支援多使用者寫入及任意修改檔案。(一次性寫,多次讀,可追加,無法修改)
        
        《二》HDFS三大服務介紹
      
        一、Namenode     
        它是一箇中心伺服器,負責管理檔案系統的名字空間(namespace)以及客戶端對檔案的訪問。      
        檔案操作,Namenode 負責檔案元資料的操作,DataNode負責處理檔案內容的讀寫請求,跟檔案內容相關的資料流不經過NameNode,只會詢問它跟哪個DataNode聯絡,否則NameNode會成為系統的瓶頸。     
        副本存放在哪些DataNode上由NameNode來控制,根據全域性情況做出塊位置決定,讀取檔案時NameNode儘量讓使用者優先讀取最近的副本,以此來降低塊消耗和讀取延時。     
        NameNode 全權管理資料塊的複製,它週期性地從叢集中的每個DataNode接受心跳和塊狀態報告(Blockreport),接收到心跳意味著該Datanode 節點工作正常,塊狀態報告包含了一個該Datanode上所有資料塊的列表。
        二、SecondaryNameNode              
        首先說下最重要的一點SecondaryNameNode並非 NameNode 的熱備。當 NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務。(不能、不能、不能 重要的事情說三遍!!!),它的功能在下面:
        (1) 輔助 NameNode,分擔其工作量。
        (2) 定期合併 Fsimage 和 Edits,並推送給 NameNode。
        (3) 在緊急情況下,可輔助恢復 NameNode。
        三、DataNode        
        一個數據塊在DataNode以檔案儲存在磁碟上,包括兩個檔案,一個是資料本身,一個是元資料包括資料塊的長度,塊資料的校驗和,以及時間戳     
        DataNode啟動後向NameNode註冊,通過後,週期性(一小時)的向NameNode上報所有塊資訊     
        心跳是每三秒一次,心跳返回結果帶有NameNode給該DataNode的命令,如複製塊資料到另一臺機器,或者刪除某個資料塊。如果超過十分鐘沒有收到某個DataNode的心跳,則認為該節點不可用     
        叢集執行中可以安全加入和退出一些機器。(服役與退役)
       
        《三》其它概念補充
	  1.檔案許可權      
	  hdfs檔案許可權與linux檔案許可權類似,r:read,w:write,x:execute,許可權x對於檔案忽略,對於資料夾表示是否允許訪問其內容 
          如果Linux 系統使用者zhangsan使用hadoop命令建立了一個檔案,那麼這個檔案在HDFS中的owner 就是zhangsan     
          HDFS的許可權目的:阻止好人做錯事,而不是阻止壞人做壞事。HDFS相信你告我你是誰,我就認為你是誰。
	  2.HDFS 檔案塊大小      
	  HDFS 中的檔案在物理上是分塊儲存(block),塊的大小可以通過配置引數( dfs.blocksize)來規定,預設大小在 hadoop2.x 版本中是 128M,老版本中是 64M。 HDFS 的塊比磁碟的塊大,其目的是為了最小化定址開銷。如果塊設定得足夠大,從磁碟傳輸資料的時間會明顯大於定位這個塊開始位置所需的時間。因而,傳輸一個由多個塊組成的檔案的時間取決於磁碟傳輸速率。如果定址時間約為 10ms,而傳輸速率為 100MB/s,為了使定址時間僅佔傳輸時間的 1%,我們要將塊大小設定約為 100MB。預設的塊大小 128MB。塊的大小:10ms*100*100M/s = 100M
	  
	  看了這麼多概念,肯定迫不及待的想要實戰了吧,下章介紹關於常用命令和HDFS的讀寫流程!