本文介紹如何使用阿里雲Jindo DistCp在OSS-HDFS服務不同Bucket之間遷移資料。
前提條件
已建立阿里雲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。
步驟一:下載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
(可選)在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更多參考
關於Jindo DistCp的其他使用情境,請參見Jindo DistCp使用說明。