Azure Storage の新しいアカウントへの Hive ワークロードの移行
スクリプト アクションを使用して、HDInsight のストレージ アカウント間で Hive テーブルをコピーする方法について説明します。 これは、Azure Data Lake Storage Gen2
に移行するときに役立つ場合があります。
HDInsight 4.0 で個々の Hive テーブルを手動でコピーする場合は、Hive のエクスポート/インポートに関する記事を参照してください。
前提条件
次の構成が設定された新しい HDInsight クラスター:
- その既定のファイルシステムが、ターゲット ストレージ アカウント内にあります。 「Azure HDInsight クラスターで Azure Storage を使用する」を参照してください。
- そのクラスターのバージョンが、ソース クラスターのものと一致している必要があります。
- これは、新しい外部 Hive メタストア DB を使用します。 外部メタデータ ストアの使用に関する記事を参照してください。
元のクラスターと新しいクラスターの両方にアクセスできるストレージ アカウント。 使用できるセカンダリ ストレージの種類については、「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 VIEWS
、DESCRIBE FORMATTED
、CREATE MATERIALIZED VIEW
を使用します。 詳細については、「具体化されたビュー」を参照してください。- HDInsight 4.0 の Hive 2.1.0 以降でサポートされている
Constraints
については、DESCRIBE EXTENDED
を使用してテーブルの制約を一覧表示し、ALTER TABLE
を使用して制約を追加します。 詳細については、テーブル制約の変更に関する記事を参照してください。
Hive テーブルをコピーする
次のフィールドを使用して、元のクラスターに "エクスポート" スクリプト アクションを適用します。
これにより、中間 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)
エクスポートが正常に完了したら、次のフィールドを使用して、新しいクラスターに "インポート" スクリプト アクションを適用します。
プロパティ 値 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 つのデータベースまたはテーブルを手動で移行することで、追加のストレージ使用を制限することが可能です。
--run-script=false
を指定して、生成された Hive スクリプトの実行をスキップします。 Hive のエクスポートとインポートの各スクリプトは、エクスポート パスに引き続き保存されます。データベースごと、またはテーブルごとに、Hive のエクスポートとインポートの各スクリプトのスニペットを実行し、各データベースまたはテーブルの移行後にエクスポート パスを手動でクリーンアップします。