本文介紹如何使用阿里雲Jindo DistCp在OSS-HDFS服務不同Bucket之間遷移資料。
前提條件
-
已建立阿里雲EMR-5.6.0或EMR-3.40.0及以上版本的叢集。具體步驟,請參見建立叢集。
-
自建ECS叢集需具備Hadoop2.7+或3.x環境及MapReduce作業能力。通過自建ECS叢集完成遷移任務前,需要自行部署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。
步驟一:下載JAR包
下載地址,請參見GitHub。
步驟二:配置OSS-HDFS服務的AccessKey
您可以通過以下任意方式配置OSS-HDFS服務的AccessKey:
在樣本命令中配置AccessKey
hadoop jar jindo-distcp-tool-${version}.jar --src oss://srcbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --dest oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret --parallelism 10通過設定檔預先配置AccessKey
將OSS-HDFS的fs.oss.accessKeyId、fs.oss.accessKeySecret預先配置在Hadoop的core-site.xml檔案裡。樣本命令如下:
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>LTAI********</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>KZo1********</value> </property> </configuration>
步驟三:配置OSS-HDFS服務Endpoint
訪問OSS-HDFS服務時需要配置Endpoint。推薦訪問路徑格式為oss://<Bucket>.<Endpoint>/<Object>,例如oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampleobject.txt。配置完成後,JindoSDK會根據訪問路徑中的Endpoint訪問對應的OSS-HDFS服務介面。
您還可以通過其他方式配置OSS-HDFS服務Endpoint,且不同方式配置的Endpoint存在生效優先順序。更多資訊,請參見配置Endpoint的其他方式。
步驟四:在OSS-HDFS服務不同Bucket之間全量遷移資料
以下以Jindo DistCp 4.4.0版本為例,您可以根據實際環境替換對應的版本號碼。
使用相同的AccessKey將同一個Region下Bucket A的資料移轉至Bucket B
命令格式
hadoop jar jindo-distcp-tool-${version}.jar --src oss://bucketname.region.oss-dls.aliyuncs.com/ --dest oss://bucketname.region.oss-dls.aliyuncs.com/ --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret --parallelism 10參數及選項說明如下:
參數及選項
說明
樣本
--src
待遷移或拷貝的OSS-HDFS服務中源Bucket的完整路徑。
oss://srcbucket.cn-hangzhou.oss-dls.aliyuncs.com/
--dest
OSS-HDFS中存放遷移或拷貝資料的目標Bucket的完整路徑。
oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/
--hadoopConf
訪問OSS-HDFS服務的AccessKey ID和AccessKey Secret。
AccessKey ID
LTAI********AccessKey Secret
KZo1********
--parallelism
根據叢集資源調整任務並發數。
10
使用樣本
使用相同的AccessKey將華東1(杭州)地區下srcbucket的資料移轉至destbucket。
hadoop jar jindo-distcp-tool-4.4.0.jar --src oss://srcbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --dest oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --hadoopConf fs.oss.accessKeyId=LTAI******** --hadoopConf fs.oss.accessKeySecret=KZo1******** --parallelism 10
跨 Region 遷移
當源 Bucket 與目標 Bucket 位於不同地區時,--src 和 --dest 需分別指定不同 Region 的 OSS-HDFS Endpoint。以下樣本將華東 1(杭州)srcbucket 的資料移轉至華東 2(上海)destbucket:
hadoop jar jindo-distcp-tool-4.4.0.jar --src oss://srcbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --dest oss://destbucket.cn-shanghai.oss-dls.aliyuncs.com/ --hadoopConf fs.oss.accessKeyId=LTAI******** --hadoopConf fs.oss.accessKeySecret=KZo1******** --parallelism 10(可選)在OSS-HDFS服務不同Bucket之間增量遷移資料
如果您僅希望拷貝在上一次全量遷移或拷貝後源路徑下新增的資料,此時您可以結合--update選項完成資料的增量遷移或拷貝。
例如,您需要使用相同的AccessKey將華東1(杭州)地區下srcbucket的資料增量遷移至destbucket。
hadoop jar jindo-distcp-tool-4.4.0.jar --src oss://srcbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --dest oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --hadoopConf fs.oss.accessKeyId=LTAI******** --hadoopConf fs.oss.accessKeySecret=KZo1******** --update --parallelism 10--update 選項同樣適用於跨 Region 的增量遷移情境:僅複製源端有變更的檔案,適用於多次遷移或增量備份。以下樣本將華東 1(杭州)srcbucket 的資料增量遷移至華東 2(上海)destbucket:
hadoop jar jindo-distcp-tool-4.4.0.jar --src oss://srcbucket.cn-hangzhou.oss-dls.aliyuncs.com/ --dest oss://destbucket.cn-shanghai.oss-dls.aliyuncs.com/ --hadoopConf fs.oss.accessKeyId=LTAI******** --hadoopConf fs.oss.accessKeySecret=KZo1******** --update --parallelism 10跨地區容災說明
在 OSS-HDFS 功能支援列表中,跨地區複製(CRR)標註為不適用。CRR 在 Object 層執行複製,而 OSS-HDFS 中繼資料存放區在 .dlsdata 路徑下的系統檔案中,CRR 無法保證 HDFS 中繼資料層與 Object 層的一致性。因此,跨 Region 容災情境請使用本文介紹的 Jindo DistCp 遷移資料,不建議依賴 CRR。
使用限制
一次 Jindo DistCp 命令僅支援指定一個
--src和一個--dest,不支援一對多同步。如果在同一條命令中指定多個--dest,命令仍會執行成功,但資料僅寫入最後一個--dest指定的目標,其餘目標不會更新。如需將同一份資料同步到多個目標 Bucket,需多次執行 DistCp 命令,每次指定不同的
--dest。--disableChecksum:在命令中添加該選項可關閉 Checksum 校正,用於加速資料同步。
更多參考
關於Jindo DistCp的其他使用情境,請參見Jindo DistCp使用說明。