このトピックでは、JindoDistCp の使用方法を説明します。
JindoDistCp とは
JindoDistCp は、Alibaba Cloud データレイクストレージチームが開発した、クラスター内およびクラスター間での大規模なデータ転送を目的とした分散ファイルコピーツールです。MapReduce を使用してファイルを分散し、エラー処理と障害復旧を行います。MapReduce タスクの入力としてファイルとディレクトリのリストを受け取り、各タスクがソースリストの一部をコピーします。Hadoop 分散ファイルシステム (HDFS)、OSS-HDFS、OSS、S3 間のデータコピーシナリオを完全にサポートしています。さまざまなカスタムコピーパラメーターと戦略を提供します。HDFS から OSS-HDFS へのデータコピーに最適化されています。カスタム CopyCommitter を使用して No-Rename コピーを実行し、完了時にデータ整合性を保証します。その機能は、S3 DistCp および HDFS DistCp の機能と完全に一致しています。HDFS DistCp と比較して大幅なパフォーマンス向上を実現しています。JindoDistCp は、効率的、安定的、安全なデータコピーツールとして設計されています。
環境要件
JDK 1.8.0 以降
Hadoop 2.3 以降。最新バージョンの
jindo-distcp-tool-x.x.x.jarファイルをダウンロードする必要があります。この JAR ファイルは、jindosdk-${version}.tar.gzパッケージに含まれています。パッケージを解凍すると、tools/ディレクトリ内に JAR ファイルがあります。詳細については、「JindoData downloads」をご参照ください。説明JindoDistCp は、EMR V5.6.0 以降および EMR V3.40.0 以降を実行するクラスターにデプロイされています。
jindo-distcp-tool-x.x.x.jarファイルは、/opt/apps/JINDOSDK/jindosdk-current/tools ディレクトリ内にあります。
パラメーター
JindoDistCp は JAR パッケージとして提供されています。hadoop jar コマンドで一連のパラメーターを使用して、移行操作を実行できます。
パラメーター | パラメータータイプ | 説明 | デフォルト値 | バージョン | OSS | OSS-HDFS |
必須 | ソースディレクトリを指定します。次のプレフィックスがサポートされています:
| なし | 4.3.0 以降 | サポート | サポート | |
必須 | 宛先ディレクトリを指定します。次のプレフィックスがサポートされています:
| なし | 4.3.0 以降 | サポート | サポート | |
任意 | 単一ノードの帯域幅の上限を指定します。単位:MB。 | -1 | 4.3.0 以降 | サポート | サポート | |
任意 | 圧縮タイプを指定します。サポートされているコーデックは、gzip、gz、lzo、lzop、snappy です。 | keep (圧縮タイプは変更されません。) | 4.3.0 以降 | サポート | サポート | |
任意 | 宛先のストレージクラスを指定します。有効な値:Standard、IA、Archive、ColdArchive。 | Standard | 4.3.0 以降 | サポート | 非サポート | |
任意 | フィルター規則を含むファイルを指定します。 | なし | 4.3.0 以降 | サポート | サポート | |
任意 | コピー対象とするソースパスのプレフィックスリストを含むファイルを指定します。 | なし | 4.3.0 以降 | サポート | サポート | |
任意 | DistCp タスクの並列度を指定します。これは、MapReduce タスクの | 10 | 4.3.0 以降 | サポート | サポート | |
任意 | 各 DistCp ジョブで処理されるファイル数を指定します。 | 10000 | 4.5.1 以降 | サポート | サポート | |
任意 | 各 DistCp タスクで処理されるファイル数を指定します。 | 1 | 4.3.0 以降 | サポート | サポート | |
任意 | 一時ディレクトリを指定します。 | /tmp | 4.3.0 以降 | サポート | サポート | |
任意 | 構成を設定します。 | なし | 4.3.0 以降 | サポート | サポート | |
任意 | チェックサム検証を無効にします。 | false | 4.3.0 以降 | サポート | サポート | |
任意 | ソースファイルを削除します。データの移動に使用します。 | false | 4.3.0 以降 | サポート | サポート | |
任意 | トランザクションを有効にし、ジョブレベルの原子性を保証します。 | false | 4.3.0 以降 | サポート | サポート | |
任意 | タスクの中断を避けるために、コピー中にスローされた例外を無視します。 | false | 4.3.0 以降 | サポート | サポート | |
任意 | モニタリングとアラートを有効にします。 | false | 4.5.1 以降 | サポート | サポート | |
任意 | DistCp モードを DIFF に設定して、ソースと宛先のファイル間の差分を表示します。 | DistCpMode.COPY | 4.3.0 以降 | サポート | サポート | |
任意 | DistCp モードを 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_tabledest パスで宛先ディレクトリを指定できます。たとえば、上記のコマンドは /data/hourly_table から example-oss-bucket バケットの hourly_table ディレクトリにファイルをコピーします。この動作は Hadoop DistCp の動作とは異なります。デフォルトでは、JindoDistCp はソースディレクトリのすべてのファイルを指定された宛先パスにコピーしますが、ソースのルートディレクトリは含まれません。宛先パスに指定したディレクトリは、存在しない場合でも自動的に作成されます。
単一のファイルをコピーする場合、宛先にはディレクトリを指定する必要があります。
hadoop jar jindo-distcp-tool-${version}.jar --src /test.txt --dest oss://example-oss-bucket/tmp--bandWidth の使用
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート | サポート |
--bandWidth :DistCp タスクで単一のノードが使用できる帯域幅を MB 単位で指定します。このパラメーターを使用すると、単一のノードが帯域幅を過剰に消費するのを防ぎます。
以下はコマンドの例です。
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --bandWidth 6--codec の使用
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート | サポート |
ソースファイルは、ストレージコストやデータ分析の観点からは望ましくない非圧縮のテキストとして、OSS または OSS-HDFS に保存されることがよくあります。--codec オプションを使用すると、ファイルをオンラインで圧縮し、データを効率的に保存できます。
--codec はファイル圧縮のコーデックを指定します。gzip、gz、lzo、lzop、snappy のエンコーダー、およびキーワード none と keep (デフォルト) をサポートしています。キーワードの説明は次のとおりです:
none:ファイルを非圧縮で保存します。ソースファイルがすでに圧縮されている場合、JindoDistCp は解凍します。keep(デフォルト):圧縮状態を変更せずに、そのままファイルをコピーします。
コマンドの例は次のとおりです:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --codec 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 パッケージをインストールする必要があります。必要な環境がない場合は、別の圧縮方法を使用する必要があります。
--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 ファイルに .*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 ファイルに .*test.* が含まれている場合、パスに文字列「test」が含まれるファイルのみが OSS にコピーされます。
--parallelism の使用
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート | サポート |
--parallelism: MapReduce タスクの mapreduce.job.maps パラメーターを指定します。 E-MapReduce (EMR) 環境におけるこのパラメーターのデフォルト値は 10 です。クラスターリソースに基づいてこのパラメーターの値をカスタマイズし、DistCp タスクの同時実行数をコントロールできます。
コマンドの例は次のとおりです。
jindo-distcp-tool-${version}.jar --src /opt/tmp --dest oss://example-oss-bucket/tmp --parallelism 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--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 /tmpOSS または OSS-HDFS にアクセスするための AccessKey の設定
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート | サポート |
--hadoopConf : EMR 環境にいない場合や、パスワードレスアクセスサービスに問題がある場合は、このオプションを使用して OSS または OSS-HDFS にアクセスする 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 を入力しなくても済むように、Hadoop の core-site.xml ファイルに、OSS または OSS-HDFS 用の AccessKey ID と AccessKey Secret を事前に設定できます。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>--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-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --deleteOnSuccess--enableTransaction の使用
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート | サポート |
--enableTransaction:デフォルトでは、JindoDistCp はタスクレベルの完全性を保証します。このパラメーターを使用すると、ジョブレベルの完全性を保証し、ジョブ間のトランザクションサポートを有効にできます。
コマンドの例を次に示します。
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 :データ移行中に発生する例外を無視します。エラーはタスクを中断せず、代わりに JindoCounter の値として報告されます。CMS が有効になっている場合は、通知も送信されます。
以下はコマンドの例です。
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 :ソースとデスティネーションのファイルを比較します。ソースファイルがデスティネーションに同期されていない場合、差分を含むファイルがカレントディレクトリに生成されます。JindoDistCp タスクに圧縮または展開が含まれる場合、処理中にファイルサイズが変更されるため、--diff では正しいファイル差分を報告できません。
以下はコマンドの例です:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff差分が見つかった場合、差分を含むファイルがカレントディレクトリに生成され、次のメッセージが表示されます:
JindoCounter
DIFF_FILES=1--dest が 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--update の使用
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート | サポート |
--update: 増分同期を有効にします。このオプションは、同一のファイルとディレクトリをスキップし、ソースからデスティネーションに、新規または変更されたファイルとディレクトリのみを同期します。
JindoDistCp タスクが失敗した場合、このパラメーターを使用してブレークポイントからタスクを再開し、残りのファイルのみをコピーできます。また、このパラメーターを使用して、前回の JindoDistCp タスクの完了後にソースに追加された新規ファイルをコピーすることもできます。
以下はコマンドの例です。
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --updateOSS の Cold Archive、アーカイブ、または IA ストレージクラスへのデータ書き込み
バージョン | OSS | OSS-HDFS |
4.3.0 以降 | サポート | 非サポート |
--policy:OSS に書き込むデータのストレージクラスを指定します。このパラメーターは Cold Archive、アーカイブ、または IA に設定できます。このパラメーターを指定しない場合、データはデフォルトで標準ストレージクラスに書き込まれます。
OSS の Cold Archive ストレージクラス (coldArchive) へのデータ書き込み
この機能は特定のリージョンでのみ利用できます。詳細については、「OSS storage classes」をご参照ください。次にコマンドの例を示します。
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy coldArchive --parallelism 20OSS のアーカイブ ストレージクラス (archive) へのデータ書き込み
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20OSS の IA ストレージクラス (ia) へのデータ書き込み
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy ia --parallelism 20
--preserveMeta の使用
バージョン | OSS | OSS-HDFS |
4.4.0 以降 | 非対応 | 対応 |
--preserveMeta :メタデータをデータとともに移行することを指定します。メタデータには、所有者、グループ、パーミッション、Atime、Mtime、レプリケーション、ブロックサイズ、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:DistCp タスクが OSS にデータを書き込む場合、--jobBatch を使用して、各 DistCp ジョブが処理するファイル数を指定できます。デフォルト値は 10,000 です。
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --jobBatch 50000--enableCMS の使用
バージョン | OSS | OSS-HDFS |
4.5.1 以降 | サポート | サポート |
--enableCMS :CMS アラート機能を有効にします。
JindoDistCp カウンター
JindoDistCp カウンターは、JindoDistCp タスクの結果を要約したものです。次の表にカウンターを示します。
パラメーター | 説明 |
COPY_FAILED | コピーに失敗したファイル数。 |
CHECKSUM_DIFF | チェックサムが異なるファイル数。コピー操作時は COPY_FAILED に、差分比較時は DIFF_FILES に含まれます。 |
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 | The number of files that failed checksum verification. This is included in DIFF_FILES. |
DIFF_FAILED | 比較操作が異常終了したファイル数。 |