HDFS的簡單學習

上一篇文章將Hadoop環境搭建完畢,下面我們學習一些HDFS的工作原理

HDFS   --->  分佈式文件系統   簡單說就是把很多數據文件分開放在很多的服務器上,採取分開的方式對很多很多的數據進行分析

 

一.HDFS特點:

     1、支持超大文件

    大數據有很多數據,所以能夠通過HDFS對很多很多數據進行控制,這個其他做的可能並不是那麼好。因爲機制原因對小文件反而效果沒有那麼好。

    

  2、檢測和快速應對硬件故障

  HDFS擁有備份功能,一個節點掛掉後因爲有數據備份,會很快的進行數據更新,將數據從其他節點拿過來。  

  3、流式數據訪問

  一般都是批量處理,而不是用戶交互式處理,應用程序能以流的形式訪問數據庫。主要的是數據的吞吐量,而不是訪問速度。因此HDFS不適合於低延遲的數據訪問,HDFS的是高吞吐量。

  4、簡化的一致性模型

  適合的模型是:一次寫入多次讀出,可不斷追加,但不可修改。

      4、高擴展性

  數據能夠在namenode容量的限制下,不斷擴充datanode容量

 

可能你有這樣的疑惑?那HDFS與傳統雲盤有何區別?

 

 我個人理解:1.HDFS能夠處理大量大文件,傳統雲盤並不能,傳統雲盤當擴充需要花費money,當容量達到PB就很大了,但是HDFS能夠存儲更多的數據

       2.HDFS擁有備份功能,當子節點datanode掛掉後,會有其他子節點補充,同時又擁有信息備份功能(比如說第一個子節點存儲資源  A  B ; 第二個子節點存儲資源    B  C ; 第三個子節點存儲資源   C  A),所以說當一個掛掉後會有信息進行補充

       但是傳統雲盤不具備!雲盤不會給你備份,如果你將雲盤中的文件刪除後(刪除到回收站能恢復不叫備份!那只是把你的文件從一個文件夾拿到另外一個文件夾!時間過後仍然會徹底消失),文件將不存在

      3.HDFS適合大吞吐量,高延遲場景,而傳統雲盤適合低吞吐,低延遲

      4.傳統雲盤,能夠不斷寫入修改讀出,但是HDFS只能進行追加寫入,讀出(一次寫入,多次讀出)

可能以還有這樣的疑惑?那HDFS能開發成雲盤嗎?

 

 個人理解:如果不修改,只是不斷追加和讀取,可以作爲雲盤

二:HDFS中四個節點之間的關係

我理解HDFS中有四個節點,分別是:1.HDFS Client    2.NameNode      3.Secondary NameNode    4.DataNode

 

 1.HDFS Client

  客戶端請求訪問HDFS時,無論是讀還是寫都是通過向namenode申請來進行,namenode作爲大哥,大哥同意後,客戶端可以與datanode進行溝通

   會將文件進行分份,每128字節分一份(不同系統好像不同)

2.NameNode

  負責客戶端請求的響應負責管理整個文件系統的元數據,是大哥。啥是元數據?就是這樣-->/ckj.avi  2 (blk-01,blk-02,blk-03) blk-01:node01,node02 blk-02:node02,node03     (意思就是把文件分成三份,把第一份裝到第一個和第二個節點,第二份裝到第二個和第三個節點)

   有鏡像文件和日誌文件

  namenode對數據的管理採用了三種存儲形式:內存元數據(NameSystem) 磁盤元數據鏡像文件 數據操作日誌文件(可通過日誌運算出元數據)

3.Secondary NameNode

  也有鏡像文件和日誌文件,鏡像文件實時更新,日誌文件間斷更新,如果namenode掛掉後,會將鏡像給namenode

4.DataNode

  負責管理用戶的文件數據塊,每一個文件塊可以有多個副本,並存放在不同的datanode上,Datanode會定期向Namenode彙報自身所保存的文件block信息,而namenode則會負責保持文件的副本數量

   因爲有備份功能,所以說,一份文件會存好幾份,但是訪問時訪問那個呢?會訪問離客戶端最近的那個。

   擁有心跳機制,不斷告訴namenode大哥,他還活着,當他不在告訴大哥他還活着時,大哥會認爲他掛掉了,並將他的數據重新放在另外一個blk上

 

 

 

