HDFS異構存儲篇

                HDFS異構存儲篇
node

                                   做者:尹正傑數據庫

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。vim

 

 

一.異構存儲概述緩存

1>.數據分類及存儲策略概述網絡

  一般,公司或者組織老是有至關多的歷史數據佔用昂貴的存儲空間。對於異構公司來講,典型的數據使用模式是新傳入的數據被應用程序大量使用,從而該數據被標記爲""數據。隨着時間的推移,存儲的數據每週被訪問幾回,而不是一天幾回,這時認爲其是""數據。在接下來的幾周和幾個月中,數據使用率降低得更多,成爲""數據。若是不多使用數據,例如每一年查詢一次或兩次,這時甚至能夠根據其年齡建立第四個數據分類,並將這組不多被查詢的舊數據稱爲"凍結數據"。

  Hadoop容許將不是熱數據或者活躍數據的數據分配到比較便宜的存儲上,用於歸檔或冷存儲。能夠設置存儲策略,將較舊的數據從昂貴的高性能存儲上轉移到性價比較低(較便宜)的存儲設備上。

  Hadoop 2.5及以上版本都支持存儲策略,在該策略下,不只能夠在默認的傳統磁盤上存儲HDFS數據,還能夠在SSD(固態硬盤)上存儲數據。

2>.不一樣存儲類型的性能特色架構

  爲了瞭解異構存儲策略和Hadoop歸檔存儲,咱們來比較一下不一樣存儲的性能特色。能夠根據成本,介質的耐用性及其性能來比較替代存儲介質。成本一般以每兆字節存儲的成原本衡量。耐久性與存儲介質故障率有關。性能是在吞吐量(最大讀/寫速率,兆字節/秒)和每秒I/O操做的基礎上測量的,它受限於介質能夠提供的讀取和寫入數據的請求速度。

  硬盤驅動器(HDD)是Hadoop的標準磁盤存儲設備,能夠提供至關高的吞吐量而且價格便宜。高吞吐量是批量數據處理的理想選擇。可是,磁盤離可能在任意時間失敗。

  固態硬盤(SSD)提供計告的吞吐量和每秒I/O,但它比磁盤存儲設備貴數倍。與磁盤同樣,SSD設備具備中的故障率,而且可能在任意時間失敗。

  基於RAM的存儲爲全部類型的工做提供了極高的性能,可是其很是昂貴。RAM不提供持久存儲,由於一切都存儲在內存中。

  使用異構存儲背後的驅動因素是成本,幾乎沒有計算力的archive層的每GB存儲比正常磁盤存儲速度便宜不少。根據節點的畜欄裏能力裏將存儲分爲多個層次,能夠最佳地利用存儲。Hadoop提供了一種特殊的移動工具,它能夠將數據塊的副本或所有副本移動到成本較低的存儲中,由於隨着時間的推移,數據使用的頻率會下降。

3>.對異構HDFS存儲的需求app

  在傳統上,Hadoop用於批處理,其中磁盤存儲器提供批處理所需的高連續吞吐能力。Hive和其它使用Hadoop運行交互式畜欄裏的應用程序更多地依賴於存儲(如SSD)提供的高隨機I/O性能。雖然因爲成本較高,沒法使用SSD設備構建整個集羣,可是在同一個集羣中提供多種存儲類型是可寫的,所以不一樣類型的應用程序能夠選擇最合適的存儲設備。

  一般在Hadoop集羣中存儲有不一樣類型的數據集,不一樣團隊運行多種類型的工做負載來處理數據。如下是隨着時間的推移,數據使用的典型進展:
    (1)最初,在加載新數據以後,該數據大量使用,這時數據集被認爲是熱的,咱們習慣稱之爲"熱數據";
    (2)幾個星期以後,此數據的使用頻率降低,變爲"暖數據";
    (3)幾個月後,數據使用頻率進一步降低,變爲"冷數據";
    (4)過了很長一段使勁按後,這些數據不多被使用,可視爲凍結數據,由於它旨在極少數狀況下被訪問;

  以下圖所示,顯示了Hadoop集羣中各類類型的數據,以及如何將它們分配給不一樣的類型的存儲。Hadoop的異構存儲功能容許建立和維護多層存儲,以反映HDFS數據隨時間變化的使用模式。

 

