<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    如何有效恢復誤刪的HDFS文件

    VSole2022-07-29 20:21:39

    HDFS是大數據領域比較知名的分布式存儲系統,作為大數據相關從業人員,每天處理HDFS上的文件數據是常規操作。這就容易帶來一個問題,實際操作中對重要數據文件的誤刪,那么如何恢復這些文件,就顯得尤為重要。

    本文針對誤刪HDFS文件的問題,通過利用HDFS的內部機制,提供了以下幾種方法:

    1.回收站機制恢復

    HDFS提供了回收站功能,當我們執行hdfs dfs -rm -r some_file命令后,文件不會被立即刪除。而是先將要刪除的數據移動到當前用戶的.Trash目錄下,待超過一定時間(可通過參數配置)后才會真正執行刪除的操作。

    首先看個例子:

    [root@bigdatalearnshare-3 ~]# hdfs dfs -rm -r /bigdatalearnshare/test/stats.json 
    20/07/24 16:42:35 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 360 minutes, Emptier interval = 0 minutes.
    20/07/24 16:42:35 INFO fs.TrashPolicyDefault: Moved: 'hdfs://bigdatalearnshare-1:9000/bigdatalearnshare/test/stats.json' to trash at: hdfs://bigdatalearnshare-1:9000/user/root/.Trash/Current/bigdatalearnshare/test/stats.json
    Moved: 'hdfs://bigdatalearnshare-1:9000/bigdatalearnshare/test/stats.json' to trash at: hdfs://bigdatalearnshare-1:9000/user/root/.Trash/Current
    

    從上面的例子可以看出,我們在刪除文件stats.json時,stats.json會被移到/user/root/.Trash/Current目錄下:

    [root@bigdatalearnshare-3 ~]# hdfs dfs -ls /user/root/.Trash/Current/bigdatalearnshare/test
    Found 1 items
    -rw-r--r--   1 root supergroup        147 2020-07-24 16:42 /user/root/.Trash/Current/bigdatalearnshare/test/stats.json
    

    如果我們刪除該文件的操作為誤操作,此時HDFS的回收站機制就發揮重大作用了。我們只需到回收站中找到誤刪的文件,然后移動(mv)到原來的目錄,即可恢復誤刪的數據。

    注意:HDFS的回收站機制默認是關閉的,需要我們在配置文件core-site.xml中配置一些參數,具體如下:

    <property>
         <name>fs.trash.interval</name>
         <value>360</value>
         <description>檢查點被刪除后的分鐘數。如果為零,垃圾桶功能將被禁用。
         該選項可以在服務器和客戶端上配置。如果垃圾箱被禁用服務器端,則檢查客戶端配置。
         如果在服務器端啟用垃圾箱,則會使用服務器上配置的值,并忽略客戶端配置值。
         </description>
    </property>
    <property>
         <name>fs.trash.checkpoint.interval</name>
         <value>0</value>
         <description>垃圾檢查點之間的分鐘數。應該小于或等于fs.trash.interval。
         如果為零,則將該值設置為fs.trash.interval的值。每次檢查指針運行時,
         它都會從當前創建一個新的檢查點,并刪除比fs.trash.interval更早創建的檢查點。
         </description>
    </property>
    

    注意:通過回收站恢復誤刪的數據,要求時間不能超過fs.trash.interval配置的時間。

    生產中為了防止誤刪數據,建議開啟HDFS的回收站機制。


    2.快照機制恢復

    HDFS快照是文件系統的只讀時間點副本。可以在文件系統的子樹或整個文件系統上創建快照。

    一個快照是一個全部文件系統、或者某個目錄在某一時刻的鏡像。快照的一些常見用例是數據備份,利用快照可以對重要數據進行恢復,防止用戶錯誤性的操作,管理員可以通過以滾動的方式周期性設置一個只讀的快照,這樣就可以在文件系統上有若干份只讀快照。如果用戶意外地刪除了一個文件,就可以使用包含該文件的最新只讀快照來進行恢復。

    HDFS的快照的特征如下:

    1. 快照的創建是瞬間的,代價為O(1),取決于子節點掃描文件目錄的時間
    2. 當且僅當做快照的文件目錄下有文件更新時才會占用小部分內存,占用內存的大小為O(M),其中M為更改文件或者目錄的數量
    3. 新建快照的時候,Datanode中的block不會被復制,快照中只是記錄了文件塊的列表和大小信息快照不會影響正常的HDFS的操作
    4. 對做快照之后的數據進行的更改將會按照時間順序逆序的記錄下來,用戶訪問的還是當前最新的數據,快照里的內容為快照創建的時間點時文件的內容減去當前文件的內容

    下面我們來實操說明如何利用快照恢復誤刪除的文件:

    創建快照

    為目錄/bigdatalearnshare/snapshot創建名為snapshot-test的快照:

    [root@bigdatalearnshare-3 ~]#  hdfs dfsadmin -allowSnapshot /bigdatalearnshare/snapshot
    Allowing snaphot on /bigdatalearnshare/snapshot succeeded
    [root@bigdatalearnshare-3 ~]# hdfs dfs -createSnapshot /bigdatalearnshare/snapshot snapshot-test
    Created snapshot /bigdatalearnshare/snapshot/.snapshot/snapshot-test
    

    誤刪除操作

    因為我們為/bigdatalearnshare/snapshot創建了快照,此時我們無法刪除該目錄:

    [root@bigdatalearnshare-3 ~]# hdfs dfs -rm -r /bigdatalearnshare/snapshot
    20/07/24 17:06:52 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 360 minutes, Emptier interval = 0 minutes.
    rm: Failed to move to trash: hdfs://bigdatalearnshare-1:9000/bigdatalearnshare/snapshot: The directory /bigdatalearnshare/snapshot cannot be deleted since /bigdatalearnshare/snapshot is snapshottable and already has snapshots
    

    但是我們可以hdfs dfs -rm -r命令該目錄下文件。

    如果此時,我們誤刪了該目錄下的重要文件,我們就可以通過快照機制進行文件的恢復。具體如下:

    [root@bigdatalearnshare-3 ~]# hdfs dfs -ls /bigdatalearnshare/snapshot/.snapshot/snapshot-test                                       
    Found 1 items
    -rw-r--r--   1 root supergroup        147 2020-07-24 17:00 /bigdatalearnshare/snapshot/.snapshot/snapshot-test/stats.json
    [root@bigdatalearnshare-3 ~]# hdfs dfs -cp /bigdatalearnshare/snapshot/.snapshot/snapshot-test/stats.json /bigdatalearnshare/snapshot  
    [root@bigdatalearnshare-3 ~]# hdfs dfs -ls /bigdatalearnshare/snapshot
    Found 1 items
    -rw-r--r--   1 root supergroup        147 2020-07-24 17:14 /bigdatalearnshare/snapshot/stats.json
    

    注意:快照機制進行文件的恢復,我們要用cp命令,不能用mv,因為快照在這里是只讀的。

    [root@bigdatalearnshare-3 ~]# hdfs dfs -mv /bigdatalearnshare/snapshot/.snapshot/snapshot-test/stats.json /bigdatalearnshare/snapshot
    mv: Modification on a read-only snapshot is disallowed
    

    3.編輯日志(edits)恢復

    通過編輯日志恢復HDFS文件,適用于Hadoop集群沒有開啟回收站機制,也沒有對重要數據進行快照處理的場景。

    但是這種方式存在很大弊端,文件的恢復存在以下幾種情況: 

    1)全部恢復

    2)部分恢復

    3)完全沒有回復

    這個主要和集群的繁忙狀態有很大關系。而且通過這種方式恢復誤刪文件的代價很高,具體看以下介紹:

    刪除文件:

    因為剛才開啟了HDFS回收站機制,為了模擬文件被立刻刪除的情況,此處通過指定-skipTrash參數跳過回收站回收:

    hdfs dfs -rm -r -skipTrash /bigdatalearnshare/testlog/stats.json
    

    恢復數據

    NameNode在收到刪除命令時,會先將這個命令寫到edits中,然后會告訴DataNode執行真正的文件刪除操作。

    所以我們在誤刪文件后,需要做的是立刻停止NameNode和DataNode節點,阻止刪除命令的執行。然后找到執行刪除操作發生時間對應的edits日志。

    本次測試時,edits文件為edits_inprogress_0000000000000003454,該文件是二進制的形式,我們可以通過HDFS命令將這個文件轉換成可讀的xml形式,如下:

    hdfs oev -i edits_inprogress_0000000000000003454 -o edits_inprogress_0000000000000003454.xml
    

    在edits_inprogress_0000000000000003454.xml中查找刪除/bigdatalearnshare/testlog下文件stats.json的命令記錄:

    <EDITS>
      <RECORD>
        <OPCODE>OP_DELETE</OPCODE>
        <DATA>
          <TXID>3462</TXID>
              <LENGTH>0</LENGTH>
              <PATH>/bigdatalearnshare/testlog/stats.json</PATH>
              <TIMESTAMP>1595582828526</TIMESTAMP>
              <RPC_CLIENTID>dd918895-1482-4b0a-ab8e-d3b2b87c430d</RPC_CLIENTID>
              <RPC_CALLID>1</RPC_CALLID>
          </DATA>
      </RECORD>
    </EDITS>
    

    OP_DELETE代表刪除操作,我們可以將這個標記修改為安全的操作(如OP_SET_PERMISSIONS),如果這個命令在最后,可以直接刪除,然后保存。再將修改后的編輯日志轉換成計算機能夠識別的格式:

    hdfs oev -i edits_inprogress_0000000000000003454.xml -o edits_inprogress_0000000000000003454 -p binary
    

    最后再啟動NameNode和DataNode節點,查看誤刪文件的恢復情況。

    存儲快照hdfs
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    分布式存儲作為湖倉一體技術的重要支撐,也隨著湖倉一體技術在不斷演進。作為存儲系統,除了提供原有的數據共享訪問、靈活擴展、快照、克隆、容災等功能外,還需要為湖倉一體的上層應用提供特定的服務能力。
    大數據是指大型復雜的結構化或非結構化數據集。大數據技術使組織能夠生成、收集、管理、分析和可視化大數據集,并為診斷、預測或其他決策任務提供見解。處理大數據的關鍵問題之一是采用適當的大數據治理框架,這樣可以:①以所需的方式管理大數據,以支持有效機器學習的高質量數據訪問;②確保該框架規范存儲和處理在相關監管框架內以可信賴的方式收集來自供應商和用戶的數據。提出了一個大數據治理框架,指導組織在相關的規則框架
    近來年,在中央新發展理念的引領下,江蘇江南農村商業銀行股份有限公司(以下簡稱江南農村商業銀行)實現平穩快速可持續發展。隨著銀行業務量的增長,其生成的數據呈幾何級增長,傳統的內部審計工作模式面臨著前所未有的挑戰。稽核審計部為應對挑戰,積極擁抱大數據技術,引入華為大數據Elk集群,建設大數據審計系統。
    數據存儲提供商Spectra Logic公司對該公司如何抵御勒索軟件攻擊并從中恢復進行了闡述和分析。
    由于云環境資源高度整合且邊界不清晰,因此存在安全風險,此外目前缺乏對云平臺安全狀態的全面認知,阻礙了云平臺進一步的應用和發展。根據云計算應用典型系統架構特點,全面梳理云計算環境所面臨的各種安全威脅,并針對云計算環境分層體系架構特點,結合現有的云安全標準和規范,研究了云計算的安全防護體系,提出了基于統一安全的策略,設計和構建了云安全監管體系。
    隨著云計算的興起,數據庫即服務(Databaseas a Service,DBaaS)也走入了大眾視野,被越來越多的企業應用于日常業務運營。真正的DBaaS,是由云服務商提供服務,用戶不需要用專業的運維團隊來維護服務器的運轉。一些物理和虛擬化的硬件設備,包括操作系統、網絡、相關的資源配置等,都可以通過云的形式,一鍵完成設置,然后通過一個簡單的API調用,將應用程序連接起來。像微軟Azure、AWS
    VMware發布了最新的成果,通過端到端零信任架構為端點、虛擬機和容器提供一致的安全性。VMware Carbon Black Cloud平均每天記錄1.2萬億個安全事件,并在最近90天周期內幫助阻止了超100萬次勒索軟件攻擊。
    一、發展動向熱訊
    鑒于每11秒就會發生一次網絡攻擊或勒索軟件攻擊,組織機構需持續地實施安全需求,以保護關鍵任務型數據和敏感數據。SnapVX能為PowerMax陣列節省空間并高效地開展本地復制。在資源有限的情況下,SnapVX會保留安全快照,將傳統快照置于失效狀態以便釋放資源1024。安全快照和傳統快照都是強大的工具,可幫助組織機構保護和快速恢復數據,從而盡可能減輕惡意軟件或勒索軟件攻擊的影響。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类