Azure HDInsight で Apache Zeppelin と Hive Warehouse Connector を統合する
HDInsight Spark クラスターには、異なるインタープリターを持つ Apache Zeppelin Notebook が含まれています。 この記事では、Hive Warehouse Connector を使用して Spark から Hive テーブルにアクセスする Livy インタープリターのみに焦点を当てます。
Note
この記事には、Microsoft が使用しなくなった用語への言及が含まれています。 ソフトウェアからこの用語が削除された時点で、この記事から削除します。
前提条件
Hive Warehouse Connector の設定ステップを完了します。
作業の開始
ssh コマンドを使用して Apache Spark クラスターに接続します。 CLUSTERNAME をクラスターの名前に置き換えて、次のコマンドを編集し、コマンドを入力します:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
SSH セッションから次のコマンドを実行して、
hive-warehouse-connector-assembly
とpyspark_hwc
のバージョンを確認します。ls /usr/hdp/current/hive_warehouse_connector
後で Apache Zeppelin を構成するときに使用するために、出力を保存します。
Livy を構成する
Livy インタープリターを使用して Zeppelin から Hive テーブルにアクセスするには、次の構成が必要です。
対話型クエリ クラスター
Web ブラウザーから、
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HDFS/configs
に移動します。ここで、LLAPCLUSTERNAME は対話型クエリ クラスターの名前です。[詳細]>[カスタム core-site] の順に移動します。 [プロパティの追加...] を選択して、次の構成を追加します。
構成 値 hadoop.proxyuser.livy.groups * hadoop.proxyuser.livy.hosts * 変更を保存し、影響を受けるすべてのコンポーネントを再起動します。
Spark クラスター
Web ブラウザーから、
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs
に移動します。ここで、CLUSTERNAME は Apache Spark クラスターの名前です。カスタム livy2-conf を展開します。 [プロパティの追加...] を選択して、次の構成を追加します。
構成 値 livy.file.local-dir-whitelist /usr/hdp/current/hive_warehouse_connector/ 変更を保存し、影響を受けるすべてのコンポーネントを再起動します。
Zeppelin UI で Livy インタープリターを構成する (Spark クラスター)
Web ブラウザーから、
https://CLUSTERNAME.azurehdinsight.net/zeppelin/#/interpreter
に移動します。ここで、CLUSTERNAME
は実際の Apache Spark クラスターの名前です。[livy2] に移動します。
次の構成を追加します。
構成 値 livy.spark.hadoop.hive.llap.daemon.service.hosts @llap0 livy.spark.security.credentials.hiveserver2.enabled true livy.spark.sql.hive.llap true livy.spark.yarn.security.credentials.hiveserver2.enabled true livy.superusers livy、zeppelin livy.spark.jars file:///usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-VERSION.jar
VERSION を、前述の「作業の開始」で取得した値に置き換えます。livy.spark.submit.pyFiles file:///usr/hdp/current/hive_warehouse_connector/pyspark_hwc-VERSION.zip
VERSION を、前述の「作業の開始」で取得した値に置き換えます。livy.spark.sql.hive.hiveserver2.jdbc.url 対話型クエリ クラスターの HiveServer2 対話型 JDBC URL に設定します。 spark.security.credentials.hiveserver2.enabled true ESP クラスターの場合のみ、次の構成を追加します。
構成 値 livy.spark.sql.hive.hiveserver2.jdbc.url.principal hive/_HOST@<AAD-Domain>
ssh コマンドを使用して Interactive Query クラスターに接続します。
/etc/krb5.conf
ファイルでdefault_realm
パラメーターを探します。<AAD-DOMAIN>
を大文字の文字列としてこの値に置き換えます。そうしないと、資格情報が見つかりません。
変更を保存し、Livy インタープリターを再起動します。
Livy インタープリターがアクセスできない場合、Ambari の Zeppelin コンポーネント内に存在する shiro.ini
ファイルを変更します。 詳細については、Apache Zeppelin Security の構成に関するページをご覧ください。
Zeppelin でのクエリの実行
Livy インタープリターを使用して Zeppelin Notebook を起動し、次のように実行します
%livy2
import com.hortonworks.hwc.HiveWarehouseSession
import com.hortonworks.hwc.HiveWarehouseSession._
import org.apache.spark.sql.SaveMode
# Initialize the hive context
val hive = HiveWarehouseSession.session(spark).build()
# Create a database
hive.createDatabase("hwc_db",true)
hive.setDatabase("hwc_db")
# Create a Hive table
hive.createTable("testers").ifNotExists().column("id", "bigint").column("name", "string").create()
val dataDF = Seq( (1, "foo"), (2, "bar"), (8, "john")).toDF("id", "name")
# Validate writes to the table
dataDF.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").mode("append").option("table", "hwc_db.testers").save()
# Validate reads
hive.executeQuery("select * from testers").show()