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

Object Storage Service:Hive テーブルとパーティションの OSS-HDFS サービスへの移行

最終更新日:Mar 21, 2026

JindoTable MoveTo コマンドを使用して、Apache Hive のテーブルとパーティションを OSS-HDFS に移行します。このコマンドは、基盤となるデータをコピーし、Hive メタストアを自動的に更新するため、移行後もクエリを修正することなく引き続き機能します。

前提条件

開始する前に、以下を確認してください。

  • バージョン 3.36.0 以降 (3.39.x を除く)、またはバージョン 5.2.0 以降 (5.5.x を除く) を実行している E-MapReduce (EMR) クラスター。

  • データが書き込まれたパーティション化された Hive テーブル。このトピックの例では、パーティションキーが dttest_table という名前のテーブルを使用します。

  • ご利用のバケットで OSS-HDFS が有効になっており、アクセス権限が設定されていること。詳細については、「非 EMR クラスターの OSS-HDFS への接続」をご参照ください。

仕組み

MoveTo は、2 つのステップで Hive テーブルまたはパーティションを移行します。まずデータを宛先パスにコピーし、次に Hive メタストア内のパーティションの場所を更新します。メタデータの更新は自動的に行われるため、後続のクエリは手動での操作なしで新しい場所を指すようになります。JindoTable は、移行中のデータ整合性とセキュリティを確保するための保護機能も提供します。

移行の範囲を絞り込むには、-c を使用してフィルター条件を渡します。たとえば、キーの値がしきい値を超えるパーティションのみ、または特定の日付より前に作成されたパーティションのみを移行します。

重要

一度にクラスター上で実行できる MoveTo プロセスは 1 つだけです。実行中のプロセスがあるときに 2 つ目のプロセスを開始しようとすると、構成ロックが保持されているため、リクエストは拒否されます。実行中のプロセスが終了するのを待つか、プロセスを終了して新しいプロセスを開始してください。

完全な移行を実行する前に、-e (explain) フラグを使用して、データを転送せずにどのパーティションが移動されるかをプレビューします。これにより、コミットする前に範囲を確認できます。

パーティションの OSS-HDFS への移行

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

  2. explain モードを使用して、移行するパーティションをプレビューします。" dt > 'v' " を、ご利用のパーティションに一致するフィルター条件に置き換えます。

       sudo jindotable -moveTo \
         -t tdb.test_table \
         -d oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table \
         -c " dt > 'v' " \
         -e

    期待される出力:

       Found 1 partitions to move:
             dt=value-2
       MoveTo finished for table tdb.test_table to destination oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table with condition " dt > 'v' " (explain only).
  3. 移行を実行します。データを移動するには、-e フラグを削除します。

       sudo jindotable -moveTo \
         -t tdb.test_table \
         -d oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table \
         -c " dt > 'v' "

    期待される出力:

       Found 1 partitions in total, and all are successfully moved.
       Successfully moved partitions:
           dt=value-2
       No failed partition.
       MoveTo finished for table tdb.test_table to destination oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table with condition " dt > 'v' ".
  4. パーティションの場所を検証します。

       sudo hive> desc formatted test_table partition (dt='value-2');

    出力で、Location が OSS-HDFS パスを指していることを確認します。

       Location: oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_table/dt=value-2
  5. (任意) パーティションを Hadoop 分散ファイルシステム (HDFS) に戻します。HDFS の宛先ディレクトリにすでにデータが含まれている場合、移行は New location is not empty but -overWrite is not enabled というエラーで失敗します。-o を追加して上書きします。

       sudo jindotable -moveTo \
         -t tdb.test_table \
         -d hdfs://<hdfs-path>/user/hive/warehouse/tdb.db/test_table \
         -c " dt > 'v' " \
         -o

    期待される出力:

       Found 1 partitions in total, and all are successfully moved.
       Successfully moved partitions:
           dt=value-2
       No failed partition.
       MoveTo finished for table tdb.test_table to destination hdfs:///user/hive/warehouse/tdb.db/test_table with condition " dt > 'v' ", overwriting new locations.

パラメーター

sudo jindo table -moveTosudo jindotable -moveTo はどちらも同じパラメーターを受け入れます。

sudo 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 形式で指定します。例:tdb.test_tableパーティションテーブルと非パーティション化テーブルの両方をサポートします
-d <destination path>はいテーブルレベルの宛先パス。例:oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/data/tdb.test_tableパーティションテーブルの場合、完全なパーティションパスは <destination path>/<partition key>=<value>
-c "<condition>"-c または -fullTable のいずれかが必要ですパーティションを選択するためのフィルター条件。例:-c " dt > 'v' "> などの一般的な演算子をサポートします。ユーザー定義関数 (UDF) はまだサポートされていません。-fullTable
-fullTable-c または -fullTable のいずれかが必要ですすべてのパーティションを含むテーブル全体を移行します-c
-b/-before <before days>いいえ少なくとも N 日前に作成されたテーブルまたはパーティションのみを移行します。例:-b 30最終更新日時ではなく、作成時間に基づきます
-p/-parallel <parallelism>いいえ同時に移行するパーティションの最大数。デフォルト:1。例:-p 4
-s/-storagePolicy <OSS storage policy>いいえ宛先の OSS ストレージクラス。有効な値:Standard (デフォルト)、IAArchiveColdArchive。例:-s IAOSS-HDFS の宛先には適用されません。ColdArchive を使用するには、まずバケットでコールドアーカイブを有効にする必要があります
-o/-overWriteいいえ宛先パスにすでにデータが含まれている場合に上書きしますパーティションテーブルの場合、移行されたパーティションの宛先パスのみが上書きされます
-r/-removeSourceいいえ移行が成功した後にソースパスを削除しますパーティションテーブルの場合、移行されたパーティションのソースパスのみが削除されます
-skipTrashいいえソースパスを削除するときにゴミ箱ディレクトリをスキップするため、データはファイルシステムからすぐに削除されます-r/-removeSource
-e/-explainいいえExplain モード:データを移動せずに移行されるパーティションを一覧表示します完全な移行を実行する前に、これを使用して範囲を確認します
-l/-logDir <log directory>いいえログファイルのディレクトリ。デフォルト:/tmp/<current user>/。例:-l /var/log/jindo

コマンドラインからヘルプを取得するには、次を実行します。

sudo jindo table -help moveTo

トラブルシューティング

競合の検出

Conflicts found エラーで移行が失敗した場合:

  1. DistCp や JindoDistCp などの他のツールが、同時に同じ宛先パスにデータを書き込んでいないことを確認してください。

  2. 競合する送信先ディレクトリを削除します:

    • 非パーティション化テーブルの場合:テーブルレベルのディレクトリを削除します。

    • パーティションテーブルの場合:競合するパーティションレベルのディレクトリを削除します。

  3. ソースディレクトリは削除しないでください。

競合を解決した後、MoveTo コマンドを再実行します。

宛先ディレクトリが空ではない

New location is not empty but -overWrite is not enabled が表示された場合、宛先パスにはすでにデータが含まれています。コマンドに -o を追加して上書きします。