背景

現在、多くのデータセンターは Hadoop を使用して構築されており、その結果、サービスをクラウドに円滑に移行することを望む企業が増えています。

Object Storage Service (OSS) は、Alibaba Cloud で最も広く使われているストレージサービスです。 OSS データ移行ツール ossimport2 を使用すると、ローカルデバイスまたはサードパーティーのクラウドストレージサービスから OSS にファイルを同期できます。 ただし、ossimport2 は Hadoop ファイルシステムからデータを読み取ることができません。 その結果、Hadoop の分散構造を十分に活用できなくなります。 また、このツールはローカルファイルのみをサポートしています。 したがって、最初に Hadoop ファイルシステム (HDFS) からローカルデバイスにファイルをダウンロードしてから、ツールを使用してそれらをアップロードする必要があります。 このプロセスは多くの時間とエネルギーを消費します。

この問題を解決するために、Alibaba Cloud の E-MapReduce チームは Hadoop データ移行ツール emr-toolsを開発しました。 このツールを使用すると、Hadoop から直接 OSS にデータを移行できます。

この章では、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 アクセスドメイン名。

    システムは 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. OSS データに関する情報を表示するには、osscmd を使用します。
    osscmd ls oss://bucket-name/path/on/oss

OSS データを Hadoop に移行

Alibaba Cloud 上に 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 上にあって、従来のネットワーク内にある場合は、Virtual Private Cloud (VPC) のサービスとの良好な相互運用性は得られません。 この場合は、クラスターを VPC インスタンスに移行します。 クラスターを移行するには、次の手順に従います。

  1. emr-tools を使用してデータを OSS に移行します。
  2. VPC 環境で新しいクラスターを作成します (自分で作成するか E-MapReduce を使用します)。
  3. OSS から新しい HDFS クラスターにデータを移行します。

Hadoop クラスターで E-MapReduce を使用する場合は、SparkMapReduce、およびHiveを使用し、 OSS に直接アクセスします。 これにより、1 回のデータコピー操作 (OSS から HDFS へ) が回避されるだけでなく、ストレージコストも大幅に削減されます。コスト削減の詳細については、「EMR+OSS:Separated storage and computing」をご参照ください。