tencent cloud

フィードバック

メタデータアクセラレーション機能を有効にしたバケットへのHDFSデータの移行

最終更新日:2024-06-30 12:13:52

    概要

    メタデータアクセラレーターは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のメタデータアクセラレーションバケットに移す方法について重点的にご説明します。

    移行環境の準備

    マイグレーションツールの準備

    1. 下の表にあるjarパッケージツールをダウンロードし、マイグレーションクラスターの送信先マシンのローカルディレクトリ下に配置します(例:/data01/jars)。
    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パッケージは、メタデータアクセラレーション機能がオンになっているバケットには正常にアクセスできませんのでご注意ください。
    2. メタデータアクセラレーションバケットを作成し、メタデータアクセラレーションバケットのHDFSプロトコルを設定します。詳細な手順については、メタデータアクセラレーターを有効にしたバケットへのHDFSプロトコルを使用したアクセスの、「バケットの作成とHDFSプロトコルの設定」の章をご参照ください。
    3. マイグレーションクラスター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(シンガポール)
    4. マイグレーションクラスターがプライベートネットワークを経由してメタデータアクセラレーションバケットにアクセス可能かどうかを検証します。詳細な手順については、メタデータアクセラレーターを有効にしたバケットへのHDFSプロトコルを使用したアクセスの、「コンピューティングクラスターを設定してCOSにアクセス」の章をご参照ください。マイグレーションクラスターを送信して、COSに正常にアクセスできるかどうかを検証します。

    既存データの移行

    1. 移行ディレクトリの決定

    通常、データ移行はまずHDFSストレージデータの移行から開始します。ソースHDFSクラスターの移行対象のディレクトリを選定し、ターゲット側とソース側のパスは同一にします。以下に示します。
    HDFSパスhdfs:///data/user/targetcosn://{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ファイルを直接移行することができます。

    2. COSDistCpを使用して移行

    COSDistCpタスクを起動し、ファイルをソースHDFSからターゲットCOSバケットにコピーします。
    COSDistCpはMapReduceタスクであり、MapReduceタスクのプリントログにはMRタスクの実行が成功したかどうかが表示されます。失敗した場合はYARNページを確認し、ログまたはエラー情報をCOSに提供してトラブルシューティングを行うことができます。COSDistCpツールによる移行タスクの実行は次のいくつかの手順に分かれています。 (1)一時ディレクトリの作成 (2)COSDistCpタスクの実行 (3)失敗したファイルの再移行

    (1)一時ディレクトリの作成

    hadoop fs -libjars /data01/jars/chdfs_hadoop_plugin_network-2.8.jar -mkdir cosn://bucket-appid/distcp-tmp

    (2)COSDistCpタスクの実行

    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 &
    パラメータの説明は次のとおりです。実際の状況に応じて調整できます。
    --taskNumber=VALUE コピープロセス数を指定します。例:--taskNumber=10。
    --workerNumber=VALUE コピースレッド数を指定します。COSDistCpは、各コピープロセスでこのパラメータサイズのコピースレッドプールを作成します。例:--workerNumber=4。
    --bandWidth 移行する各ファイルの読み込み帯域幅を制限します。単位はMB/s、デフォルトは-1で、読み込み帯域幅は制限しません。例:--bandWidth=10。
    --cosChecksumType=CRC32C、デフォルトではCRC32Cを使用しますが、HDFSクラスターはCOMPOSITE_CRC32チェックをサポートする必要があり、Hadoop バージョン3.1.1+に依存します。HDFSのバージョンが3.1.1より低い場合は、このパラメータを--cosChecksumType=CRC64に変更する必要があります。
    注意:
    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
    スキップしたディレクトリ数

    (3)失敗したファイルの再移行

    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を用いることができます。

    増分の移行

    各回の移行が完了した後に、更新された増分データが存在し、その移行も必要な場合は、データの移行がすべて完了するまで、全量移行の手順を繰り返し実行します。
    お問い合わせ

    カスタマーサービスをご提供できるため、ぜひお気軽にお問い合わせくださいませ。

    テクニカルサポート

    さらにサポートが必要な場合は、サポートチケットを送信して弊社サポートチームにお問い合わせください。24時間365日のサポートをご提供します。

    電話サポート(24 時間365日対応)