HDFS 系列六:DataNode 工作機制

6. HDFS 其他功能

6.1 集羣間數據拷貝

  1. scp 實現兩個遠程主機之間的文件複製
scp -r hello.txt root@master:/user/wj/hello.txt		// 推 push
scp -r root@master:/user/wj/hello.txt  hello.txt		// 拉 pull
scp -r root@master:/user/wj/hello.txt root@master:/user/wj   //是通過本地主機中轉實現兩個遠程主機的文件複製;如果在兩個遠程主機之間ssh沒有配置的情況下可以使用該方式。
  1. 採用 discp 命令實現兩個 Hadoop 集羣之間的遞歸數據複製
bin/hadoop distcp hdfs://master1:9000/user/wj/hello.txt hdfs://master2:9000/user/wj/hello.txt

6.2 Hadoop 存檔

6.2.1 理論概述

每個文件均按塊存儲,每個塊的元數據存儲在 Namenode 的內存中,因此 Hadoop 存儲小文件會非常低效

因爲大量的小文件會耗盡 Namenode 中的大部分內存

但注意,存儲小文件所需要的磁盤容量和存儲這些文件原始內容所需要的磁盤空間相比也不會增多

例如,一個 1MB 的文件以大小爲 128MB 的塊存儲,使用的是 1MB 的磁盤空間,而不是128MB

Hadoop 存檔文件或HAR文件,是一個更高效的文件存檔工具,它將文件存入 HDFS 塊,在減少 Namenode 內存使用的同時,允許對文件進行透明的訪問

具體說來,Hadoop 存檔文件可以用作 MapReduce 的輸入

6.2.2 案例實操

  1. 需要啓動 yarn 進程

    start-yarn.sh
    
  2. 歸檔文件

    歸檔成一個叫做 xxx.har 的文件夾,該文件夾下有相應的數據文件

    Xx.har目錄是一個整體,該目錄看成是一個歸檔文件即可

    bin/hadoop archive -archiveName myhar.har -p /user/wj   /user/my
    
  3. 查看歸檔

    hadoop fs -lsr /user/my/myhar.har
    hadoop fs -lsr har:///myhar.har
    
  4. 解歸檔文件

    hadoop fs -cp har:/// user/my/myhar.har /* /user/wj
    

6.3 快照管理

快照相當於對目錄做一個備份,並不會立即複製所有文件,而是指向同一個文件

當寫入發生時,纔會產生新文件

6.3.1 基本語法

  1. hdfs dfsadmin -allowSnapshot 路徑 (功能描述:開啓指定目錄的快照功能)

  2. dfs dfsadmin -disallowSnapshot 路徑 (功能描述:禁用指定目錄的快照功能,默認是禁用)

  3. hdfs dfs -createSnapshot 路徑 (功能描述:對目錄創建快照)

  4. hdfs dfs -createSnapshot 路徑 名稱 (功能描述:指定名稱創建快照)

  5. hdfs dfs -renameSnapshot 路徑 舊名稱 新名稱 (功能描述:重命名快照)

  6. hdfs lsSnapshottableDir (功能描述:列出當前用戶所有可快照目錄)

  7. hdfs snapshotDiff 路徑1 路徑2 (功能描述:比較兩個快照目錄的不同之處)

  8. hdfs dfs -deleteSnapshot (功能描述:刪除快照)

6.3.2 案例實操

  1. 開啓/禁用指定目錄的快照功能

    hdfs dfsadmin -allowSnapshot /user/wj/data		
    hdfs dfsadmin -disallowSnapshot /user/wj/data
    
  2. 對目錄創建快照

    hdfs dfs -createSnapshot /user/wj/data		// 對目錄創建快照
    

    通過web訪問hdfs://hadoop102:9000/user/wj/data/.snapshot/s……// 快照和源文件使用相同數據塊

    hdfs dfs -lsr /user/wj/data/.snapshot/
    
  3. 指定名稱創建快照

    hdfs dfs -createSnapshot /user/wj/data miao170508
    
  4. 重命名快照

    hdfs dfs -renameSnapshot /user/wj/data/ miao170508 wj111
    
  5. 列出當前用戶所有可快照目錄

    hdfs lsSnapshottableDir
    
  6. 比較兩個快照目錄的不同之處

    hdfs snapshotDiff /user/wj/data/  .  .snapshot/wj170508
    
  7. 恢復快照

    hdfs dfs -cp /user/wj/input/.snapshot/s20170708-134303.027 /user
    

6.4 回收站

6.4.1 默認回收站

默認值 fs.trash.interval=0,0 表示禁用回收站,可以設置刪除文件的存活時間

默認值 fs.trash.checkpoint.interval=0,檢查回收站的間隔時間

要求 fs.trash.checkpoint.interval <= fs.trash.interval

6.4.2 啓用回收站

修改 core-site.xml,配置垃圾回收時間爲 1 分鐘

<property>
    <name>fs.trash.interval</name>
    <value>1</value>
</property>

6.4.3 查看回收站

回收站在集羣中的路徑:/user/wj/.Trash/….

6.4.4 修改訪問垃圾回收站用戶名稱

進入垃圾回收站用戶名稱,默認是 dr.who,修改爲 wj 用戶

[core-site.xml]

<property>
  <name>hadoop.http.staticuser.user</name>
  <value>wj</value>
</property>

6.4.5 進入回收站

通過程序刪除的文件不會經過回收站,需要調用 moveToTrash() 才進入回收站

Trash trash = New Trash(conf);
trash.moveToTrash(path);

6.4.6 恢復回收站數據

hadoop fs -mv /user/wj/.Trash/Current/user/wj/input    /user/wj/input

6.4.7清空回收站

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