このトピックでは、Jindo DistCp の使用方法について説明します。
Jindo DistCp とは
Jindo DistCp は、Alibaba Cloud データレイクストレージチームが開発した分散コピーツールであり、大規模クラスター内またはクラスター間でファイルをコピーするために使用されます。 Jindo DistCp は MapReduce を使用してファイルを分散し、エラーを処理し、データを回復します。ファイルとディレクトリはマップタスクの入力として使用されます。各タスクは、入力リストにあるファイルとディレクトリの一部をコピーします。 Jindo DistCp は、Hadoop Distributed File System(HDFS)、OSS-HDFS、Object Storage Service(OSS)、および Amazon Simple Storage Service(Amazon S3)間での完全なデータコピーをサポートしています。また、Jindo DistCp はさまざまなコピーパラメーターとコピーポリシーも提供します。 Jindo DistCp を使用して HDFS から OSS-HDFS にデータをコピーする場合、カスタム CopyCommitter を使用して、ファイルの名前を変更せずにファイルをコピーできます。これにより、コピーがソースファイルと一致することが保証されます。 Jindo DistCp は、Amazon S3 DistCp および HDFS DistCp が提供するすべての機能をサポートしています。 HDFS DistCp と比較して、Jindo DistCp はデータコピーの効率、安定性、およびセキュリティを大幅に向上させます。
環境要件
Java Development Kit(JDK)1.8.0 をインストールする必要があります。
Hadoop 2.3 以降を使用している場合は、Jindo DistCp の最新の JAR パッケージをダウンロードする必要があります。 最新の jindosdk-${version}.tar.gz パッケージは、JindoData のダウンロード トピックに記載されているリンクからダウンロードできます。ダウンロードしたパッケージを解凍し、/tools フォルダーにある jindo-distcp-tool-x.x.x.jar パッケージを探します。
説明Jindo DistCp は、E-MapReduce(EMR)V5.6.0 以降のマイナーバージョンのクラスター、および EMR V3.40.0 以降のマイナーバージョンのクラスターにデプロイされています。 jindo-distcp-tool-x.x.x.jar パッケージは、/opt/apps/JINDOSDK/jindosdk-current/tools ディレクトリにあります。
パラメーター
Jindo DistCp は JAR パッケージを提供します。 hadoop jar コマンドを一連のパラメーターと共に使用して、ファイルをコピーできます。
パラメーター | 必須 | 説明 | デフォルト値 | バージョン | OSS | OSS-HDFS |
はい | ソースディレクトリを指定します。以下のプレフィックスがサポートされています。
| デフォルト値なし | 4.3.0 以降 | サポート対象 | サポート対象 | |
はい | コピー先のディレクトリを指定します。以下のプレフィックスがサポートされています。
| デフォルト値なし | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | DistCp ジョブで使用できる帯域幅を指定します。単位:MB。 | -1 | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | ファイルの圧縮と解凍に使用するコーデックを指定します。サポートされているコーデックは、gzip、gz、lzo、lzop、snappy です。 | keep(この値は、ファイルの圧縮や解凍を行わずにソースファイルをコピーすることを示します。) | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | OSS にコピーされるファイルのストレージクラス。サポートされているストレージクラスは、Standard、Infrequent Access(IA)、Archive、Cold Archive です。 | Standard | 4.3.0 以降 | サポート対象 | サポート対象外 | |
いいえ | フィルター条件を含むファイルを指定します。 | デフォルト値なし | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | 一致条件を含むファイルを指定します。 | デフォルト値なし | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | DistCp ジョブの並列度を指定します。このパラメーターは、MapReduce ジョブの mapreduce.job.maps パラメーターと同等です。 | 10 | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | DistCp ジョブで処理できるファイル数を指定します。 | 10000 | 4.5.1 以降 | サポート対象 | サポート対象 | |
いいえ | DistCp タスクで処理できるファイル数を指定します。 | 1 | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | 一時データを格納するために使用する HDFS 一時ディレクトリを指定します。 | /tmp | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | OSS または OSS-HDFS にアクセスするために使用する AccessKey ペアを指定します。 | デフォルト値なし | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | ファイルチェックサム機能を無効にするかどうかを指定します。 | false | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | ファイルをコピーした後にソースファイルを削除するかどうかを指定します。 | false | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | ジョブの原子性を確保するために、DistCp ジョブでトランザクションをサポートできるようにするかどうかを指定します。 | false | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | データコピー処理中に発生した例外を無視して、例外によって実行中のジョブが中断されないようにするかどうかを指定します。 | false | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | CloudMonitor の監視およびアラート機能を有効にするかどうかを指定します。 | false | 4.5.1 以降 | サポート対象 | サポート対象 | |
いいえ | DIF モードを使用するかどうかを指定します。 DIF モードでは、ソースファイルとコピー先ファイルの違いを記録するファイルが生成されます。 | DistCpMode.COPY | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | UPDATE モードを使用するかどうかを指定します。 UPDATE モードでは、コピー先ディレクトリに存在しないソースファイルや、コピー先ファイルと異なるソースファイルなど、増分ソースファイルのみがコピーされます。 | DistCpMode.COPY | 4.3.0 以降 | サポート対象 | サポート対象 | |
いいえ | メタデータをコピーするかどうかを指定します。 | false | 4.4.0 以降 | サポート対象外 | サポート対象 |
--src および --dest(必須)
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--src:ソースファイルのディレクトリを指定します。
--dest:コピー先ファイルのディレクトリを指定します。
コマンド例:
hadoop jar jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table // ソースディレクトリ /data/hourly_table 内のファイルを example-oss-bucket という名前の OSS バケットの /hourly_table ディレクトリにコピーします。--dest パラメーターを使用して、ソースファイルのコピー先ディレクトリを指定できます。上記のコマンド例を使用して、/data/hourly_table ディレクトリ内のファイルを example-oss-bucket という名前の OSS バケットの /hourly_table ディレクトリにコピーできます。 HDFS DistCp とは異なり、Jindo DistCp はデフォルトではソースディレクトリ内のファイルのみを指定されたコピー先ディレクトリにコピーします。ディレクトリはコピーしません。この問題を解決するには、--dest パラメーターでディレクトリを指定します。指定されたディレクトリがコピー先ディレクトリに存在しない場合、Jindo DistCp はディレクトリを作成します。
単一のファイルをコピーする場合は、--dest パラメーターでディレクトリを指定します。コマンド例:
hadoop jar jindo-distcp-tool-${version}.jar --src /test.txt --dest oss://example-oss-bucket/tmp // /test.txt ファイルを example-oss-bucket という名前の OSS バケットの /tmp ディレクトリにコピーします。--bandWidth
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--bandWidth:DistCp タスクが使用する帯域幅を指定します。単位:MB。これにより、単一の DistCp タスクが過剰な帯域幅リソースを占有することを防ぎます。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --bandWidth 6 // DistCp タスクが使用する帯域幅を 6 MB に制限します。--codec
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
OSS または OSS-HDFS 内のコピー先ファイルは、通常、圧縮されていないテキストファイルです。テキストファイルは、ストレージコストの制御やデータ分析には理想的ではありません。 Jindo DistCp では、--codec パラメーターを設定して、コピー先ファイルをオンラインで圧縮できます。これにより、ストレージリソースを節約できます。
--codec パラメーターは、ファイルの圧縮と解凍に使用するコーデックを指定します。有効な値:gzip、gz、lzo、lzop、snappy、none、keep。デフォルト値:keep。 none と keep の説明:
none:ソースファイルを圧縮せずにコピーします。ソースファイルが圧縮されている場合、Jindo DistCp はファイルを解凍します。
keep:ファイルの圧縮や解凍を行わずにソースファイルをコピーします。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --codec gz // gz コーデックを使用してファイルを圧縮します。コマンドを実行した後、コピー先ディレクトリ内のファイルを確認できます。出力は、ファイルが gz コーデックを使用して圧縮されていることを示しています。
[root@emr-header-1 opt]# hdfs dfs -ls oss://example-oss-bucket/hourly_table/2017-02-01/03
Found 6 items
-rw-rw-rw- 1 938 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/000151.sst.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/1.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/2.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/OPTIONS-000109.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp01.txt.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp06.txt.gz
オープンソースの Hadoop クラスターで lzo コーデックを使用する場合は、gplcompression のネイティブライブラリと hadoop-lzo パッケージをインストールする必要があります。 Hadoop クラスターがない場合は、他のコーデックを使用することをお勧めします。
--filters
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--filters:フィルター条件を含むファイルを指定します。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --filters filter.txt // filter.txt ファイルにフィルター条件を指定します。たとえば、filter.txt ファイルに .*test.* 文字列が含まれているとします。この場合、パスに test 文字列が含まれるファイルは OSS にコピーされません。
--srcPrefixesFile
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--srcPrefixesFile:一致条件を含むファイルを指定します。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --srcPrefixesFile prefixes.txt // prefixes.txt ファイルに一致条件を指定します。たとえば、prefixes.txt ファイルに .*test.* 文字列が含まれているとします。この場合、パスに test 文字列が含まれるファイルのみが OSS にコピーされます。
--parallelism
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--parallelism:DistCp ジョブの並列度を指定します。このパラメーターは、MapReduce ジョブの mapreduce.job.maps パラメーターと同等です。 mapreduce.job.maps パラメーターのデフォルト値は EMR では 10 です。クラスターリソースの使用状況に基づいて、--parallelism パラメーターの値を指定できます。
コマンド例:
jindo-distcp-tool-${version}.jar --src /opt/tmp --dest oss://example-oss-bucket/tmp --parallelism 20 // 並列度を 20 に設定します。--taskBatch
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--taskBatch:DistCp タスクで処理できるファイル数を指定します。デフォルト値:1。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --taskBatch 1 // タスクバッチサイズを 1 に設定します。--tmp
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--tmp:一時データを格納するために使用する HDFS 一時ディレクトリを指定します。デフォルト値は /tmp で、hdfs:///tmp/ を示します。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --tmp /tmp // 一時ディレクトリを /tmp に設定します。--hadoopConf
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--hadoopConf:非 EMR 環境、または AccessKey フリーアクセスがサポートされていないシナリオで、OSS または OSS-HDFS にアクセスするために使用する AccessKey ペアを指定します。 --hadoopConf パラメーターを使用して、AccessKey ペアを指定できます。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret // AccessKey ペアを指定します。OSS または OSS-HDFS にアクセスするために使用する AccessKey ペアを Hadoop の core-site.xml ファイルに追加することもできます。これにより、AccessKey ペアを毎回入力する必要がなくなります。たとえば、EMR コンソールの Hadoop-Common サービスの core-site.xml ファイルに次の情報を追加できます。
<configuration>
<property>
<name>fs.oss.accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>xxx</value>
</property>
</configuration> // core-site.xml ファイルに AccessKey ペアを追加します。--disableChecksum
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--disableChecksum:ファイルチェックサム機能を無効にするかどうかを指定します。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --disableChecksum // チェックサム機能を無効にします。--deleteOnSuccess
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--deleteOnSuccess:データをコピーする代わりにデータを移行するかどうかを指定します。このパラメーターを設定すると、コピー操作は mv コマンドを使用した操作に似ています。 Jindo DistCp はソースファイルをコピーしてから、ソースディレクトリからソースファイルを削除します。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --deleteOnSuccess // コピー後にソースファイルを削除します。--enableTransaction
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--enableTransaction:ジョブのトランザクションを有効にするかどうかを指定します。トランザクションは、ジョブレベルでのデータの整合性を確保するのに役立ちます。デフォルトでは、Jindo DistCp はタスクレベルでデータの整合性を確保します。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --enableTransaction // トランザクションを有効にします。--ignore
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--ignore:データコピー処理中に発生した例外を無視して、例外によって実行中のジョブが中断されないようにするかどうかを指定します。例外は Jindo DistCp カウンターに表示されます。 CloudMonitor の監視およびアラート機能が有効になっている場合、例外が発生すると、システムは指定された方法で通知を送信します。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --ignore // 例外を無視します。--diff
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--diff:DIF モードを使用するかどうかを指定します。 DIF モードでは、ソースファイルとコピー先ファイルの違いを記録するファイルが生成されます。ソースファイルをコピー先ディレクトリにコピーできなかった場合、コマンドを実行したディレクトリに、ソースファイルとコピー先ファイルの違いを記録するファイルが生成されます。 Jindo DistCp がコピー処理中に圧縮または解凍操作を実行した場合、--diff は正確なファイルサイズの差を返しません。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff // DIF モードを有効にします。コピー先ファイルがソースファイルと異なる場合、コマンドを実行したディレクトリにファイルの違いを記録するファイルが生成され、次の情報が表示されます。
JindoCounter
DIFF_FILES=1
コピー先ディレクトリが HDFS ディレクトリの場合、/path、hdfs://hostname:ip/path、または hdfs://headerIp:ip/path 形式でディレクトリを指定できます。 hdfs:///path や hdfs:/path などの他の形式はサポートされていません。
ソースファイルとコピー先ファイルのメタデータの違いを表示する場合は、--diff パラメーターと --preserveMeta パラメーターを設定できます。コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff --preserveMeta // DIF モードを有効にし、メタデータも比較します。--update
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象 |
--update:UPDATE モードを使用するかどうかを指定します。 UPDATE モードでは、コピー先ディレクトリに存在しないソースファイルや、コピー先ファイルと異なるソースファイルなど、増分ソースファイルのみがコピーされます。
Jindo DistCp ジョブが中断され、ファイルをコピー先ディレクトリにコピーできなかった場合、--update パラメーターを使用してこれらのファイルをコピーできます。特定のファイルがソースディレクトリに追加された場合、--update パラメーターを使用して、増分ファイルをコピー先ディレクトリにコピーすることもできます。
コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --update // UPDATE モードを有効にします。--policy
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート対象 | サポート対象外 |
--policy:OSS にコピーされるファイルのストレージクラス(Cold Archive、Archive、IA など)を指定します。このパラメーターを設定しない場合、デフォルトで Standard ストレージクラスが使用されます。
Cold Archive
このストレージクラスは特定のリージョンでのみサポートされています。詳細については、概要をご参照ください。コマンド例:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy coldArchive --parallelism 20 // Cold Archive ストレージクラスを使用します。Archive
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20 // Archive ストレージクラスを使用します。IA
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy ia --parallelism 20 // IA ストレージクラスを使用します。
--preserveMeta
バージョン | OSS | OSS-HDFS |
4.4.0 以降 | サポート対象外 | サポート対象 |
--preserveMeta:データコピー処理中にメタデータ(Owner、Group、Permission、Atime、Mtime、Replication、BlockSize、XAttrs、ACL メタデータなど)をコピーするかどうかを指定します。
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --preserveMeta // メタデータをコピーします。--jobBatch
バージョン | OSS | OSS-HDFS |
4.5.1 以降 | サポート対象 | サポート対象 |
--jobBatch:OSS にデータをコピーするときに、DistCp ジョブで処理できるファイル数を指定します。デフォルト値:10000。
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --jobBatch 50000 // jobBatch を 50000 に設定します。--enableCMS
バージョン | OSS | OSS-HDFS |
4.5.1 以降 | サポート対象 | サポート対象 |
Jindo DistCp カウンター
Jindo DistCp カウンターは、Jindo DistCp ジョブの実行結果を示します。次の表に、特定のカウンターについて説明します。
カウンター | 説明 |
COPY_FAILED | コピーに失敗したファイルの数。 |
CHECKSUM_DIFF | チェックサム検証に合格しなかったファイルの数。この数値は COPY_FAILED の値に追加されます。 |
FILES_EXPECTED | コピーされる予定のファイルの数。 |
BYTES_EXPECTED | コピーされる予定のバイト数。 |
FILES_COPIED | コピーされたファイルの数。 |
BYTES_COPIED | コピーされたバイト数。 |
FILES_SKIPPED | 増分更新中にスキップされたファイルの数。 |
BYTES_SKIPPED | 増分更新中にスキップされたバイト数。 |
DIFF_FILES | ソースディレクトリとコピー先ディレクトリで異なるファイルの数。 |
SAME_FILES | ソースディレクトリとコピー先ディレクトリで同一のファイルの数。 |
DST_MISS | コピー先ディレクトリに存在しないファイルの数。この数値は DIFF_FILES の値に追加されます。 |
LENGTH_DIFF | ソースディレクトリとコピー先ディレクトリでサイズが異なるファイルの数。この数値は DIFF_FILES の値に追加されます。 |
CHECKSUM_DIFF | チェックサム検証に合格しなかったファイルの数。この数値は DIFF_FILES の値に追加されます。 |
DIFF_FAILED | 正しく比較されなかったファイルの数。 |