4>.存儲體系結構的變化異步

  在早期的Hadoop版本中,NameNode和HDFS客戶端將DataNode看做有個存儲單元,而沒有感知到DataNode使用的存儲類型。Hadoop 2.5和更高版本對HDFS存儲架構進行了根本性的改造,所以DataNode容許NameNode感知不一樣的存儲類型及其適用統計信息。這使得NameNode在放置塊副本時選擇具備特定存儲類型的DataNode。

  DataNode在默認狀況下每三秒使用TCP握手的方式向NameNode發送一次心跳(健康報告),已宣佈它們活着並處於健康狀態,而且此心跳還包含一個摘要存儲報告,該報告記錄了存儲容量和使用信息。另外,DataNode發送週期性塊報告(列出該DataNode上的全部塊)到NameNode(第十次心跳包括塊報告,所以每30秒發送一次塊報告),並且這些塊報告時能夠是徹底塊報告或增量塊報告。

  在早期Hadoop版本中,存儲報告和塊報告僅包含有關存儲信息的聚合信息。在Hadoop 2.5及以上版本中,DataNode開始按使用的存儲類型區分的使用狀況統計信息和塊報告。

  空間配額方案也已被擴展,爲每一個HDFS目錄添加每一個存儲類型的空間配額。若是父目錄未指定存儲類型配額,則強制在該目錄上建立每種存儲類型的空間配額。若是父目錄已經指定了每一個存儲類型的空間配額,則父級或子目錄上的最小空間配額將是HDFS強制執行的空間配額。所以,管理員能夠在父目錄上指定每一個存儲類型的空間配額爲零,以防止子目錄使用該特定存儲類類型中的任何空間。

5>.文件的存儲首選項ide

  應用程序能夠在建立文件時指定存儲首選項,向HDFS發送關於應用程序但願存儲塊副本的首選項的提示。應用程序還能夠修改現有文件的存儲首選項。存儲首選項能夠包括複製因子以及文件塊複製的目標存儲類型。

  當應用程序指定存儲首選項時,HDFS嘗試知足首選項,但要考慮存儲空間的可用性以及存儲空間配額的可用性。若是目標存儲類型沒有足夠的可用空間來知足首選存儲類型,則將選擇不一樣的存儲類型。例如,應用程序有限使用SSD存儲類型,但沒有足夠的SSD存儲空間,這時HDFS會將副本存儲在備用存儲介質(如HDD)上。

 

二.設置歸檔存儲工具

  爲了可以維護不一樣的存儲類型,Hadoop不只使用磁盤進行存儲,還使用備用存儲介質(如SSD和內存)存儲。能夠將不一樣的存儲策略於備用存儲類類型進行組合,以在環境中設置Hadoop歸檔存儲。

