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

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

最終更新日:Mar 26, 2026

JindoTable の MoveTo コマンドは、Hive のテーブルまたはパーティションを新しい宛先パスに移行し、その後メタデータを自動的に更新します。これにより、手動での操作なしでテーブルのクエリが可能な状態を維持します。フィルター条件を使用して一度にパーティションのサブセットを移行するか、-fullTable を渡してテーブル全体を一度の操作で移動します。

クイックスタート

フィルターに一致するパーティションをプレビューし、移行を実行します。

# ステップ 1: 移行対象のパーティションをプレビュー (データは移動されません)
jindo table -moveTo \
  -t mydb.events \
  -d oss://my-bucket/archive/events \
  -c "ds < '2023-01-01'" \
  -e

# ステップ 2: 移行の実行
jindo table -moveTo \
  -t mydb.events \
  -d oss://my-bucket/archive/events \
  -c "ds < '2023-01-01'"

前提条件

開始する前に、以下のものが揃っていることを確認してください。

  • ご利用のコンピューターに Java 開発キット (JDK) 8 がインストールされていること

  • EMR V3.36.0 以降、または EMR V5.2.0 以降を実行している E-MapReduce (EMR) クラスターがあること

仕組み

MoveTo が実行されると、以下の処理が行われます。

  1. 基礎となるデータを宛先パスにコピーします。

  2. テーブルまたはパーティションのメタデータを更新し、新しい場所を指すようにします。

  3. 移行が成功した後、オプションでソースデータを削除します (-r が必要です)。

MoveTo は、Hadoop 分散ファイルシステム (HDFS) に保存されたプロセスロックを使用して、同時実行を防ぎます。EMR クラスターでは、一度に 1 つの MoveTo プロセスしか実行できません。実行中に 2 つ目のプロセスを開始すると、リクエストは拒否され、実行中のプロセスを特定するメッセージが表示されます。新しいプロセスを開始する前に、実行中のプロセスが終了するのを待つか、停止してください。

テーブルまたはパーティションの移行

データを安全に移行するには、この 3 ステップのワークフローに従ってください。

  1. プレビュー-e を付けて実行し、どのパーティションが移動されるかを確認します。

  2. 移行 — 実際の移行コマンドを実行します。

  3. クリーンアップ — 移行が成功したことを確認した後にのみ、-r を追加してソースデータを削除します。

警告

-r/-removeSource は、移行後にソースデータを完全に削除します。-skipTrash と組み合わせると、データは HDFS のゴミ箱を経由せずに即座に削除されます。これらのフラグを使用する前に、必ず -e/-explain を付けて実行し、どのパーティションが移動されるかを確認してください。

重要

MoveTo プロセスがすでに実行されているクラスターで、新しい `MoveTo` プロセスを開始しないでください。新しいリクエストは拒否されます。

ステップ 1: EMR クラスターへのログイン

SSH モードで EMR クラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。

ステップ 2: 移行のプレビュー (推奨)

-e を付けてコマンドを実行し、データを移動せずに一致するパーティションのリストを出力します。

jindo table -moveTo \
  -t <dbName.tableName> \
  -d <destination path> \
  -c "<condition>" \
  -e

例: ds 列にある 2023-01-01 より古いすべてのパーティションをプレビューします。

jindo table -moveTo \
  -t mydb.events \
  -d oss://my-bucket/archive/events \
  -c "ds < '2023-01-01'" \
  -e

このコマンドは、データを移動せずに一致するパーティションのリストを出力します。

ステップ 3: 移行の実行

MoveTo コマンドで利用可能なすべてのオプションを表示するには、以下を実行します。

jindo table -help 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>移行するテーブルを database.table フォーマットで指定します。パーティションテーブルと非パーティション化テーブルの両方をサポートします。はい
-d <destination path>テーブルレベルの宛先パス。パーティションテーブルの場合、完全なパーティションパスは <destination path>/p1=v1/p2=v2/ のように構成されます。はい
-c "<condition>" | -fullTable-fullTable を使用してテーブル全体を移動します。-c "<condition>" を使用して、条件によってパーティションをフィルターします (> などの標準的な演算子をサポートします)。例: -c "ds > 'd'"。これらのオプションのいずれかを指定する必要があります。いいえ
-b/-before <before days>指定された日数以上前に作成されたテーブルまたはパーティションのみを移行します。いいえ
-p/-parallel <parallelism>同時に実行するパーティションコピー操作の最大数。デフォルトは 1 です。いいえ
-s/-storagePolicy <OSS storage policy>Object Storage Service (OSS) の宛先のターゲットストレージクラス。有効な値: Standard (デフォルト)、IAArchiveColdArchive。OSS 以外の宛先には適用されません。いいえ
-o/-overWrite書き込み前に宛先パスをクリアします。パーティションテーブルの場合、移行されるパーティションの宛先パスのみがクリアされます。いいえ
-r/-removeSource移行とメタデータの更新が成功した後にソースパスを削除します。パーティションテーブルの場合、移行されるパーティションのソースパスのみが削除されます。いいえ
-skipTrashHDFS のゴミ箱をバイパスして、ソースデータを即座に削除します。-r/-removeSource が指定されている場合にのみ有効です。いいえ
-e/-explainデータを移動せずに、移行対象のパーティションのリストを出力します。これを使用して、実際の移行を実行する前にフィルター条件を検証します。いいえ
-l/-logDir <log directory>ログファイルのディレクトリ。デフォルトは /tmp/<current user>/ です。いいえ

mydb.events のすべてのパーティションを OSS のアーカイブパスに移行し、4 つの並列スレッドを使用し、移行が成功した後にソースデータを削除します。

jindo table -moveTo \
  -t mydb.events \
  -d oss://my-bucket/archive/events \
  -fullTable \
  -s Archive \
  -p 4 \
  -r
説明

ColdArchive ストレージクラスを使用する前に、宛先の OSS バケットでコールドアーカイブが有効になっていることを確認してください。

ds 列にある 2023-06-01 より古く、かつ 90 日以上前に作成されたパーティションを移行します。

jindo table -moveTo \
  -t mydb.logs \
  -d oss://my-bucket/cold/logs \
  -c "ds < '2023-06-01'" \
  -b 90 \
  -s IA

カスタムロックディレクトリの設定

MoveTo は、HDFS に保存されたプロセスロックを使用して同時実行を防ぎます。デフォルトのロックパスは hdfs:///tmp/jindotable-lock/ です。

重要

ロックパスは HDFS パスである必要があります。デフォルトパスへの書き込み権限がない場合は、以下の手順に従ってカスタムパスを設定してください。

警告

ロックディレクトリを変更する前に、クラスターで MoveTo プロセスが実行されていないことを確認してください。プロセスがアクティブな状態でロックディレクトリを変更すると、プロセスが失敗し、データ破損につながる可能性があります。

  1. EMR コンソールで 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 パスに設定します。

  3. 設定を保存します。

    1. [サービス設定] セクションの右上隅にある [保存] をクリックします。

    2. [変更の確認] ダイアログボックスで、[説明] を入力し、[OK] をクリックします。