如果您需要對HDFS數據進行備份、或者在HDFS存儲空間不足且需要彈性擴展存儲能力時,您可以通過阿里云EMR集群自動部署的Jindo DistCp工具將HDFS遷移數據到OSS-HDFS。OSS-HDFS與Hadoop生態系統兼容,將HDFS中的數據遷移到OSS-HDFS后,可以利用Hadoop生態系統的各種工具和框架進行數據處理和分析。
前提條件
已創建阿里云EMR-5.6.0及后續版本或EMR-3.40.0及后續版本的集群。具體步驟,請參見創建集群。
如果您使用的是自建ECS集群,需確保集群具備Hadoop2.7+或Hadoop3.x環境以及進行MapReduce作業的能力。通過自建ECS集群完成遷移任務前,您需要自行部署JindoData(JindoData包含JindoSDK以及JindoFSx)。建議跟隨版本迭代,下載最新版本。
已開通并授權訪問OSS-HDFS服務。具體操作,請參見開通并授權訪問OSS-HDFS服務。
背景信息
阿里云Jindo DistCp(分布式文件拷貝工具)用于大規模集群內部或集群之間拷貝文件。Jindo DistCp使用MapReduce實現文件分發,錯誤處理和恢復,把文件和目錄的列表作為MapReduce任務的輸入,每個任務會完成源列表中部分文件的拷貝。Jindo DistCp全量支持HDFS之間、HDFS與OSS之間、HDFS與OSS-HDFS之間以及OSS-HDFS之間數據拷貝場景,提供多種個性化拷貝參數和多種拷貝策略。
使用阿里云Jindo DistCp遷移數據時,有以下優勢:
效率高,在測試場景中最高可達到1.59倍的加速。
基本功能豐富,提供多種拷貝方式和場景優化策略。
深度結合OSS,對文件提供歸檔、壓縮等操作。
實現No-Rename拷貝,保證數據一致性。
場景全面,可完全替代Hadoop DistCp,目前支持Hadoop2.7+和Hadoop3.x。
操作步驟
登錄EMR集群。
單擊創建的EMR集群。
單擊節點管理頁簽,然后單擊節點組左側的。
單擊ECS ID。在ECS實例頁面,單擊實例ID右側的遠程連接。
如果您希望使用SSH方式(SSH密鑰對或SSH密碼)在Windows和Linux環境中登錄集群,請參見登錄集群。
將HDFS指定路徑下的數據遷移至OSS-HDFS。
執行以下命令查看HDFS下的數據。
hdfs dfs -ls /
返回結果如下:
Found 8 items drwxrwxrwx - admin supergroup 0 2023-10-26 10:55 /.sysinfo drwxrwxrwx - hadoop supergroup 0 2023-10-26 10:55 /apps drwxrwxrwx - root supergroup 0 2022-08-03 15:54 /data -rw-r----- 1 root supergroup 13 2022-08-25 11:45 /examplefile.txt drwxrwxrwx - spark supergroup 0 2023-10-26 14:49 /spark-history drwx-wx-wx - hive supergroup 0 2023-10-26 13:35 /tmp drwxrwxrwx - hive supergroup 0 2023-10-26 14:48 /user drwxrwxrwx - hadoop supergroup 0 2023-10-26 14:48 /yarn
切換至jindo-distcp-tool-${version}.jar包所在目錄。
cd /opt/apps/JINDOSDK/jindosdk-current/tools
查看隨EMR集群自動部署的jindo-distcp-tool的版本號。
ls
將HDFS中的數據遷移至OSS-HDFS。
全量遷移或拷貝數據
將HDFS指定目錄/tmp下的數據全量遷移或拷貝到OSS-HDFS目標路徑oss://examplebucket/dir。以jindo-distcp-tool-6.1.0.jar為例,您需要根據實際環境替換對應的版本號。
hadoop jar jindo-distcp-tool-6.1.0.jar --src /tmp/ --dest oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/ --hadoopConf fs.oss.accessKeyId=LTAI******** --hadoopConf fs.oss.accessKeySecret=KZo1******** --parallelism 10
示例中涉及的各參數或選項說明如下:
參數及選項
說明
示例
--src
待遷移或拷貝的HDFS數據所在的路徑。
/tmp/
--dest
OSS-HDFS中存放遷移或拷貝數據的目標路徑。
oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/
--hadoopConf
訪問OSS-HDFS服務的AccessKey ID和AccessKey Secret。
AccessKey ID
LTAI********
AccessKey Secret
KZo1********
--parallelism
根據集群資源調整任務并發數。
10
增量遷移或拷貝數據
如果您僅希望拷貝在上一次全量遷移或拷貝后源路徑下新增的數據,此時您可以結合--update選項完成數據的增量遷移或拷貝。
例如,將HDFS指定目錄data/下的數據增量遷移或拷貝到OSS-HDFS目標路徑oss://destbucket/dir下。
hadoop jar jindo-distcp-tool-6.1.0.jar --src /data/ --dest oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/ --hadoopConf fs.oss.accessKeyId=LTAI******** --hadoopConf fs.oss.accessKeySecret=KZo1******** --update --parallelism 10
相關文檔
如果您不希望在每一次執行遷移命令時都要手動添加Endpoint和AccessKey,您可以在Hadoop的配置文件core-site.xml中預先配置Endpoint和AccessKey。具體操作,請參見非EMR集群接入OSS-HDFS服務快速入門。
關于Jindo DistCp的其他使用場景,請參見Jindo DistCp使用說明。