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 が実行されると、以下の処理が行われます。
基礎となるデータを宛先パスにコピーします。
テーブルまたはパーティションのメタデータを更新し、新しい場所を指すようにします。
移行が成功した後、オプションでソースデータを削除します (
-rが必要です)。
MoveTo は、Hadoop 分散ファイルシステム (HDFS) に保存されたプロセスロックを使用して、同時実行を防ぎます。EMR クラスターでは、一度に 1 つの MoveTo プロセスしか実行できません。実行中に 2 つ目のプロセスを開始すると、リクエストは拒否され、実行中のプロセスを特定するメッセージが表示されます。新しいプロセスを開始する前に、実行中のプロセスが終了するのを待つか、停止してください。
テーブルまたはパーティションの移行
データを安全に移行するには、この 3 ステップのワークフローに従ってください。
プレビュー —
-eを付けて実行し、どのパーティションが移動されるかを確認します。移行 — 実際の移行コマンドを実行します。
クリーンアップ — 移行が成功したことを確認した後にのみ、
-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 (デフォルト)、IA、Archive、ColdArchive。OSS 以外の宛先には適用されません。 | いいえ |
-o/-overWrite | 書き込み前に宛先パスをクリアします。パーティションテーブルの場合、移行されるパーティションの宛先パスのみがクリアされます。 | いいえ |
-r/-removeSource | 移行とメタデータの更新が成功した後にソースパスを削除します。パーティションテーブルの場合、移行されるパーティションのソースパスのみが削除されます。 | いいえ |
-skipTrash | HDFS のゴミ箱をバイパスして、ソースデータを即座に削除します。-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 \
-rColdArchive ストレージクラスを使用する前に、宛先の 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 プロセスが実行されていないことを確認してください。プロセスがアクティブな状態でロックディレクトリを変更すると、プロセスが失敗し、データ破損につながる可能性があります。
EMR コンソールで HDFS サービスページに移動します。
Alibaba Cloud EMR コンソールにログインします。
上部のナビゲーションバーで、クラスターが存在するリージョンを選択し、リソースグループを選択します。
[クラスター管理] タブをクリックします。
[クラスター管理] ページで、対象のクラスターを見つけ、[操作] 列の [詳細] をクリックします。
[クラスターの概要] ページの左側のナビゲーションウィンドウで、[クラスターサービス] > [HDFS] を選択します。
カスタム設定項目を追加します。
[設定] タブをクリックし、[サービス設定] セクションで [hdfs-site] または [core-site] をクリックします。
[サービス設定] セクションの右上隅にある [カスタム設定] をクリックします。

[設定項目の追加] ダイアログボックスで、
jindotable.moveto.tablelock.base.dirパラメーターを追加し、その値を既存の HDFS パスに設定します。
設定を保存します。
[サービス設定] セクションの右上隅にある [保存] をクリックします。
[変更の確認] ダイアログボックスで、[説明] を入力し、[OK] をクリックします。