1>.爲HDFS配置多個存儲層

  HDFS管理員必須配置一些用於實現HDFS異構存儲的東西。如下時須要在"hdfs-site.xml"文件中配置的參數。
    dfs.storage.policy.enabled:
       此參數用於啓用或禁用異構存儲策略,其默認值爲"true",即容許用戶更改文件和目錄的存儲策略。

    dfs.datanode.data.dir:
      在每一個DataNode上設置此參數,應該爲存儲位置分配一個只是存儲類型的標籤。這樣可根據存儲策略將數據塊放置在不一樣的存儲類型上。
      官方原話:"肯定DFS數據節點應在本地文件系統上的哪一個位置存儲其塊。若是這是逗號分隔的目錄列表,則數據將存儲在全部命名的目錄中,一般在不一樣的設備上。對於HDFS存儲策略,應使用相應的存儲類型([SSD] / [DISK] / [ARCHIVE] / [RAM_DISK])標記目錄。若是目錄沒有顯式標記的存儲類型,則默認存儲類型爲DISK。若是本地文件系統權限容許,將建立不存在的目錄。"

  必定要熟悉"dfs.datanode.data.dir"參數,它指定HDFS使用的本地存儲目錄。在異構的存儲策略下,能夠添加異構名爲"StorageType"的枚舉類型來指定存儲層,例如指定爲ARCHIVE。只需使用[ARCHIVE]前綴修飾本地目錄位置便可表示此目錄屬於ARCHIVE存儲層。
  
  接下來咱們一塊兒來看幾個案例(須要注意的是,若是不標記存儲類型,DataNode的存儲位置的默認存儲類型是傳統的DISK存儲類型喲~):
      爲DISK存儲類型上的"/yinzhengjie/data/hdfs/dn/disk01"存儲位置指定存儲類型方式以下:
        [DISK]file:///yinzhengjie/data/hdfs/dn/disk01
      爲SSK存儲類型上的"/yinzhengjie/data/hdfs/dn/ssd01"存儲位置指定存儲類型方式以下:
        [SSD]file:///yinzhengjie/data/hdfs/dn/ssd01
      爲ARCHIVE存儲類型上的"/yinzhengjie/data/hdfs/dn/archive01"存儲位置指定存儲類型的方式以下:
        [ARCHIVE]file:///yinzhengjie/data/hdfs/dn/archive01
      爲RAM-DISK存儲類型上的"/yinzhengjie/data/hdfs/dn/ram01"存儲位置指定存儲類型的方式以下:
        [RAM_DISK]file:///yinzhengjie/data/hdfs/dn/ram01
  
  擴容案例:
    假設集羣有50個節點,每一個節點有100TB的存儲空間,那麼總共提供了5PB的存儲空間。若是如今添加另外20個節點,每一個具備100TB的存儲空間,則能夠經過將此新存儲標記爲ARCHIVE來造成ARCHIVE層。
    使用[ARCHIVE]爲全部新的本地存儲目錄添加前綴來來標記新存儲。如今,集羣中有兩層存儲,DISK層有5OB,ARCHIVE層中有2PB.

2>.不一樣的存儲類型

  最初,只能使用一種物理存儲類型,即DISK用於HDFS的數據存儲。DISK是默認存儲類型,但如今還可使用ARCHIVE存儲類型,它具備很是高的存儲密度(PB級存儲),但計算能力較低。

  除了DISK和ARCHIVE存儲類型外,還可使用SSD和RAM_DISK做爲替代存儲類型。SSD和RAM_DISK提供了比傳統磁盤存儲更好的性能。ARCHIVE存儲類型也是基於磁盤的存儲類型,其經過提供高存儲密度和低計算能力支持歸檔存儲。下面總結了可用的HDFS存儲類型:
    DISK:
      默認的存儲類型,對應於HDFS使用的標準基於磁盤的存儲。
    ARCHIVE:
      基於磁盤的存檔,使用密集存儲節點存儲歷史數據或使用頻率較低的數據。
    SSD:
      使用SSD存儲低延遲讀/寫工做負載數據的閃存存儲。
    RAM_DISK:
      向RAM提供單個副本寫入的內存存儲,對永久數據的磁盤進行異步寫入。

  舒適提示:
    從Hadoop 2.5開始,可使用StorageType枚舉類型對這些存儲捲進行特定類型的存儲,例如歸檔存儲和閃存存儲。這裏的關鍵思想是在DISK存儲層中以較高的計算能力在節點上存儲大量使用的(熱)數據。
    所以,若是使用默認的HDFS複製因子3,則可用保留熱數據的全部三個副本在DISK層。
    對於暖數據,可用在DISK層保留3個副本中的2個副本,並將其中異構副本移動到ARCHIVE層。
    對於冷數據,可用將2個副本移動到ARCHIVE層,在DISK層只保留1個副本。
    若是你的數據幾乎是純歷史數據,則能夠將其分類爲凍結數據,此時將全部的3個副本移動到ARCHIVE層。

