メタデータアクセラレーターはTencent Cloud COS(Cloud Object Storage)サービス向けにハイパフォーマンスなファイルシステム機能をご提供します。メタデータアクセラレーターの基盤にはCloud HDFSの優れたメタデータ管理機能を採用し、ユーザーがファイルシステムのセマンティクスによってCOSサービスにアクセスできるようサポートします。システム設計指標は100GBレベルの帯域幅、10万レベルのQPSおよびミリ秒レベルの遅延を実現可能です。バケットでメタデータアクセラレーターを有効にすることで、ビッグデータ、ハイパフォーマンスコンピューティング、機械学習、AIなどのシーンに幅広く応用できます。メタデータアクセラレーターの詳細な説明に関しては、メタデータアクセラレーターをご参照ください。
COSはメタデータアクセラレーションサービスによってHadoopファイルシステムのセマンティクスを提供しているため、Hadoop Distcpツールを利用すると、Cloud Object Storage(COS)と他のHadoopファイルシステム間の双方向データマイグレーションを便利に行うことができます。ここではHadoop DistcpツールによってローカルHDFS内のファイルをCOSのメタデータアクセラレーションバケットに移す方法について重点的にご説明します。
Tencent Cloud EMR環境
インストール説明
jarパッケージファイル名 | 説明 | ダウンロードアドレス |
---|---|---|
cos-distcp-1.12-3.1.0.jar | COSDistCp関連パッケージです。データをCOSNにコピーします | COSDistCpツールをご参照ください |
chdfs_hadoop_plugin_network-2.8.jar | OFSプラグイン | クリックしてダウンロード |
自作Hadoop/CDHなどの環境
ソフトウェア依存
Hadoop-2.6.0およびそれ以上のバージョン、Hadoop-COSプラグイン8.1.5およびそれ以上のバージョンとし、またcos_api-bundleプラグインのバージョンはHadoop-COSバージョンに対応するものとします。詳細については、COSN github releasesでご確認ください。
インストール説明
Hadoop環境下で、次のプラグインをインストールします。
jarパッケージファイル名 | 説明 | ダウンロードアドレス |
---|---|---|
cos-distcp-1.12-3.1.0.jar | COSDistCp関連パッケージです。データをCOSNにコピーします | COSDistCpツールをご参照ください |
chdfs_hadoop_plugin_network-2.8.jar | OFSプラグイン | クリックしてダウンロード |
Hadoop-COS | Version >= 8.1.5 | Hadoop-COSツールをご参照ください |
cos_api-bundle | バージョンはHadoop-COSに対応している必要があります | クリックしてダウンロード |
注意:
- Hadoop-cosは、バージョン8.1.5以降、
cosn://bucketname-appid/
メソッドによるメタデータアクセラレーションバケットへのアクセスをサポートしています。- メタデータアクセラレーション機能は、バケット作成時にのみオンにすることができ、一度オンにするとオフにすることはできません。お客様のビジネスシーンに応じて、オンにするかどうか慎重にご検討ください。また、旧バージョンのHadoop-cosパッケージは、メタデータアクセラレーション機能がオンになっているバケットには正常にアクセスできませんのでご注意ください。
core-site.xml
を変更し、変更完了後にすべてのノード上に送信して設定します。データの移行のみの場合は、ビッグデータコンポーネントの再起動は必要ありません。key | value | 設定ファイル | 説明 |
---|---|---|---|
fs.cosn.trsf.fs.ofs.impl | com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter | core-site.xml | COSN実装クラス。入力必須です |
fs.cosn.trsf.fs.AbstractFileSystem.ofs.impl | com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter | core-site.xml | COSN実装クラス。入力必須です |
fs.cosn.trsf.fs.ofs.tmp.cache.dir | 形式は/data/emr/hdfs/tmp/のようになります | core-site.xml | 一時ディレクトリ。入力必須です。MRSの各ノードにはすべて作成し、十分なスペースと権限を保証する必要があります |
fs.cosn.trsf.fs.ofs.user.appid | お客様のCOS bucketに対応するappid | core-site.xml | 入力必須 |
fs.cosn.trsf.fs.ofs.ranger.enable.flag | false | core-site.xml | 入力必須、falseかどうか確認 |
fs.cosn.trsf.fs.ofs.bucket.region | bucketに対応するregion | core-site.xml | 入力必須です。オプション値:eu-frankfurt(フランクフルト)、ap-chengdu(成都)、ap-singapore(シンガポール) |
通常、データ移行はまずHDFSストレージデータの移行から開始します。ソースHDFSクラスターの移行対象のディレクトリを選定し、ターゲット側とソース側のパスは同一にします。以下に示します。
HDFSパスhdfs:///data/user/target
をcosn://{bucketname-appid}/data/user/target
に移行したいと仮定します。
移行の過程で、ソース側ディレクトリのファイルが変更されないようにするため、HDFSのスナップショット機能を使用し、先に移行対象のディレクトリのスナップショットを作成します。現在の日付をスナップショットのファイル名とします。
hdfs dfsadmin -disallowSnapshot hdfs:///data/user/
hdfs dfsadmin -allowSnapshot hdfs:///data/user/target
hdfs dfs -deleteSnapshot hdfs:///data/user/target {現在の日付}
hdfs dfs -createSnapshot hdfs:///data/user/target {現在の日付}
成功の例:
スナップショットを使用したくない場合は、ソース側のtargetファイルを直接移行することができます。
COSDistCpタスクを起動し、ファイルをソースHDFSからターゲットCOSバケットにコピーします。
COSDistCpはMapReduceタスクであり、MapReduceタスクのプリントログにはMRタスクの実行が成功したかどうかが表示されます。失敗した場合はYARNページを確認し、ログまたはエラー情報をCOSに提供してトラブルシューティングを行うことができます。COSDistCpツールによる移行タスクの実行は次のいくつかの手順に分かれています。
(1)一時ディレクトリの作成
(2)COSDistCpタスクの実行
(3)失敗したファイルの再移行
hadoop fs -libjars /data01/jars/chdfs_hadoop_plugin_network-2.8.jar -mkdir cosn://bucket-appid/distcp-tmp
nohup hadoop jar /data01/jars/cos-distcp-1.10-2.8.5.jar -libjars /data01/jars/chdfs_hadoop_plugin_network-2.8.jar --src=hdfs:///data/user/target/.snapshot/{現在の日付} --dest=cosn://{bucket-appid}/data/user/target --temp=cosn://bucket-appid/distcp-tmp/ --preserveStatus=ugpt --skipMode=length-checksum --checkMode=length-checksum --cosChecksumType=CRC32C --taskNumber 6 --workerNumber 32 --bandWidth 200 >> ./distcp.log &
パラメータの説明は次のとおりです。実際の状況に応じて調整できます。
注意:COSDistCpでは移行の総帯域幅制限計算式は、taskNumber x workerNumber x bandWidthとなります。workerNumberを1に設定し、パラメータtaskNumberによる移行の同時実行数の制御、およびパラメータbandWidthによる単一の同時実行帯域幅の制御を行うことができます。
コピータスクの終了時に、タスクログによってファイルのコピーに関する統計情報が出力されます。関連するカウンターは次のとおりです。
このうち、FILES_FAILEDは失敗の数を表します。FILES_FAILEDの統計項目がない場合は、すべての移行が成功したことになります。
CosDistCp Counters
BYTES_EXPECTED=10198247
BYTES_SKIPPED=10196880
FILES_COPIED=1
FILES_EXPECTED=7
FILES_FAILED=1
FILES_SKIPPED=5
具体的な出力結果統計項目の説明は次のとおりです。
統計項目 | 説明 |
---|---|
BYTES_EXPECTED | ソースディレクトリの統計に基づいてコピーが必要なファイルの合計サイズ。単位:バイト |
FILES_EXPECTED | ディレクトリファイルを含む、ソースディレクトリの統計に基づいてコピーが必要なファイル数 |
BYTES_SKIPPED | 長さまたはチェックサム値が等しく、コピーされないファイルサイズの合計。単位:バイト |
FILES_SKIPPED | 長さまたはチェックサム値が等しく、コピーされないソースファイル数 |
FILES_COPIED | コピーに成功したソースファイル数 |
FILES_FAILED | コピーに失敗したソースファイル数 |
FOLDERS_COPIED | コピーに成功したディレクトリ数 |
FOLDERS_SKIPPED | スキップしたディレクトリ数 |
COSDistCpツールはファイルの移行効率の問題の大部分を解決することができるほか、--delete
パラメータによってHDFSとCOSのデータを完全に一致させることもできます。
--delete
パラメータを使用する場合は、--deleteOutput=/xxx(カスタム)
パラメータを含める必要があります。ただし--diffMode
パラメータを含めることはできません。
nohup hadoop jar /data01/jars/cos-distcp-1.10-2.8.5.jar -libjars /data01/jars/chdfs_hadoop_plugin_network-2.8.jar --src=--src=hdfs:///data/user/target/.snapshot/{現在の日付} --dest=cosn://{bucket-appid}/data/user/target --temp=cosn://bucket-appid/distcp-tmp/ --preserveStatus=ugpt --skipMode=length-checksum --checkMode=length-checksum --cosChecksumType=CRC32C --taskNumber 6 --workerNumber 32 --bandWidth 200 --delete --deleteOutput=/dele-xx >> ./distcp.log &
実行完了後、HDFSとCOSの差分データはtrash
ディレクトリに移動し、/xxx/failed
ディレクトリ下に移動ファイルリストが生成されます。trash
ディレクトリ下のデータの削除にはhadoop fs -rm URL
またはhadoop fs -rmr URL
を用いることができます。
各回の移行が完了した後に、更新された増分データが存在し、その移行も必要な場合は、データの移行がすべて完了するまで、全量移行の手順を繰り返し実行します。
この記事はお役に立ちましたか?