すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:JindoTable の MoveTo コマンドを使用する

最終更新日:Apr 14, 2025

JindoTable では、MoveTo コマンドを実行して、テーブルまたはパーティションのデータを移行できます。このトピックでは、MoveTo コマンドの使用方法について説明します。

前提条件

  • Java Development Kit(JDK)8 がコンピューターにインストールされていること。
  • E-MapReduce(EMR)クラスターが作成されていること。詳細については、「クラスターの作成」をご参照ください。

背景情報

MoveTo コマンドは、コマンドが基になるデータをコピーした後、メタデータを自動的に更新できます。この方法で、テーブルまたはパーティションのデータを宛先パスに完全に移行できます。 MoveTo コマンドにフィルター条件を設定して、多数のパーティションを同時に移行できます。 JindoTable はまた、MoveTo コマンドを使用してデータを移行する際のデータの整合性とセキュリティを確保するためのある程度の保護手段も提供します。

制限事項

MoveTo コマンドは、EMR V3.36.0 以降のマイナーバージョン、および EMR V5.2.0 以降のマイナーバージョンでのみサポートされています。

MoveTo コマンドを使用する

重要 EMR クラスターでは、一度に 1 つの MoveTo プロセスのみ実行できます。 別の MoveTo プロセスが実行されている EMR クラスターで MoveTo プロセスを開始しようとすると、構成ロックが使用できないため、リクエストは拒否されます。 実行中の MoveTo プロセスに関する情報を含むメッセージも表示されます。 この場合、実行中の MoveTo プロセスを終了して新しい MoveTo プロセスを開始するか、実行中の MoveTo プロセスが終了するまで待つことができます。
  1. SSH モードでクラスターにログオンします。詳細については、「クラスターへのログオン」をご参照ください。
  2. 次のコマンドを実行して、ヘルプ情報を取得します。
    jindo table -help moveTo
    次のような情報が返されます。
    <dbName.tableName>      移動するテーブル。
    <destination path>      移動されたパーティションまたはパーティション化されていないデータが配置される「テーブルの場所」と同じレベルにある、宛先のベースディレクトリ。
    <condition>/-fullTable  移動するパーティションを決定するためのフィルター条件。一般的な演算子( '>' など)と組み込みの UDF(to_date など)をサポートします(UDF はまだサポートされていません...)。 -fullTable は、すべてのパーティション(またはパーティション化されていないテーブル全体)を移動することを意味します。 -c "<condition>" と -fullTable のうち、1 つのオプションのみを指定する必要があります。
    <before days>           オプション。テーブル/パーティションが、今から数日以上前に作成された(更新または変更されていない)場合にのみ移動することを指定します。
    <parallelism>           パーティションをコピーする際の最大同時実行数。デフォルトは 1 です。
            <OSS storage policy>: OSS 宛先のストレージポリシー。Standard(デフォルト)、IA、Archive、または ColdArchive を指定できます。 OSS 以外の宛先には適用されません。注:ColdArchive ストレージポリシーを使用する場合は、OSS バケットで Cold Archive が有効になっていることを確認してください。
    
    -o/-overWrite     データの移動先の最終パスを上書きします。
                        パーティションテーブルの場合、これは <destination path> のサブディレクトリであるパーティションの場所を上書きします。パーティション化されていないテーブルの場合、これは <destination path> 自体を上書きします。
    -r/-removeSource  対応するテーブル/パーティションが新しい宛先に正常に移動されたときに、ソースデータを削除します。
                        それ以外の場合(デフォルト)、ソースデータはそのまま残されます。
    -skipTrash        [-r/-removeSource] が有効な場合にのみ適用されます。
                        存在する場合、ソースデータはごみ箱をバイパスしてファイルシステムからすぐに削除されます。
    -e/-explain       存在する場合、コマンドは実際にデータを移動するのではなく、指定された条件で移動されるテーブル/パーティションのみを出力します。
    <log directory>   ログファイルを配置するディレクトリ。デフォルトは '/tmp/<current user>/' です。
    MoveTo 構文:
    jindo table -moveTo \
      -t <dbName.tableName> \
      -d <destination path> \
      [-c "<condition>" | -fullTable] \
      [-b/-before <before days>] \
      [-p/-parallel <parallelism>] \
      [-s/-storagePolicy <OSS storage policy>] \
      [-o/-overWrite] \
      [-r/-removeSource] \
      [-skipTrash] \
      [-e/-explain] \
      [-l/-logDir <log directory>]
    パラメーター説明必須
    -t <dbName.tableName>移行するテーブルの名前。データベース名.テーブル名 の形式でこのパラメーターを指定する必要があります。

    データベース名とテーブル名はピリオド(.)で区切ります。テーブルは、パーティションテーブルまたは非パーティションテーブルです。

    はい
    -d <destination path>宛先パス。特定のパーティションまたはパーティション化されていないテーブル全体を移行する場合でも、このパラメーターはテーブルレベルのパスを指定します。パーティションを移行する場合、パーティションの完全なパスは、このパラメーターの値とパーティションの名前で構成されます(<destination path>/p1=v1/p2=v2/ など)。はい
    -c "<condition>" | -fullTable-c "<condition>" または -fullTable のいずれかを指定する必要があります。
    • -fullTable を指定すると、パーティションテーブルまたは非パーティションテーブル全体がアーカイブされます。
    • -c "<condition>" を指定すると、フィルター条件を満たすパーティションのみがアーカイブされます。より大きい記号(>)などの一般的な演算子がサポートされています。

      たとえば、パーティションキー列がデータ型が String の ds 列で、パーティション名が「d」より大きいパーティションをアーカイブする場合、-c " ds > 'd' " を使用します。

    いいえ
    -b/before <before days>指定された日数以前に作成されたテーブルまたはパーティションのみを移行できます。いいえ
    -p/-parallel <parallelism>移行操作間の並列性。いいえ
    -s/-storagePolicy <OSS storage policy>データがオブジェクトストレージサービス(OSS)に移行された後に使用するストレージクラス。有効な値:
    • Standard
    • IA
    • Archive
    • ColdArchive
      説明 使用するストレージクラスが宛先 OSS バケットで有効になっていることを確認してください。
    いいえ
    -o/-overWrite宛先パスは強制的にクリアされます。パーティションテーブルの場合、移行するパーティションの宛先パスのみがクリアされます。いいえ
    -r/-removeSourceデータが移行され、メタデータが更新されると、ソースパスがクリアされます。パーティションテーブルの場合、移行されたパーティションのソースパスのみがクリアされます。いいえ
    -skipTrashソースパスがクリアされると、ごみ箱はスキップされます。
    説明 -r/-removeSource が指定されている場合にのみ、このオプションを指定できます。
    いいえ
    -e/-explain説明モードが使用されます。説明モードでは、移行されるパーティションのリストが表示されますが、データは移行されません。いいえ
    -l/-logDir <log directory>ログファイルが保存されるディレクトリ。いいえ