3>.多個存儲策略

  HDFS容許根據預測將不一樣的文件存儲在不一樣的存儲類型中。能夠設置如下類型的存儲策略。
    HOT:
      應用於當前正在處理的數據,全部副本都存儲在DISK存儲類型上。
    COLD:
      這時具備優先計算能力的存儲,應用於須要歸檔的數據,全部副本都存儲在基於ARCHIVE存儲類型的介質中。
    WARM:
      1個副本存儲在磁盤(DISK存儲類型)上,其它副本存儲在歸檔存儲(ARCHIVE存儲類型)上。
    ALL_SSD:
      全部副本都存儲在SSD中(在建立文件期間強制執行的策略)。
    ONE_SSD:
      1個副本存儲在SSD中,其它副本存儲在DISK中(在文件建立期間強制執行該策略)。
    LAZY_PERSIST:
      用於在內存中使用單個副本寫入快。該策略適用於寫入臨時或易於重現的數據應用程序。該副本首先被髮送到RAM_DISK存儲類型,而後被移動到DISK存儲類型。

  存儲策略包含用於放置塊的存儲類型列表,而且有兩個單獨的存儲類型列表(被稱爲回退存儲類型),1個用於文件建立,另外一個用於複製。當塊放置的存儲類型運行空間不足時,塊將被放置於用於文件建立和複製的回退存儲類型中。


  經過如下命令列出Hadoop支持的全部存儲策略:
[root@hadoop101.yinzhengjie.com ~]# hdfs storagepolicies -listPolicies
Block Storage Policies:
    BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}
    BlockStoragePolicy{WARM:5, storageTypes=[DISK, ARCHIVE], creationFallbacks=[DISK, ARCHIVE], replicationFallbacks=[DISK, ARCHIVE]}
    BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}
    BlockStoragePolicy{ONE_SSD:10, storageTypes=[SSD, DISK], creationFallbacks=[SSD, DISK], replicationFallbacks=[SSD, DISK]}
    BlockStoragePolicy{ALL_SSD:12, storageTypes=[SSD], creationFallbacks=[DISK], replicationFallbacks=[DISK]}
    BlockStoragePolicy{LAZY_PERSIST:15, storageTypes=[RAM_DISK, DISK], creationFallbacks=[DISK], replicationFallbacks=[DISK]}
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs storagepolicies             #該命令除了找出當前的存儲策略外,還有其它做用,具體可參考"-help"對應的幫助信息。
Usage: bin/hdfs storagepolicies [COMMAND]
          [-listPolicies]
          [-setStoragePolicy -path <path> -policy <policy>]
          [-getStoragePolicy -path <path>]
          [-unsetStoragePolicy -path <path>]
          [-help <command-name>]

Generic options supported are:
-conf <configuration file>        specify an application configuration file
-D <property=value>               define a value for a given property
-fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
-jt <local|resourcemanager:port>  specify a ResourceManager
-files <file1,...>                specify a comma-separated list of files to be copied to the map reduce cluster
-libjars <jar1,...>               specify a comma-separated list of jar files to be included in the classpath
-archives <archive1,...>          specify a comma-separated list of archives to be unarchived on the compute machines

The general command line syntax is:
command [genericOptions] [commandOptions]

