全部產品
Search
文件中心

Object Storage Service:遷移OSS-HDFS服務不同Bucket之間的資料

更新時間:Sep 10, 2026

本文介紹如何使用阿里雲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

    例如,在將OSS-HDFS中srcbucket的資料移轉到destbucket的樣本中結合--hadoopConf選項配置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使用說明。