ロックディレクトリを設定する

MoveTo コマンドは、プロセスロックをサポートしています。ロックファイルを保存するには、HDFS パスを使用する必要があります。デフォルトのパスは hdfs:///tmp/jindotable-lock/ です。
重要 パスは HDFS パスである必要があります。デフォルトパスに対する権限がない場合は、次の手順を実行してパスをカスタマイズできます。
  1. HDFS サービスページに移動します。
    1. Alibaba Cloud EMR コンソール にログオンします。
    2. 上部のナビゲーションバーで、クラスターが存在するリージョンを選択し、ビジネス要件に基づいてリソースグループを選択します。
    3. [クラスター管理] タブをクリックします。
    4. [クラスター管理] ページで、クラスターを見つけて、[アクション] 列の [詳細] をクリックします。
    5. [クラスターの概要] ページの左側のナビゲーションペインで、[クラスターサービス] > HDFS を選択します。
  2. カスタム項目を追加します。
    1. [設定] タブをクリックします。次に、[サービス設定] セクションの [hdfs-site] または [core-site] タブをクリックします。
    2. [サービス設定] セクションの右上隅にある [カスタム設定] をクリックします。
      hdfs-site
    3. [設定項目の追加] ダイアログボックスで、[jindotable.moveto.tablelock.base.dir] パラメーターを追加し、既存の HDFS パスに設定します。
      重要 ロックディレクトリをカスタマイズする場合は、クラスターのノードで MoveTo プロセスが実行されていないことを確認してください。そうしないと、MoveTo プロセスが失敗し、データ汚染が発生する可能性があります。
  3. 設定を保存します。
    1. [サービス設定] セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[OK] をクリックします。