[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs storagepolicies -help listPolicies
[-listPolicies]

List all the existing block storage policies.
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs storagepolicies             #該命令除了找出當前的存儲策略外,還有其它做用,具體可參考"-help"對應的幫助信息。

 

三.管理存儲策略

舒適提示:
  經過上面的描述,咱們知道"dfs.storage.policy.enabled"參數默認爲"true",表示啓用存儲策略功能。將該參數設置爲false能夠禁用該功能。
[root@hadoop101.yinzhengjie.com ~]# vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml          #假設咱們有5個設備,此時咱們能夠設置5個掛載點,配置方式以下。(須要把配置同步到對應的DN節點喲~)
......
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>[DISK]file://${hadoop.tmp.dir}/dn1,[DISK]file://${hadoop.tmp.dir}/dn2,[ARCHIVE]file://${hadoop.tmp.dir}/dn3,[SSD]file://${hadoop.tmp.dir}/dn4,[RAM_DISK]file://${hadoop.tmp.dir}/dn5</value>        
     <description>能夠只當多個目錄,DN節點會根據這些提供的目錄存儲數據,生產環境中每一個路徑對應的一塊磁盤掛載點,以提高I/O性能.</description>
    </property>
......
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml          #假設咱們有5個設備,此時咱們能夠設置5個掛載點,配置方式以下。(須要把配置同步到對應的DN節點喲~)

1>.查看文件或目錄的當前存儲策略

[root@hadoop101.yinzhengjie.com ~]# hdfs dfs -ls /
Found 3 items
--w-------   2 jason yinzhengjie     316968 2020-08-16 11:37 /hosts
drwx------   - root  admingroup           0 2020-08-14 19:19 /user
drwxr-xr-x   - root  admingroup           0 2020-08-14 23:22 /yinzhengjie
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs storagepolicies -getStoragePolicy -path /hosts        #很明顯,建立HDFS目錄或文件時,默認是沒有爲他們附加存儲策略的。
The storage policy of /hosts is unspecified
[root@hadoop101.yinzhengjie.com ~]# 

2>.爲文件或目錄指定存儲策略

[root@hadoop101.yinzhengjie.com ~]# hdfs dfs -ls /
Found 3 items
--w-------   2 jason yinzhengjie     316968 2020-08-16 11:37 /hosts
drwx------   - root  admingroup           0 2020-08-14 19:19 /user
drwxr-xr-x   - root  admingroup           0 2020-08-14 23:22 /yinzhengjie
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs storagepolicies -setStoragePolicy -path /hosts -policy HOT      #此處咱們指定存儲策略爲"HOT"
Set storage policy HOT on /hosts
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs storagepolicies -getStoragePolicy -path /hosts
The storage policy of /hosts:
BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}
[root@hadoop101.yinzhengjie.com ~]# 

 

四.移動數據

1>.存儲策略工做原理概述

  能夠將數據從Hot存儲策略遷移到Warm存儲策略,而後再遷移到Cold存儲策略。請注意,能夠將數據集的一個,兩個或全部副本移動到不一樣的存儲層,以優化對HDFS存儲容量的使用。

  能夠再一種類型的存儲層上保留特定數據集的一些副本,其他的副本存儲在其它存儲類型上。訪問數據的應用程序徹底忽略使用多個存儲層的事實。因爲ARCHIVE層被設計爲不具備太多(或任何)處理能力,所以在提供DISK存儲的節點上運行的mapper任務須要從提供ARCHIVE存儲的節點讀取數據。這固然意味着集羣會產生額外的網絡流量用來移動數據。

  如下是存儲策略工做原理的總結:
    (1)當更新文件或目錄的存儲策略時,HDFS不會自動強制執行新的存儲策略。
    (2)不只能夠在建立文件時執行存儲策略,也能夠在建立文件以後執行(具體可參考上面的案例)。
    (3)首次在集羣存儲數據時,存儲在默認的DISK層中。
    (4)基於數據的分類(由配置的存儲策略指定),一個或多個副本將隨時間的推移被移動到ARCHIVE層。

2>.mover工具概述

  新mover工具能夠將數據從一個存儲層移動到另外一個存儲層。它的工做原理與HDFS平衡器很是類似,只不過它是在不一樣的存儲類型之間移動塊副本。

  可使用mover工具掃描HDFS文件,以肯定塊位置是否與配置的存儲策略匹配。若是一個塊未根據配置的存儲策略存放,則mover會將副本移動到相應的存儲類型。

  能夠按期運行mover,將全部文件遷移到使用存儲策略配置的存儲類型中。

  舒適提示:
    若是將某些數據規劃未ARCHIVE存儲類型,但隨後發現使用此數據的應用程序使用的頻率遠遠超出了預期,則能夠將該數據從新分類爲"HOI"或"WARM"數據。能夠將一個或多個副本移動到更快的DISK存儲,而不會帶來從ARCHIVE節點讀取數據所形成的額外網絡開銷。
    假設管理員將COLD存儲策略應用於要存儲在歸檔存儲層節點上的數據集。因爲數據集已經存在,所以mover經過將歸檔數據從"WARM"存儲轉移到"COLD"存儲來來實施"COLD"存儲策略。將全部冷數據移入Hadoop歸檔存儲是一個很好的作法。
