tencent cloud

フィードバック

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

最終更新日:2023-03-20 15:06:18

    概要

    メタデータアクセラレーターは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パッケージは、メタデータアクセラレーション機能がオンになっているバケットには正常にアクセスできませんのでご注意ください。
    1. メタデータアクセラレーションバケットを作成し、メタデータアクセラレーションバケットのHDFSプロトコルを設定します。詳細な手順については、メタデータアクセラレーターを有効にしたバケットへのHDFSプロトコルを使用したアクセスの、「バケットの作成とHDFSプロトコルの設定」の章をご参照ください。
    2. マイグレーションクラスターcore-site.xmlを変更し、変更完了後にすべてのノード上に送信して設定します。データの移行のみの場合は、ビッグデータコンポーネントの再起動は必要ありません。
      keyvalue設定ファイル説明
      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(シンガポール)
    3. マイグレーションクラスターがプライベートネットワークを経由してメタデータアクセラレーションバケットにアクセス可能かどうかを検証します。詳細な手順については、メタデータアクセラレーターを有効にしたバケットへの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日対応)