Azure Storage の新しいアカウントへの Hive ワークロードの移行

スクリプト アクションを使用して、HDInsight のストレージ アカウント間で Hive テーブルをコピーする方法について説明します。 これは、Azure Data Lake Storage Gen2 に移行するときに役立つ場合があります。

HDInsight 4.0 で個々の Hive テーブルを手動でコピーする場合は、Hive のエクスポート/インポートに関する記事を参照してください。

前提条件

  • 次の構成が設定された新しい HDInsight クラスター:

  • 元のクラスターと新しいクラスターの両方にアクセスできるストレージ アカウント。 使用できるセカンダリ ストレージの種類については、「HDInsight にストレージ アカウントを追加する」と 「ストレージの種類と機能」を参照してください。

    次のことをお試しください。

    • ターゲット ストレージ アカウントを元のクラスターに追加します。
    • 元のストレージ アカウントを新しいクラスターに追加します。
    • 中間ストレージ アカウントを元のクラスターと新しいクラスターの両方に追加します。

しくみ

スクリプト アクションを実行して、Hive テーブルを元のクラスターから指定した HDFS ディレクトリにエクスポートします。 「実行中のクラスターに対するスクリプト アクション」を参照してください。

次に、新しいクラスターで別のスクリプト アクションを実行して、HDFS ディレクトリから Hive テーブルをインポートします。

このスクリプトにより、新しいクラスターの既定のファイルシステムに対してテーブルが再作成されます。 ネイティブ テーブルでは、そのデータもストレージにコピーされます。 ネイティブでないテーブルでは、定義によってのみコピーされます。 ネイティブでないテーブルの詳細については、「Hive ストレージ ハンドラー」を参照してください。

Hive ウェアハウス ディレクトリにない外部テーブルのパスは保持されます。 他のテーブルは、ターゲット クラスターの既定の Hive パスにコピーされます。 Hive のプロパティ hive.metastore.warehouse.external.dir および hive.metastore.warehouse.dir を参照してください。

これらのスクリプトでは、ターゲット クラスターでカスタム ファイルのアクセス許可は保持されません。

Note

このガイドでは、Hive データベース、テーブル、およびパーティションに関連するメタデータ オブジェクトのコピーがサポートされています。 他のメタデータ オブジェクトは手動で再作成する必要があります。

  • Views については、Hive では HDInsight 4.0 の Hive 2.2.0 以降で SHOW VIEWS コマンドがサポートされています。 ビュー定義には SHOW CREATE TABLE を使用します。 以前のバージョンの Hive の場合は、メタストア SQL DB に対してクエリを実行して、ビューを表示します。
  • Materialized Views については、コマンド SHOW MATERIALIZED VIEWSDESCRIBE FORMATTEDCREATE MATERIALIZED VIEW を使用します。 詳細については、「具体化されたビュー」を参照してください。
  • HDInsight 4.0 の Hive 2.1.0 以降でサポートされている Constraints については、DESCRIBE EXTENDED を使用してテーブルの制約を一覧表示し、ALTER TABLE を使用して制約を追加します。 詳細については、テーブル制約の変更に関する記事を参照してください。

Hive テーブルをコピーする

  1. 次のフィールドを使用して、元のクラスターに "エクスポート" スクリプト アクションを適用します。

    これにより、中間 Hive スクリプトが生成され、実行されます。 これらは、指定された <hdfs-export-path> に保存されます。

    必要に応じて、手動で実行する前に --run-script=false を使用してそれらをカスタマイズします。

    プロパティ
    Bash スクリプト URI https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/export-hive-data-v01.sh
    ノードの種類 Head
    パラメーター <hdfs-export-path> --run-script
    usage: generate Hive export and import scripts and export Hive data to specified HDFS path
           [--run-script={true,false}]
           hdfs-export-path
    
    positional arguments:
    
        hdfs-export-path      remote HDFS directory to write export data to
    
    optional arguments:
        --run-script={true,false}
                            whether to execute the generated Hive export script
                            (default: true)
    
  2. エクスポートが正常に完了したら、次のフィールドを使用して、新しいクラスターに "インポート" スクリプト アクションを適用します。

    プロパティ
    Bash スクリプト URI https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/import-hive-data-v01.sh
    ノードの種類 Head
    パラメーター <hdfs-export-path>
    usage: download Hive import script from specified HDFS path and execute it
           hdfs-export-path
    
    positional arguments:
    
      hdfs-export-path      remote HDFS directory to download Hive import script from
    
    

検証

スクリプト hive_contents.sh をダウンロードし、各クラスターのプライマリ ノードでルート ユーザーとして実行し、出力ファイル /tmp/hive_contents.out の内容を比較します。 「SSH を使用して HDInsight (Apache Hadoop) に接続する」を参照してください。

追加のストレージ使用をクリーンアップする

ストレージの移行が完了し、検証されたら、指定した HDFS エクスポート パスのデータを削除できます。

オプションは、HDFS コマンド hdfs dfs -rm -R を使用することです。

オプション: 追加のストレージ使用量を減らす

エクスポート スクリプト アクションを行うと、Hive が原因でストレージ使用量が 2 倍になる恐れがあります。 ただし、一度に 1 つのデータベースまたはテーブルを手動で移行することで、追加のストレージ使用を制限することが可能です。

  1. --run-script=false を指定して、生成された Hive スクリプトの実行をスキップします。 Hive のエクスポートとインポートの各スクリプトは、エクスポート パスに引き続き保存されます。

  2. データベースごと、またはテーブルごとに、Hive のエクスポートとインポートの各スクリプトのスニペットを実行し、各データベースまたはテーブルの移行後にエクスポート パスを手動でクリーンアップします。

次のステップ