hadoop jar cos-distcp-${version}.jar \\-libjars cos_api-bundle-${version}.jar,hadoop-cos-${version}.jar \\-Dfs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider \\-Dfs.cosn.userinfo.secretId=COS_SECRETID \\-Dfs.cosn.userinfo.secretKey=COS_SECRETKEY \\-Dfs.cosn.bucket.region=ap-guangzhou \\-Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem \\-Dfs.AbstractFileSystem.cosn.impl=org.apache.hadoop.fs.CosN \\--src /data/warehouse \\--dest cosn://examplebucket-1250000000/warehouse
hadoop jar cos-distcp-${version}.jar --help
を使用すると、COSDistCpでサポートされているパラメータオプションを確認することができます。ここで${version}
はバージョン番号です。以下は現在のバージョンのCOSDistCpのパラメータの説明です。プロパティキー | 説明 | デフォルト値 | 入力必須かどうか |
--help | COSDistCpでサポートされているパラメータオプションを出力します 例:--help | なし | いいえ |
--src=LOCATION | コピーのソースディレクトリを指定します。これはHDFSまたはCOSパスにすることができます 例:--src=hdfs://user/logs/ | なし | はい |
--dest=LOCATION | コピーのターゲットディレクトリを指定します。これは、HDFSまたはCOSパスにすることができます 例:--dest=cosn://examplebucket-1250000000/user/logs | なし | はい |
--srcPattern=PATTERN | 正規表現を指定して、ソースディレクトリにあるファイルをフィルタリングします。 例: --srcPattern='.*\\.log$' 注意:記号 * がshellによって解釈されるのを避けるために、パラメータをシングルクォーテーションで囲む必要があります | なし | いいえ |
--taskNumber=VALUE | コピープロセス数を指定します。例:--taskNumber=10 | 10 | いいえ |
--workerNumber=VALUE | コピースレッド数を指定します。COSDistCpは、各コピープロセスでこのパラメータサイズのコピースレッドプールを作成します 例:--workerNumber=4 | 4 | いいえ |
--filesPerMapper=VALUE | Mapper入力ファイル1ファイルあたりの行数を指定します 例:--filesPerMapper=10000 | 500000 | いいえ |
--groupBy=PATTERN | テキストファイルを集約するための正規表現を指定します 例:--groupBy='.*group-input/(\\d+)-(\\d+).*' | なし | いいえ |
--targetSize=VALUE | ターゲットファイルのサイズをMB単位で指定します。--groupByとともに使用します 例:--targetSize=10 | なし | いいえ |
--outputCodec=VALUE | 出力ファイルの圧縮方法を指定します。gzip、lzo、snappy、none、keepを選択できます。このうち、 keepは、元のファイルの圧縮方法を維持します。 noneは、ファイルの拡張子に従ってファイルを解凍します。 例:--outputCodec=gzip 注意:ファイル /dir/test.gzipと/dir/test.gzがあり、出力形式をlzoに指定する場合は、最終的に1つのファイル/dir/test.lzoだけが維持されます | keep | いいえ |
--deleteOnSuccess | ソースファイルのターゲットディレクトリへのコピーが成功したら、直ちにソースファイルを削除するよう指定します 例:--deleteOnSuccess, 注意:1.7以降のバージョンではこのパラメータは提供されませんので、データ移行が成功し、--diffModeを使用してチェックを行った後、ソースファイルシステムのデータを削除することをお勧めします | false | いいえ |
--multipartUploadChunkSize=VALUE | Hadoop-COSプラグインがファイルをCOSに転送するときのチャンクサイズを指定します。COSがサポートするチャンクの最大数は10000で、ファイルサイズに応じてチャンクサイズをMB単位で調整できます。デフォルトは8MBです 例:--multipartUploadChunkSize=20 | 8MB | いいえ |
--cosServerSideEncryption | ファイルがCOSにアップロードされる際に、暗号化・復号アルゴリズムとしてSSE-COSを使用するように指定します 例:--cosServerSideEncryption | false | いいえ |
--outputManifest=VALUE | コピーが完了した際、ターゲットディレクトリにそのコピーのターゲットファイルの情報リスト(GZIP圧縮)が発行されるように指定します 例:--outputManifest=manifest.gz | なし | いいえ |
--requirePreviousManifest | 増分をコピーする場合は、--previousManifest=VALUEパラメータを指定する必要があります 例:--requirePreviousManifest | false | いいえ |
--previousManifest=LOCATION | 前回のコピーで生成されたターゲットファイルの情報 例:--previousManifest=cosn://examplebucket-1250000000/big-data/manifest.gz | なし | いいえ |
--copyFromManifest | --previousManifest=LOCATIONとともに使用すると、--previousManifest内のファイルをターゲットファイルシステムにコピーできます 例:--copyFromManifest | false | いいえ |
--storageClass=VALUE | COSタイプを指定します。オプション値は、STANDARD、STANDARD_IA、ARCHIVE、DEEP_ARCHIVE、INTELLIGENT_TIERINGです。サポートされているストレージタイプと概要については、ストレージタイプの概要をご参照ください | なし | いいえ |
--srcPrefixesFile=LOCATION | ローカルファイルを指定します。ファイルの各行には、コピーする必要のあるソースディレクトリが含まれます 例:--srcPrefixesFile=file:///data/migrate-folders.txt | なし | いいえ |
--skipMode=MODE | ファイルをコピーする前に、ソースファイルとターゲットファイルが同じかどうかをチェックし、同じであればスキップします。none(チェックしない)、length(長さ)、checksum(CRC値)、length-mtime(長さ+mtime値)、length-checksum(長さ+CRC値)が選択可能です 例:--skipMode=length | length-checksum | いいえ |
--checkMode=MODE | ファイルコピー完了時に、ソースファイルとターゲットファイルが同じかどうかをチェックします。none(チェックしない)、length(長さ)、checksum(CRC値)、length-checksum(長さ+mtime値)、length-checksum(長さ+ CRC値)が選択可能です 例:--checkMode=length-checksum | length-checksum | いいえ |
--diffMode=MODE | ソースディレクトリとターゲットディレクトリの差分ファイルリストを指定して取得します。length(長さ)、checksum(CRC値)、length-checksum(長さ+mtime値)、length-checksum(長さ+CRC値)が選択可能です 例:--diffMode=length-checksum | なし | いいえ |
--diffOutput=LOCATION | diffModeのHDFS出力ディレクトリを指定します。この出力ディレクトリは、必ず空である必要があります 例:--diffOutput=/diff-output | なし | いいえ |
--cosChecksumType=TYPE | Hadoop-COSプラグインが使用するCRCアルゴリズムを指定します。オプション値はCRC32CとCRC64です 例:--cosChecksumType=CRC32C | CRC32C | いいえ |
--preserveStatus=VALUE | ソースファイルのuser、group、permission、xattr、timestampsのメタ情報をターゲットファイルにコピーするかどうかを指定します。オプション値は、ugpxt(user、group、permission、xattr、timestampsの英語頭文字)です 例:--preserveStatus=ugpt | なし | いいえ |
--ignoreSrcMiss | ファイルリストには存在しても、コピー時には存在しないファイルを無視します | false | いいえ |
--promGatewayAddress=VALUE | MapReduceタスクによって実行されるCounterデータがプッシュされるPrometheus PushGatewayのアドレスとポートを指定します | なし | いいえ |
--promGatewayDeleteOnFinish=VALUE | タスクが完了したら、Prometheus PushGatewayのJobNameのメトリクスコレクションを削除するよう指定します 例:--promGatewayDeleteOnFinish=true | true | いいえ |
--promGatewayJobName=VALUE | Prometheus PushGatewayに報告するJobNameを指定します 例:--promGatewayJobName=cos-distcp-hive-backup | なし | いいえ |
--promCollectInterval=VALUE | MapReduceタスクのCounter情報を収集する間隔をms単位で指定します 例:--promCollectInterval=5000 | 5000 | いいえ |
--promPort=VALUE | Prometheusメトリクスを外部に公開するサーバーポートを指定します 例:--promPort=9028 | なし | いいえ |
--enableDynamicStrategy | タスクの動的割り当てポリシーを指定して、移行速度の速いタスクがより多くのファイルを移行できるようにします。 注意:このモードには一定の制限があります。例えば、プロセスに異常が発生した場合、タスクカウンターは不正確になります。移行の完了後、--diffModeを使用してデータチェックを行ってください 例:--enableDynamicStrategy | false | いいえ |
--splitRatio=VALUE | Dynamic Strategyの分割比を指定します。splitRatio値が大きいほど、タスクの粒度は小さくなります 例:--splitRatio=8 | 8 | いいえ |
--localTemp=VALUE | Dynamic Strategyによって生成されたタスク情報ファイルが保存されているローカルフォルダを指定します 例:--localTemp=/tmp | /tmp | いいえ |
--taskFilesCopyThreadNum=VALUE | Dynamic Strategyのタスク情報ファイルをHDFSにコピーする際の同時実行性を指定します 例:--taskFilesCopyThreadNum=32 | 32 | いいえ |
--statsRange=VALUE | 統計の区間範囲を指定します 例:---statsRange=0,1mb,10mb,100mb,1gb,10gb,inf | 0,1mb,10mb,100mb,1gb,10gb,inf | いいえ |
--printStatsOnly | 移行するファイルサイズの分布情報のみ統計が行われ、データは移行されません 例:--printStatsOnly | なし | いいえ |
--bandWidth | 移行する各ファイルの読み込み帯域幅を制限します。単位はMB/s、デフォルトは-1で、読み込み帯域幅は制限しません。 例:--bandWidth=10 | なし | いいえ |
--jobName | 移行タスクの名前を指定します。 例:--jobName=cosdistcp-to-warehouse | なし | いいえ |
--compareWithCompatibleSuffix | --skipModeと--diffModeパラメータを使用する場合、ソースファイルの拡張子gzipをgzに変換するかどうか、lzopファイルの拡張子をlzoに変換するかどうかを判断します。 例:--compareWithCompatibleSuffix | なし | いいえ |
--delete | ソースディレクトリとターゲットディレクトリのファイルの一致性を保証します。ソースディレクトリにはなく、ターゲットディレクトリにはあるファイルを独立したtrashディレクトリ下に移動させ、同時にファイルリストを生成します。 注意:--diffModeパラメータは同時に使用できません | なし | いいえ |
--deleteOutput | deleteのHDFS出力ディレクトリを指定します。このディレクトリは必ず空でなければなりません 例: --deleteOutput=/dele-output | なし | いいえ |
--help
によりコマンドを実行し、COSDistCpでサポートされているパラメータを確認します。次に例を示します。hadoop jar cos-distcp-${version}.jar --help
${version}
はCOSDistCpのバージョン番号です。例えば、バージョン1.0のCOSDistCp jarパッケージ名はcos-distcp-1.0.jarとなります。--printStatsOnly
と--statsRange=VALUE
によりコマンドを実行すると、移行するファイルのサイズ分布に関する情報が出力されます。hadoop jar cos-distcp-${version}.jar --src /wookie/data --dest cosn://examplebucket-1250000000/wookie/data --printStatsOnly --statsRange=0,1mb,10mb,100mb,1gb,10gb,infCopy File Distribution Statistics:Total File Count: 4Total File Size: 1190133760| SizeRange | TotalCount | TotalSize || 0MB ~ 1MB | 0(0.00%) | 0(0.00%) || 1MB ~ 10MB | 1(25.00%) | 1048576(0.09%) || 10MB ~ 100MB | 1(25.00%) | 10485760(0.88%) || 100MB ~ 1024MB | 1(25.00%) | 104857600(8.81%) || 1024MB ~ 10240MB | 1(25.00%) | 1073741824(90.22%) || 10240MB ~ LONG_MAX| 0(0.00%) | 0(0.00%) |
--src
と--dest
によりコマンドを実行します。次に例を示します。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse
yarn logs -applicationId application_1610615435237_0021 > application_1610615435237_0021.log
CosDistCp CountersBYTES_EXPECTED=10198247BYTES_SKIPPED=10196880FILES_COPIED=1FILES_EXPECTED=7FILES_FAILED=1FILES_SKIPPED=5
統計項目 | 説明 |
BYTES_EXPECTED | ソースディレクトリの統計に基づいてコピーが必要なファイルの合計サイズ。単位:バイト |
FILES_EXPECTED | ディレクトリファイルを含む、ソースディレクトリの統計に基づいてコピーが必要なファイル数 |
BYTES_SKIPPED | 長さまたはチェックサム値が等しく、コピーされないファイルサイズの合計。単位:バイト |
FILES_SKIPPED | 長さまたはチェックサム値が等しく、コピーされないソースファイル数 |
FILES_COPIED | コピーに成功したソースファイル数 |
FILES_FAILED | コピーに失敗したソースファイル数 |
FOLDERS_COPIED | コピーに成功したディレクトリ数 |
FOLDERS_SKIPPED | スキップしたディレクトリ数 |
--taskNumber
と--workersNumber
によってコマンドを実行します。COSDistCpはマルチプロセス+マルチスレッドのコピーアーキテクチャを使用しており、次のことが可能です。--taskNumber
でコピーするプロセス数を指定します--workerNumber
で各コピープロセスにおけるコピースレッド数を指定しますhadoop jar cos-distcp-${version}.jar --src /data/warehouse/ --dest cosn://examplebucket-1250000000/data/warehouse --taskNumber=10 --workerNumber=5
--skipMode
によりコマンドを実行します。同じ長さとチェックサムを持つソースとターゲットファイルのコピーをスキップします。デフォルト値はlength-checksumです。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --skipMode=length-checksum
--skipMode
オプションは、ファイルをコピーする前に、ソースファイルとターゲットファイルが同じかどうかをチェックして、同じであればスキップします。none(チェックしない)、length(長さ)、checksum(CRC値)、length-checksum(長さ+CRC値)が選択可能です。hadoop fs -Ddfs.checksum.combine.mode=COMPOSITE_CRC -checksum /data/test.txt/data/test.txt COMPOSITE-CRC32C 6a732798
--diffMode
と--diffOutput
によりコマンドを実行します。--diffMode
のオプション値はlengthとlength-checksumです。--diffMode=length
は、ファイルサイズが同じかどうかによって、差分ファイルのリストを取得することを表します。--diffMode=length-checksum
、ファイルサイズとCRCチェックサムが同じかどうかによって、差分ファイルのリストを取得することを表します。--diffOutput
は、diff操作の出力ディレクトリを指定します。
ターゲットファイルシステムがCOSで、ソースファイルシステムのCRCアルゴリズムが異なる場合、COSDistCpはソースファイルをプルしてターゲットファイルシステムのCRCを計算し、同じCRCアルゴリズム値を比較します。以下の例では、移行が完了した後、--diffModeパラメータを使用して、ファイルサイズとCRC値に基づきソースファイルとターゲットファイルが同じであることをチェックしています。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --diffMode=length-checksum --diffOutput=/tmp/diff-output
/tmp/diff-output/failed
ディレクトリ(1.0.5および以前のバージョンでは/tmp/diff-output)に差分ファイルリストを発行します。次のコマンドを使用して、SRC_MISS以外の差分ファイルリストを取得することができます。hadoop fs -getmerge /tmp/diff-output/failed diff-manifestgrep -v '"comment":"SRC_MISS"' diff-manifest |gzip > diff-manifest.gz
hadoop jar cos-distcp-${version}.jar --taskNumber=20 --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --previousManifest=file:///usr/local/service/hadoop/diff-manifest.gz --copyFromManifest
--checkMode
によりコマンドを実行します。ファイルのコピーが完了したときに、ソースファイルとターゲットファイルの長さとチェックサムが同じであることをチェックします。デフォルト値はlength-checksumです。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --checkMode=length-checksum
--bandWidth
によりコマンドを実行します。単位はMBです。移行した各ファイルの読み込み帯域幅を10MB/sに制限します。次に例を示します。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --bandWidth=10
cat srcPrefixes.txt/data/warehouse/20181121//data/warehouse/20181122/
--srcPrefixesFile
パラメータを使用してこのファイルを指定し、移行コマンドを実行します。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --srcPrefixesFile file:///usr/local/service/hadoop/srcPrefixes.txt --dest cosn://examplebucket-1250000000/data/warehouse/ --taskNumber=20
--srcPattern
でコマンドを実行すると、/data/warehouse/
ディレクトリにある.logで終わるログファイルのみを同期します。次に例を示します。hadoop jar cos-distcp-${version}.jar --src /data/warehouse/ --dest cosn://examplebucket-1250000000/data/warehouse --srcPattern='.*\\.log$'
hadoop jar cos-distcp-${version}.jar --src /data/warehouse/ --dest cosn://examplebucket-1250000000/data/warehouse/ --srcPattern='.*(?<!\\.temp|\\.tmp)$'
--cosChecksumType
によりコマンドを実行します。デフォルトはCRC32Cで、オプションはCRC32CとCRC64です。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --cosChecksumType=CRC32C
--storageClass
によりコマンドを実行します。次に例を示します。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --outputManifest=manifest-2020-01-10.gz --storageClass=STANDARD_IA
--outputCodec
によりコマンドを実行します。このパラメータを使用すると、HDFS内のデータをリアルタイムに圧縮してCOSにバックアップし、ストレージコストを節約することができます。パラメータのオプション値は、keep、none、gzip、lzop、snappyです。noneオプションはターゲットファイルを非圧縮状態で保存し、keepはオリジナルファイルの圧縮状態を維持します。次に例を示します。hadoop jar cos-distcp-${version}.jar --src /data/warehouse/logs --dest cosn://examplebucket-1250000000/data/warehouse/logs-gzip --outputCodec=gzip
--deleteOnSuccess
によりコマンドを実行し、/data/warehouse
ディレクトリ内のファイルをHDFSからCOSに同期してから、直ちにソースディレクトリ内の対応するファイルを削除します。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --deleteOnSuccess
--outputManifest
と--previousManifest
によりコマンドを実行します。--outputManifest
このオプションは、まずローカルでgzip圧縮されたmanifest.gzを発行し、移行が成功したときに--dest
で指定されたディレクトリに移動させます。--previousManifest
は前回の--outputManifest
出力ファイルを指定します。COSDistCpは、同じサイズのファイルをスキップします。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --outputManifest=manifest.gz --previousManifest= cosn://examplebucket-1250000000/data/warehouse/manifest-2020-01-10.gz
hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --enableDynamicStrategy
hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --diffMode=length-checksum --diffOutput=/tmp/diff-output
--preserveStatus
によりコマンドを実行し、ソースファイルまたはソースディレクトリのuser、group、permission、timestamps(modification timeとaccess time)をターゲットファイルまたはターゲットディレクトリにコピーします。このパラメータは、HDFSからCHDFSへファイルをコピーするときに有効になります。
例:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --preserveStatus=ugpt
- job_name: 'cos-distcp-hive-backup'static_configs:- targets: ['172.16.16.139:9028']
--promPort=VALUE
によりコマンドを実行し、現在のMapReduceタスクのカウンターを外部に公開しますhadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --promPort=9028
--completionCallbackClass
でコールバッククラスパスを指定してコマンドを実行します。COSDistCpはコピータスクが完了すると、収集したタスク情報をパラメータとしてコールバック関数を実行します。ユーザー定義のコールバック関数については、以下のインターフェースを実装する必要がありますので、コールバックのサンプルコードのダウンロードに移動してください。package com.qcloud.cos.distcp;import java.util.Map;public interface TaskCompletionCallback {/*** @description: When the task is completed, the callback function is executed* @param jobType Copy or Diff* @param jobStartTime the job start time* @param errorMsg the exception error msg* @param applicationId the MapReduce application id* @param: cosDistCpCounters the job*/void doTaskCompletionCallback(String jobType, long jobStartTime, String errorMsg, String applicationId, Map<String, Long> cosDistCpCounters);/*** @description: init callback config before execute*/void init() throws Exception;}
export alarmSecretId=SECRET-IDexport alarmSecretKey=SECRET-KEYexport alarmRegion=ap-guangzhouexport alarmModule=moduleexport alarmPolicyId=cm-xxxhadoop jar cos-distcp-1.4-2.8.5.jar \\-Dfs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider \\-Dfs.cosn.userinfo.secretId=SECRET-ID \\-Dfs.cosn.userinfo.secretKey=SECRET-KEY \\-Dfs.cosn.bucket.region=ap-guangzhou \\-Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem \\-Dfs.AbstractFileSystem.cosn.impl=org.apache.hadoop.fs.CosN \\--src /data/warehouse \\--dest cosn://examplebucket-1250000000/data/warehouse/ \\--checkMode=checksum \\--completionCallbackClass=com.qcloud.cos.distcp.DefaultTaskCompletionCallback
hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --taskNumber=20
hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --diffMode=length-checksum --diffOutput=/tmp/diff-output
hadoop jar cos-distcp-${version}.jar \\-Dfs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider \\-Dfs.cosn.userinfo.secretId=COS_SECRETID \\-Dfs.cosn.userinfo.secretKey=COS_SECRETKEY \\-Dfs.cosn.bucket.region=ap-guangzhou \\-Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem \\-Dfs.AbstractFileSystem.cosn.impl=org.apache.hadoop.fs.CosN \\--src /data/warehouse \\--dest cosn://examplebucket-1250000000/warehouse
/tmp/${randomUUID}/output/failed/
ディレクトリに書き込みます。ここで、${randomUUID}はランダムな文字列です。コピーが失敗する一般的な原因としては、次のようなものがあります。hadoop fs -getmerge /tmp/${randomUUID}/output/failed/ failed-manifestgrep -v '"comment":"SRC_MISS"' failed-manifest |gzip > failed-manifest.gz
/tmp/${randomUUID}/output/logs/
ディレクトリにまとめられた例外ログ情報と、yarnアプリケーションなどのプルアプリケーションログに基づいて原因を診断することができます。次のコマンドを使用できます。yarn logs -applicationId application_1610615435237_0021 > application_1610615435237_0021.log
hadoop jar cos-distcp-${version}.jar -Dmapreduce.task.timeout=18000 -Dmapreduce.reduce.memory.mb=8192 --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse
この記事はお役に立ちましたか?