全部產品
Search
文件中心

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

更新時間:Jun 19, 2024

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

    例如,在將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

(可選)在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使用說明