[root@hadoop101.yinzhengjie.com ~]# hdfs mover -help                          #mover命令的關鍵選項說明
Usage: hdfs mover [-p <files/dirs> | -f <local file>]
    -p <files/dirs>    a space separated list of HDFS files/dirs to migrate.
    -f <local file>    a local file containing a list of HDFS files/dirs to migrate.

Generic options supported are:
-conf <configuration file>        specify an application configuration file
-D <property=value>               define a value for a given property
-fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
-jt <local|resourcemanager:port>  specify a ResourceManager
-files <file1,...>                specify a comma-separated list of files to be copied to the map reduce cluster
-libjars <jar1,...>               specify a comma-separated list of jar files to be included in the classpath
-archives <archive1,...>          specify a comma-separated list of archives to be unarchived on the compute machines

The general command line syntax is:
command [genericOptions] [commandOptions]

[root@hadoop101.yinzhengjie.com ~]# 


mover命令的關鍵選項說明以下:
    -p:
      指定HDFS文件或目錄路的遷移列表,該選項接收以空格分割的文件或目錄列表喲。
    -f:
       還可使用包含HDFS文件和目錄列表的本地文件來遷移數據,使用"-f"選項指定該文件。

舒適提示:
    除了HDFS路徑和目標參數以外,mover還接收replica count做爲參數。
