背景

當前業界有很多公司是以Hadoop技術構建資料中心,而越來越多的公司和企業希望將業務順暢地遷移到雲上。

在阿里雲上使用最廣泛的儲存服務是Object Storage Service。OSS的資料移轉工具ossimport2可以將您本地或第三方雲端儲存體服務上的檔案同步到OSS上,但這個工具無法讀取Hadoop檔案系統的數據,從而發揮Hadoop分布式的特點。並且,該工具只支援本地檔案,需要將HDFS上的檔案先下載到本地,再通過工具上傳,整個過程耗時又耗力。

阿里雲E-MapReduce團隊開發的Hadoop資料移轉工具emr-tools,能讓您從Hadoop叢集隨即轉移數據到OSS上。

本文介紹如何快速地將Hadoop檔案系統(HDFS)上的資料移轉到OSS。

前提條件

確保當前機器可以正常訪問您的Hadoop叢集,即能夠用Hadoop命令訪問HDFS。

hadoop fs -ls /

Hadoop資料移轉到OSS

  1. 下載emr-tools
    说明
    emr-tools相容Hadoop 2.4.x、2.5.x、2.6.x、2.7.x版本,如果有其他Hadoop版本相容性的需求,請提交工單
  2. 解壓縮工具到本地目錄。
    tar jxf emr-tools.tar.bz2
  3. 複製HDFS數據到OSS上。
    cd emr-tools
    ./hdfs2oss4emr.sh /path/on/hdfs oss://accessKeyId:accessKeySecret@bucket-name.oss-cn-hangzhou.aliyuncs.com/path/on/oss

    參數說明如下。

    參數 說明
    accessKeyId 訪問OSS API的密鑰。

    獲取方式請參見如何獲取如何獲取AccessKeyId和AccessKeySecret

    accessKeySecret
    bucket-name.oss-cn-hangzhou.aliyuncs.com OSS的訪問網域名稱,包括bucket名稱和endpoint地址。

    系統將啟動一個Hadoop MapReduce任務(DistCp)。

  4. 運行完畢之後會顯示本次資料移轉的資訊。資訊內容類別似如下所示。
    17/05/04 22:35:08 INFO mapreduce.Job: Job job_1493800598643_0009 completed successfully
    17/05/04 22:35:08 INFO mapreduce.Job: Counters: 38
     File System Counters
             FILE: Number of bytes read=0
             FILE: Number of bytes written=859530
             FILE: Number of read operations=0
             FILE: Number of large read operations=0
             FILE: Number of write operations=0
             HDFS: Number of bytes read=263114
             HDFS: Number of bytes written=0
             HDFS: Number of read operations=70
             HDFS: Number of large read operations=0
             HDFS: Number of write operations=14
             OSS: Number of bytes read=0
             OSS: Number of bytes written=258660
             OSS: Number of read operations=0
             OSS: Number of large read operations=0
             OSS: Number of write operations=0
     Job Counters
             Launched map tasks=7
             Other local map tasks=7
             Total time spent by all maps in occupied slots (ms)=60020
             Total time spent by all reduces in occupied slots (ms)=0
             Total time spent by all map tasks (ms)=30010
             Total vcore-milliseconds taken by all map tasks=30010
             Total megabyte-milliseconds taken by all map tasks=45015000
     Map-Reduce Framework
             Map input records=10
             Map output records=0
             Input split bytes=952
             Spilled Records=0
             Failed Shuffles=0
             Merged Map outputs=0
             GC time elapsed (ms)=542
             CPU time spent (ms)=14290
             Physical memory (bytes) snapshot=1562365952
             Virtual memory (bytes) snapshot=17317421056
             Total committed heap usage (bytes)=1167589376
     File Input Format Counters
             Bytes Read=3502
     File Output Format Counters
             Bytes Written=0
     org.apache.hadoop.tools.mapred.CopyMapper$Counter
             BYTESCOPIED=258660
             BYTESEXPECTED=258660
             COPY=10
    copy from /path/on/hdfs to oss://accessKeyId:accessKeySecret@bucket-name.oss-cn-hangzhou.aliyuncs.com/path/on/oss does succeed !!!
  5. 您可以用osscmd等工具查看OSS上數據情況。
    osscmd ls oss://bucket-name/path/on/oss

OSS資料移轉到Hadoop

如果您已經在阿里雲上搭建了Hadoop叢集,可以使用如下命令把數據從OSS上遷移到新的Hadoop叢集。

./hdfs2oss4emr.sh oss://accessKeyId:accessKeySecret@bucket-name.oss-cn-hangzhou.aliyuncs.com/path/on/oss /path/on/new-hdfs

更多使用場景

除了線下的叢集,在ECS上搭建的Hadoop叢集也可以使用emr-tools,將自建叢集迅速地遷移到E-MapReduce服務上。

如果您的叢集已經在ECS上,但是在經典網路中,無法和VPC中的服務做很好的互操作,所以想把叢集遷移到VPC中。可以按照如下步驟遷移:

  1. 使用emr-tools遷移數據到OSS上。
  2. 在VPC環境中新建一個叢集(自建或使用E-MapReduce服務)。
  3. 將數據從OSS上遷移到新的HDFS叢集中。

如果你使用E-MapReduce服務,還可以直接在Hadoop叢集中通過SparkMapReduceHive等組件訪問OSS,這樣不僅可以減少一次數據複製(從OSS到HDFS),還可以極大的降低儲存成本。有關降低成本的詳細資料,請參見EMR+OSS:計算與儲存分離