Qlik Replicate–Databricksターゲットの利用
はじめに
このチュートリアルでは、MySQLのデータソースとAzure Databricksを対象に、Qlik Replicateを利用してリアルタイムにデータをレプリケートするための手順をご紹介します。
【検証環境】
- Qlik Replicate 6.6.0 SR2 on Windows
- MySQL Community Edition 5.7.18 on Windows
- Azure Databricks (14日間無料体験版)
※Azureアカウント、およびAzure Databricks Serviceアカウントがある前提で本チュートリアルは記述されています。
※Databricksで使用するクラスターやストレージについてはAzureの利用料金が発生します。実機検証の際は検証後に環境のクリーンアップをしていただくなど、コストの発生・増加には十分にご注意ください。
準備
Azureポータルにログインし、Databricksに使用するストレージなどの設定を行います。
ADLS Gen2の作成と設定
Databricksで使用するストレージをStorage Accountから作成します。
AzureポータルでStorage Accountを選択します。※Serviesの一覧に無い場合は画面上部のSearchから検索いただけます。
新規のStorage Accountを作成するため、[+Add]を選択します。
[Basic]タブの各項目を画像を参考に設定します。Resource groupやStorage account nameは任意で分かりやすい名前を付けてください。Account kindはStorageV2(general purpose v2)を選択します。
設定が完了したら[Next : Networking]を選択します。
Connectivity methodは、[Public endpoint (all networks)]にチェックを入れます。
本チュートリアルでは、ネットワークはpublicに公開する設定としています。お手元で試される場合は、所属組織のポリシーやニーズに従って設定してください。Private endpointを設定する場合には、Storage AccountがAzure Databricksに接続できるようにAzure Databricksが作成するサブネットを2つ追加してください。
画面下部の[Next : ~]を二回クリックし、[Advanced]タブに移動します。
[Hierarchical namespace(階層型の名前空間)]をEnabled(有効)にします。その他の設定は既定のままとします。
左下の[Review + create]をクリックし、設定内容を確認して問題なければ[Create]を選択してStorage Accountを作成します。
これでStorage Accountの作成は完了です。(ストレージがデプロイされるまでに数分かかることがあります。)
Azure Active Directoryへのアプリ登録
ADLS Gen2のストレージアカウントの設定
- Role: Storage Blob Data Contributor
- Assign access to: User, group, or service principal
- Select: 先ほどADで登録したアプリ名を選択(ここでは「QDIAPP」)
ファイルシステムにターゲットディレクトリを作成
Qlik ReplicateとAzure Databricksの設定
Databricks ODBC Driverのダウンロードとインストール
DatabricksのWebサイトからODBCドライバをダウンロードし、Qlik Replicateサーバーにインストールします。インストール手順に関してはここでは割愛します。
JDBC and ODBC drivers and configuration parameters
Databricks Tokenの作成とクラスター作成
AzureポータルのHome画面からからAzure Databricksのポータル(Workspace)にアクセスします。
Azure Databricks Workspaceを作成します。[Add]を選択してアカウントを作成します。
ここでは14日間のフリートライアルを利用しています。以下の設定を行って左下の[Review + create]をクリックし、設定内容を確認して問題なければ[Create]を選択してAzure Databricks Workspaceを作成します。
作成したWorkspaceの[Overview]を開いて[Launch Workspace]をクリックします。
Azure Databricksポータルにて、右上のworkspace名をクリックして表示される[User Settings]を選択します。
[Access Tokens]のタブで[Generate New Token]を選択します。
コメントを任意(ここでは空欄)で入力し、[Generate]を選択しTokenを生成します。
Tokenの値をテキストエディタなど安全な場所に保存します。以降、ポータルからこの値を確認することはできませんので必ずこのタイミングで保存してください。[Done]をクリックしてToken生成画面を閉じます。
続いてClusterを作成し、そこでSpark設定を行います。ポータル左側メニューの[Clusters]を選択します。
[Create Cluster]を選択します。
[Cluster Name]を「qdi_cluster」とします。続いて、同画面下部の[Advanced Options]を選択して展開し、[Spark]タブのSpark Configのスペースに「spark.hadoop.hive.server2.enable.doAs false」と入力します。完了したら、一番上の[Create Cluster]を選択してクラスターを作成します。
※以前に作成したクラスターのSpark Configを「spark.hadoop.hive.server2.enable.doAs false」と変更いただいて、クラスターを再起動することでお使いいただくことも可能です。
データドライブのマウント
Azure Databricksポータルの左側メニューの[Workspace]から画像を参考に新規にNotebookを作成します。
任意の名前を付与し、Clusterには先ほど作成したqdi_clusterを指定し、[Create]を選択します。
Notebookの最初のセルに以下のコマンドを貼り付けて、セル右上の実行ボタンから[Run Cell]を選択してプログラムを実行します。
※<~~~~>の文字列は適宜これまでに取得した値に変更してください。
%python configs = {"fs.azure.account.auth.type": "OAuth", "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider", "fs.azure.account.oauth2.client.id": "<application-id>", "fs.azure.account.oauth2.client.secret": "<client-secret>", "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}
# Optionally, you can add <directory-name> to the source URI of your mount point. dbutils.fs.mount( source = "abfss://<file-system-name>@<storage-account-name>.dfs.core.windows.net/<directory-name>", mount_point = "/mnt/<mount-name>", extra_configs = configs)
<application-id>: Azure Active Directoryで登録したアプリ (QDIAPP) のOverviewから確認できるApplication (client) ID
<client-secret> : Azure Active Directoryで登録したアプリ (QDIAPP) で生成し保存したClient secretのValue
<directory-id> : Azure Active Directory で登録したアプリ (QDIAPP) のOverviewから確認できるDirectory ID (tenant ID)
<file-system-name> : ADLS Gen2 のContainer名。ここでは「replicate」
<storage-account-name> : ADLS Gen2のstorage account名。ここでは、「qdistorageaccount」
<directory-name> : Storage AccountのContainerのうち、使用するディレクトリ名。ここでは「landing」
<mount-name> : DatabricksにマウントされるSourceの場所。SourceはQlik Replicateのターゲットフォルダのファイルシステムのことです。ここでは「replicate」とします。
Databricks DBの作成とODBCドライバの設定
%sql
drop database if exists <database-name>;
create database <database-name> location '<mount-point>';
Qlik ReplicateでAzure Databricksへのエンドポイントを作成
- Name: Databricks_TGT
- Role: Target
- Type: Microsoft Azure Databricks
- Storage type: Azure Data Lake Storage Gen2
- Storage account: ADLS Gen2で作成したstorage account名。ここでは「qdistorageaccount」
- Azure Active Directory ID: Azure Active Directory で登録したアプリ (QDIAPP) のOverviewから確認できるDirectory ID (tenant ID)
- Azure Active Directory application ID: Azure Active Directoryで登録したアプリ (QDIAPP) のOverviewから確認できるApplication (client) ID
- Azure Active Directory application key: Azure Active Directoryで登録したアプリ (QDIAPP) で生成し保存したClient secretのValue
- File System: ADLS Gen2で作成したコンテナ名。ここでは「replicate」
- Target folder:Replicateで書き込みたいフォルダ名。ここでは「/landing」
- Host: Databricksワークスペースのホスト名(クラスターのJDBC/ODBCタブに記載)
- Port: 443
- Token: 作成したDatabricks Token
- HTTP Path : クラスターのJDBC/ODBCタブに記載
- Database : Notebookで作成したDatabase名。ここでは「replicate」
- Mount Path : Notebookで指定したMount Path名。ここでは「/mnt/replicate」
[Test Connection]を選択して接続テストが成功したら、[Save]を選択してエンドポイントを保存します。
Replication Taskの作成と実行
- Name: MySQL2Databricks
- Description : 空欄
- Replication Profile : Unidirectional
- Task Options: Full LoadとStore ChangesをOn (Apply ChangesはOFF)
[MySQL_SRC]をソースに、[Databricks_TGT]に、左側のEndpoint Connectionsから中央のキャンパスにドラッグ&ドロップで設定します。
[Table Selection…]を選択します。
[Schemas:]から[sales]を選択し、[Search]をクリックします。
[sales]スキーマの全9テーブルを移行対象とするため[>>]を選択し、[OK]をクリックします。
[Save]を選択しタスクの設定を保存してから、[Run]を選択しレプリケーションタスクを実行します。