概要
Databricksにおける外部Hive Metastoreを、MySQL(Azure Database for MySQL)にてローカルモードでSpark Configにて構築する方法を共有します。
本手順はHive Metastoreのバージョンを0.13.0
で構築する手順です。
databricksの内部Hive Metastoreのバージョンも0.13.0
でした。
Hive Metastoreのバージョンを2.3.7
で構築したい場合には、下記の記事を参考にしてください。
Azure Database for MySQLを構築後にlower_case_table_names
を忘れずに実施してください。
検証環境
databricks runtime: 8.3.x-scala2.12
Python version: 3.8.8
pyspark version: 3.1.2.dev0
手順
1. Hive Metastoreデータベース(Azure Database for MySQL)を初期化するために、Azure Database for MySQLに対して、HiveのレポジトリからダウンロードしたDDL文を実行
下記をSparkConfに設定したクラスターにてデータベースを作成すると自動でHive Metastoreデータベースにテーブルが作成されるのですが、テーブル数が少なかったため利用しないこととしました。
spark.hadoop.javax.jdo.option.ConnectionDriverName org.mariadb.jdbc.Driver
spark.hadoop.javax.jdo.option.ConnectionURL jdbc:mysql://<サーバー名>.mysql.database.azure.com:3306/<スキーマ名>?trustServerCertificate=true&useSSL=true
spark.hadoop.javax.jdo.option.ConnectionUserName <アカウント名(例:adminuser@サーバー名)>
spark.hadoop.javax.jdo.option.ConnectionPassword <パスワード>
datanucleus.autoCreateSchema true
datanucleus.fixedDatastore false
2. 下記の値をSpark Configに設定してクラスターを起動
spark.hadoop.javax.jdo.option.ConnectionDriverName org.mariadb.jdbc.Driver
spark.hadoop.javax.jdo.option.ConnectionURL jdbc:mysql://<サーバー名>.mysql.database.azure.com:3306/<スキーマ名>?trustServerCertificate=true&useSSL=true
spark.hadoop.javax.jdo.option.ConnectionUserName <アカウント名(例:adminuser@サーバー名)>
spark.hadoop.javax.jdo.option.ConnectionPassword <パスワード>
datanucleus.schema.autoCreateAll false
datanucleus.autoCreateSchema false
datanucleus.fixedDatastore true
datanucleus.connectionPool.minPoolSize 0
datanucleus.connectionPool.initialPoolSize 0
datanucleus.connectionPool.maxPoolSize 1
hive.stats.autogather false
mapred.reduce.tasks 100
hive.metastore.client.socket.timeout 3600
hadoop.tmp.dir /local_disk0/tmp
hive.metastore.client.connect.retry.delay 10
hive.metastore.failure.retries 30
クラスターのターミナルにてcat /databricks/hive/conf/hive-site.xml
により確認できるDatabricksのデフォルトのプロパティを設定しております。
3. 起動したクラスターにてデータベースとテーブルが作成できることを確認
その他対応
1. Spark ConfigにDatabricksシークレットを設定
Hvie Metastoreデータベースへのパスワード等については、Databricksシークレットから設定できます。
下記のドキュメントにて説明されております。
引用元:シークレット - Azure Databricks - Workspace | Microsoft Docs
2. Hive Metastoreのパラメータについて
0.13.0
を含む2以前のバージョンの場合には下記のドキュメントに記載されております。
引用元:AdminManual Metastore Administration - Apache Hive - Apache Software Foundation
3以降のバージョンの場合には下記のドキュメントに記載されております。
引用元:AdminManual Metastore 3.0 Administration - Apache Hive - Apache Software Foundation