客戶請求上傳文件流程

首先客戶端請求上傳,和namenode說一聲,nomenode檢查一些自己,發現沒有,告訴客戶端,你可以傳,客戶端說我要傳blk1,nomenode告訴客戶端,你可以傳到datanode的node1和node2,客戶端知道後,建立連接,傳過去了

客戶端請求讀文件流程

步驟基本一樣,客戶端請求讀文件,還是要問我大哥namenode,namenode知道後產生一條元數據給客戶端,告訴你,blk1裏面有node1,node2,blk2裏面有node2,node3,blk3裏面有node3,node1,客戶端知道後開始讀取

secondary namenode與namenode通信流程

namenode裏面存儲大量鏡像文件(Fsimage)和日誌文件(Edits),但是隨着時間的推移,日誌會佔很大的空間,這時候將鏡像文件及日誌文件給secondary namenode  ,secondary namenode 將鏡像文件和日誌文件進行壓縮,合併成新的鏡像文件,再趁namenode不注意,傳給mamemode作爲namenode的鏡像文件

還有一個問題!HDFS的容量受誰的影響?


當Datanode掛掉或者不足時,會將新的Datanode掛到namenode下,會無限掛嗎?不會!因爲每掛一個datanode,會將150元數據放在大哥Namenode那裏,所以說,Namenode大小限制着HDFS容量,當然這是主要原因,還有諸多原因。

三:HDFS中常用命令

 

-help 功能:輸出這個命令參數手冊

-ls 功能:顯示目錄信息 示例: hadoop fs -ls hdfs://hadoop-server01:9000/ 備註:這些參數中,所有的hdfs路徑都可以簡寫 -->hadoop fs -ls / 等同於上一條命令的效果

-mkdir 功能:在hdfs上創建目錄 示例:hadoop fs -mkdir -p /aaa/bbb/cc/dd

-moveFromLocal 功能:從本地剪切粘貼到hdfs 示例:hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd

-moveToLocal 功能:從hdfs剪切粘貼到本地 示例:hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt

--appendToFile 功能:追加一個文件到已經存在的文件末尾 示例:hadoop fs -appendToFile ./hello.txt hdfs://hadoop-server01:9000/hello.txt 可以簡寫爲: hadoop fs -appendToFile ./hello.txt /hello.txt

 

-cat 功能:顯示文件內容 示例:hadoop fs -cat /hello.txt

 

-tail 功能:顯示一個文件的末尾 示例:hadoop fs -tail /weblog/access_log.1

-text 功能:以字符形式打印一個文件的內容 示例:hadoop fs -text /weblog/access_log.1

-chgrp -chmod -chown 功能:linux文件系統中的用法一樣,對文件所屬權限 示例: hadoop fs -chmod 666 /hello.txt hadoop fs -chown someuser:somegrp /hello.txt

-copyFromLocal 功能:從本地文件系統中拷貝文件到hdfs路徑去 示例:hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/

-copyToLocal 功能:從hdfs拷貝到本地 示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz

-cp 功能:從hdfs的一個路徑拷貝hdfs的另一個路徑 示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2

 

-mv 功能:在hdfs目錄中移動文件 示例: hadoop fs -mv /aaa/jdk.tar.gz /

-get 功能:等同於copyToLocal,就是從hdfs下載文件到本地 示例:hadoop fs -get /aaa/jdk.tar.gz

-getmerge 功能:合併下載多個文件 示例:比如hdfs的目錄 /aaa/下有多個文件:log.1, log.2,log.3,... hadoop fs -getmerge /aaa/log.* ./log.sum

-put 功能:等同於copyFromLocal 示例:hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2

 

-rm 功能:刪除文件或文件夾 示例:hadoop fs -rm -r /aaa/bbb/

 

-rmdir 功能:刪除空目錄 示例:hadoop fs -rmdir /aaa/bbb/ccc

-df 功能:統計文件系統的可用空間信息 示例:hadoop fs -df -h /

 

-du 功能:統計文件夾的大小信息 示例: hadoop fs -du -s -h /aaa/*

 

-count 功能:統計一個指定目錄下的文件節點數量 示例:hadoop fs -count /aaa/

 

-setrep 功能:設置hdfs中文件的副本數量 示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz

 

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