[root@hadoop101.yinzhengjie.com ~]# hdfs mover -help              #mover命令的關鍵選項說明
[root@hadoop101.yinzhengjie.com ~]# hdfs mover          #直接運行不加任何參數,若不指定路徑則默認將根目錄("/")做爲默認路徑。
20/08/17 04:27:32 INFO mover.Mover: namenodes = {hdfs://hadoop101.yinzhengjie.com:9000=null}
20/08/17 04:27:33 INFO net.NetworkTopology: Adding a new node: /rack002/172.200.6.103:50010
20/08/17 04:27:33 INFO net.NetworkTopology: Adding a new node: /rack001/172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741838_1892 with size=316968 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741848_1024 with size=69 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741848_1024 with size=69 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741857_1033 with size=1331 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741857_1033 with size=1331 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741840_1016 with size=1309 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741840_1016 with size=1309 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741844_1020 with size=5701 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741838_1892 with size=316968 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741844_1020 with size=5701 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741862_1038 with size=371 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741862_1038 with size=371 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741852_1028 with size=69 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741852_1028 with size=69 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741853_1029 with size=1664 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741853_1029 with size=1664 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741858_1034 with size=5701 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741858_1034 with size=5701 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741842_1018 with size=630 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741842_1018 with size=630 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741843_1019 with size=1331 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741843_1019 with size=1331 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Start moving blk_1073741847_1023 with size=951 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:33 INFO balancer.Dispatcher: Successfully moved blk_1073741847_1023 with size=951 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:43 INFO net.NetworkTopology: Adding a new node: /rack002/172.200.6.103:50010
20/08/17 04:27:43 INFO net.NetworkTopology: Adding a new node: /rack001/172.200.6.102:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Start moving blk_1073741862_1038 with size=371 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Start moving blk_1073741848_1024 with size=69 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Successfully moved blk_1073741862_1038 with size=371 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Successfully moved blk_1073741848_1024 with size=69 from 172.200.6.102:50010:SSD to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Start moving blk_1073741852_1028 with size=69 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Successfully moved blk_1073741852_1028 with size=69 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Start moving blk_1073741853_1029 with size=1664 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Start moving blk_1073741857_1033 with size=1331 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Successfully moved blk_1073741853_1029 with size=1664 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Start moving blk_1073741858_1034 with size=5701 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Successfully moved blk_1073741857_1033 with size=1331 from 172.200.6.102:50010:ARCHIVE to 172.200.6.102:50010:DISK through 172.200.6.102:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Successfully moved blk_1073741858_1034 with size=5701 from 172.200.6.103:50010:SSD to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Start moving blk_1073741847_1023 with size=951 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
20/08/17 04:27:43 INFO balancer.Dispatcher: Successfully moved blk_1073741847_1023 with size=951 from 172.200.6.103:50010:ARCHIVE to 172.200.6.103:50010:DISK through 172.200.6.103:50010
Mover Successful: all blocks satisfy the specified storage policy. Exiting...
Aug 17, 2020 4:27:53 AM  Mover took 20sec
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs mover                 #直接運行不加任何參數,若不指定路徑則默認將根目錄("/")做爲默認路徑。
[root@hadoop101.yinzhengjie.com ~]# hdfs mover -p /yinzhengjie/        #指定遷移的目錄爲"/yinzhengjie",他會將該目錄下的文件數據塊根據存儲策略移動到我們定義的存儲類型設備上。
20/08/17 04:42:11 INFO mover.Mover: namenodes = {hdfs://hadoop101.yinzhengjie.com:9000=[/yinzhengjie]}
20/08/17 04:42:12 INFO net.NetworkTopology: Adding a new node: /rack001/172.200.6.102:50010
20/08/17 04:42:12 INFO net.NetworkTopology: Adding a new node: /rack002/172.200.6.103:50010
Mover Successful: all blocks satisfy the specified storage policy. Exiting...
Aug 17, 2020 4:42:21 AM  Mover took 9sec
[root@hadoop101.yinzhengjie.com ~]# 
[root@hadoop101.yinzhengjie.com ~]# hdfs mover -p /yinzhengjie/        #指定遷移的目錄爲"/yinzhengjie",他會將該目錄下的文件數據塊根據存儲策略移動到我們定義的存儲類型設備上。

 

五.實現歸檔的步驟

  當你看完上面4個知識點後,則能夠直接忽略當前知識點,由於你本身也能總結出實現歸檔的步驟。

  須要注意的是,能夠在每一個DataNode節點上單獨設置歸檔存儲。步驟以下:
    (1)中止DataNode(hadoop-daemon.sh stop datanode)

    (2)編輯hdfs-site.xml文件,指定dfs.datanode.data.dir參數將歸檔存儲類型分配給Datanode。因爲DISK是默認的存儲類型,所以沒必要設置DISK存儲類型。可是如何指定DataNode使用ARCHIVE存儲,則必須在本地文件系統路徑的開頭插入"[ARCHIVE]",以下所示。
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>[DISK]file://${hadoop.tmp.dir}/dn1,[DISK]file://${hadoop.tmp.dir}/dn2,[ARCHIVE]file://${hadoop.tmp.dir}/dn3,[SSD]file://${hadoop.tmp.dir}/dn4,[RAM_DISK]file://${hadoop.tmp.dir}/dn5</value> 
           <description>能夠只當多個目錄,DN節點會根據這些提供的目錄存儲數據,生產環境中每一個路徑對應的一塊磁盤掛載點,以提高I/O性能.</description>
        </property>

    (3)使用"hdfs storagepolicies -setStoragePolicy"命令設置存儲策略,具體使用方式可參考我上面的案例。

    (4)啓動DataNode(hadoop-daemon.sh start datanode)

    (5)因爲更新了文件或目錄上的存儲策略,所以必須使用HDFS mover工具根據配置的新存儲策略遷移塊,具體使用方式可參考我上面的案例。

 

六.HDFS中的INotify(瞭解便可)

  在HDFS上運行的應用程序一般使用某種類型的索引或緩存部分數據,這意味着這些應用程序必須在添加或刪除新文件時更新緩存和索引。所以,應用程序必須執行本質上無效的按期掃描,以保持本身全部HDFS同步。

  在Hadoop 2.6中,有一項全新的功能,稱爲"HDFS iNotify",當發生任何與HDFS相關的文件系統更改時,其將通知發送給應用程序。

  在應用程序須要監視Hive數據庫中的文件和目錄更改時可使用HDFS iNotify功能。Solr等應用程序也須要經過文件和目錄更改。有一個由第三方提供的Hadoop事件通知系統,可是在Hadoop 2.6中,HDFS通知已成爲Hadoop的一個組成部分。
相關文章
相關標籤/搜索