本文說明將非 PowerScale 之 Hadoop 環境備份至 Dell PowerScale Cluster 的建議最佳實務。Dell PowerScale 強大的糾刪碼資料保護可提供超過 80% 的儲存效率,是 Hadoop 叢集資料的理想備份目標。DistCp (分散式副本) 是隨附於所有 Hadoop 發佈和版本的標準工具。DistCp 可以複製整個 Hadoop 目錄。DistCp 會以 MapReduce 工作執行,以並行方式執行文件複製,並在有需要時完全運用您的系統。另外還可以透過限制頻寬的選項,以控制對其他工作的影響。
環境
本文使用下列測試環境:
由於 DistCp 是標準的 Hadoop 工具,因此本文件概述的方法適用於大多數的 Hadoop 發佈和版本。
閱讀本文件時,我們假設要備份的資料位於 PHD Hadoop HDFS 叢集的 /mydata 目錄中。此範例會將此資料備份至 PowerScale Cluster,位於 /ifs/hadoop/backup/mydata 目錄中。
圖 1:將 Hadoop 叢集備份至 Isilon
最簡單的備份命令如下所示:
[gpadmin@phddas2-0 ~]$ hadoop distcp -skipcrccheck -update /mydata hdfs://all-nc-s-hdfs/backup/mydata
您可以在已安裝 Hadoop 用戶端 (hadoop) 的任何主機上執行以上命令。執行此命令的使用者必須具備讀取來源檔案和寫入目標檔案的權限。
必須指定 -skipcrccheck 和 -update 選項,以避免針對放置在 PowerScale Cluster 上的目標檔案進行 CRC 檢查。PowerScale 不會儲存 Hadoop CRC,其計算成本太貴。因此必須使用這些選項,以避免與 CRC 檢查相關的錯誤。
下一個參數「/mydata」是來源 Hadoop 叢集上的來源路徑。這也可以使用「/」以備份整個 HDFS 命名空間。由於路徑並非完全合格,因此會使用 core-site.xml 中 fs.defaultFS 參數指定的 HDFS NameNode。
最後的參數「hdfs://all-nc-s-hdfs/backup/mydata」是 PowerScale Cluster 上的目標路徑。主機部分的「all-nc-s-hdfs」可以是相對或完整符合資格的 DNS 名稱,例如 all-nc-s-hdfs.example.com。它應該是您 PowerScale Cluster 的 SmartConnect Zone DNS 名稱。目錄部分的「/backup/mydata」是相對於 PowerScale Cluster 存取區域中定義的 HDFS 根路徑。如果您的 HDFS 根路徑為 /ifs/hadoop,則此值代表 /ifs/hadoop/backup/mydata 目錄中。
若檔案在來源和目標目錄中的大小相同,便會假設其並未變更,且不會複製。明確來說,不會使用檔案的時間戳記來判斷檔案是否經過變更。如需 DistCp 的詳細資料,請參閱 Hadoop DistCp 版本 2 指南。
複製權限
根據預設,目標檔案的擁有者、群組和權限會重設為由啟動 DistCp 的使用者所建立的新檔案預設值。將會遺失來源檔案所定義的任何擁有者、群組和權限。若要保留來源檔案中的資訊,請使用 -p 選項。由於 -p 選項必須執行 chown/chgrp,因此啟動 DistCp 的使用者必須是目標系統上的超級使用者。PowerScale Cluster 上的 root 使用者可進行此操作。例如: [root@phddas2-0 ~]$ hadoop distcp -skipcrccheck -update -pugp /mydata hdfs://all-nc-s-hdfs/backup/mydata
使用快照作為備份來源
備份大型資料集可能需要很長時間。在 DistCp 程序開始時,掃描目錄結構中存在的檔案,可能會在複製該檔案後遺失。這樣的檔案變更會產生錯誤。此外,應用程式可能需要一致的單一時間點備份才能使用。若要處理這些問題,建議您建立來源的 HDFS 快照,以確保資料集不會在備份程序期間變更。這與目標 PowerScale Cluster 的 SnapshotIQ 功能無關。
若要使用 HDFS 快照,您必須先允許為特定目錄拍攝快照:[gpadmin@phddas2-0 ~]$ hdfs dfsadmin -allowSnapshot /mydata
Allowing snapshot on /mydata succeeded
在使用 DistCp 備份前建立 HDFS 快照:
[gpadmin@phddas2-0 ~]$ hdfs dfs -createSnapshot /mydata backupsnap Created snapshot /mydata/.snapshot/backupsnap
快照的名稱為 backupsnap。您可以在 HDFS 路徑 /mydata/.snapshot/backupsnap 存取快照。在後續備份中,將不會反映 HDFS 檔案在此快照之後的任何變更。您可以使用下列命令將快照備份至 PowerScale:
[gpadmin@phddas2-0 ~]$ hadoop distcp -skipcrccheck -update /mydata/.snapshot/backupsnap hdfs://all-nc-s-hdfs/backup/mydata
備份命令執行完成後,您可以刪除快照。如此可釋出保留在拍攝快照後修改之舊版檔案的空間:
[gpadmin@phddas2-0 ~]$ hdfs dfs -deleteSnapshot /mydata backupsnap
使用 PowerScale 快照作為備份目標
除了使用快照作為備份來源之外,您也可能希望保留多個備份目標目錄的快照,以還原舊版檔案。
若要在 PowerScale 上建立快照,您必須擁有 SnapshotIQ 授權。您可以使用 Web 管理員介面或 CLI 建立快照。若要使用 CLI 手動建立單一 PowerScale 快照,請透過 SSH 進入任何 PowerScale Node,並執行下列步驟:all-nc-s-1# isi snapshot snapshots create /ifs/hadoop/backup/mydata --name backup-2014-07-01 --expires 1D --verbose
Created snapshot backup-2014-07-01 with ID 6
您可以在下方「排程備份」一節中所述的備份程序中增加此命令。
如需有關 PowerScale OneFS 快照的詳細資料,請參閱適用您 OneFS 版本的 PowerScale OneFS CLI 管理員指南:PowerScale OneFS 資訊中心
適用於多個 PowerScale Cluster 的 SYNCIQ 複寫
在 DistCp 備份至 PowerScale Cluster 完成後,您可以使用 OneFS SyncIQ 將快照跨 WAN 複製到其他 PowerScale Cluster。複製的快照可為您的災難回復提供多樣化的高效率元件。
圖 2:適用於多個 Isilon Cluster 的 SynIQ 複寫
處理已刪除檔案
根據預設,從來源 Hadoop 叢集刪除的檔案不會從目標 Hadoop 叢集刪除。如果您需要進行此行為,請在 DistCp 命令加上 -delete 變數。使用此命令時,建議您在備份目標上使用快照,以復原已刪除的檔案。
排程備份
您可以使用多種方法自動化和排程備份 Hadoop 叢集的步驟。在自動化 Hadoop 工作時經常會使用 Apache Oozie,並直接支援 DistCp。也可使用 CRON 執行 Shell 指令檔。若要在 SSH 工作階段中自動執行命令,請啟用無密碼 SSH。無密碼 SSH 可讓 CRON 使用者連線至您的 Hadoop 用戶端和 PowerScale Cluster (若使用 SnapshotIQ)。
由於 PowerScale 支援 HDFS,因此可透過與來源檔案相同的方式,從 Hadoop 應用程式存取 PowerScale 上的備份目標檔案。您可以直接使用備份資料,而不必先將其還原至原本的來源 Hadoop 環境。此功能可節省分析的時間。例如,如果您執行的 MapReduce 命令如下:hadoop jar /usr/lib/gphd/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep /mydata/mydataset1 output1 ABC
您可以使用下列命令,針對 PowerScale 的備份資料集執行 MapReduce 工作:hadoop jar /usr/lib/gphd/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep hdfs://all-nc-s-hdfs/backup/ /mydata/mydataset1 output1 ABC
若要指定完整符合資格的 Hadoop 路徑,而不使用 fs.defaultFS 參數,請洽詢您的應用程式供應商,以取得詳細資料。此外,若 PowerScale Cluster 是專為備份與歸檔封存 (而非高效能) 所設計,則可能無法提供與主要 Hadoop 環境相同的效能。建議進行測試,或洽詢 Dell PowerScale,以進行適當的規模調整。