概要
Databricksにおける外部Hive Metastoreを、Azure SQL DatabaseにてローカルモードでSpark Configにて構築する方法を共有します。
本手順はHive Metastoreのバージョンを0.13.0
で構築する手順です。
databricksの内部Hive Metastoreのバージョンも0.13.0
でした。
HD InsightのドキュメントにてAzure SQL DatabaseをHive Metastoreデータベースとして利用する際のサイジング方法が記載されており、DTUモデルのS2からスケールアップする方針がよいようです。
引用元:外部メタデータ ストアの使用 - Azure HDInsight | Microsoft Docs
Hive Metastoreのバージョンを2.3.7
で構築したい場合には、下記の記事を参考にしてください。
検証環境
databricks runtime: 8.3.x-scala2.12
Python version: 3.8.8
pyspark version: 3.1.2.dev0
手順
1. Hive Metastoreデータベース(Azure SQL Database)を初期化するために、Azure SQL Databaseに対して、HiveのレポジトリからダウンロードしたDDL文を実行
下記をSparkConfに設定したクラスターにてデータベースを作成すると自動でHive Metastoreデータベースにテーブルが作成されるのですが、テーブル数が少なかったため利用しないこととしました。
spark.hadoop.javax.jdo.option.ConnectionDriverName com.microsoft.sqlserver.jdbc.SQLServerDriver
spark.hadoop.javax.jdo.option.ConnectionURL jdbc:sqlserver://<サーバー名>.database.windows.net:1433;database=<データベース名>
spark.hadoop.javax.jdo.option.ConnectionUserName <アカウント名(例:adminuser@サーバー名)>
spark.hadoop.javax.jdo.option.ConnectionPassword <パスワード>
datanucleus.autoCreateSchema true
datanucleus.fixedDatastore false
spark.hadoop.javax.jdo.option.ConnectionDriverName com.microsoft.sqlserver.jdbc.SQLServerDriver
spark.hadoop.javax.jdo.option.ConnectionURL jdbc:sqlserver://<サーバー名>.database.windows.net:1433;database=<データベース名>
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