Apache Spark と Hive LLAP クエリを統合する
前のユニットでは、対話型クエリ クラスターに格納されている静的データに対してクエリを実行する 2 つの方法 (Data Analytics Studio と Zeppelin Notebook) を確認しました。 しかし、Spark を使用して新しい不動産データをクラスターにストリーミングし、Hive を使用してクエリを実行する場合はどうでしょうか? Hive と Spark には 2 つの異なるメタストアがあるため、2 つの間をブリッジするコネクタが必要です。Apache Hive Warehouse Connector (HWC) がそのブリッジです。 Hive Warehouse Connector ライブラリでは、Spark DataFrame と Hive テーブル間でのデータの移動、また、Spark ストリーミング データの Hive テーブルへの送信などのタスクをサポートすることにより、Apache Spark と Apache Hive でより簡単に作業できます。 このシナリオではコネクタを設定しませんが、オプションが存在することを知っておくことが重要です。
Apache Spark には、Apache Hive では使用できないストリーミング機能を提供する、構造化ストリーミング API があります。 HDInsight 4.0 以降では、Apache Spark 2.3.1 と Apache Hive 3.1.0 に別個のメタストアがあったため、相互運用が困難でした。 Hive Warehouse Connector によって、Spark と Hive を一緒に使用することが容易になります。 Hive Warehouse Connector ライブラリによって LLAP デーモンから Spark Executor にデータが並列で読み込まれるため、Spark から Hive への標準的な JDBC 接続を使用するよりも効率的でスケーラブルになります。
Hive Warehouse Connector でサポートされる操作の一部を次に示します。
- テーブルを記述する
- Optimized Row Columnar (ORC) 形式のデータ用のテーブルを作成する
- Hive データを選択して DataFrame を取得する
- DataFrame を Hive にバッチで書き込む
- Hive の更新ステートメントを実行する
- Hive からテーブル データを読み取り、Spark で変換し、新しい Hive テーブルに書き込む
- Hive ストリーミングを使用して DataFrame または Spark ストリームを Hive に書き込む
Spark クラスターと対話型クエリ クラスターをデプロイしたら、すべての HDInsight クラスターに含まれる Web ベースのツールである、Ambari で Spark クラスターの設定を構成します。 Ambari を開くには、インターネット ブラウザーで https://servername.azurehdinsight.net に移動します。ここで、servername はご利用の対話型クエリ クラスターの名前です。
次に、Spark ストリーミング データをテーブルに書き込むために、Hive テーブルを作成し、それに対するデータの書き込みを開始します。 その後、ストリーミング データに対してクエリを実行します。次のいずれかを使用できます。
- spark-shell
- PySpark
- spark-submit
- Zeppelin
- Livy