はじめに

このチュートリアルでは、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へのアプリ登録

続いて、Qlikデータ統合製品からAzure上のStorage AccountなどへのAPIアクセスを許可するためにAzure Active Directoryへのアプリ登録を行います。
Azureポータルで[Azure Active Directory]を選択します。
左側のメニューから[App registrations]を選択します。
続いて、[+ New registration]を選択します。
任意の名前を設定し、[Register]を選択して登録します(ここでは「QDIAPP」)。
ここで生成される”Application (client) ID” と “Directory (tenant) ID”を後ほどQlikデータ統合からの接続パラメータとして使用しますので、テキストエディタなどにコピー&ペーストして保存してください。。
左側のメニューから[API permissions]を選択します。
続いて、[+ Add permission]を選択します。
[Microsoft API]配下の[Azure Data Lake]を選択します。
[Delegated permissions]配下の[user_impersonation]にチェックを入れ、[Add permissions]を選択します。
左側メニューから[Certificates & secrets]を選択します。
続いて、[+ New client secret]を選択します。
Descriptionを空欄のまま、期限を[In 1 year]とし、[Add]を選択します。
直後に生成されるClient secretの[value]をテキストエディタなどにコピー&ペーストし安全な場所に保存してください。以降、このページを離れるとSecretのValueは二度と確認することができなくなりますので、必ず生成直後に保存してください。

ADLS Gen2のストレージアカウントの設定

先ほど作成したStorage Accountにアクセス権限の設定を行っていきます。
作成したStorage Account (ここでは、qdistorageaccount) のページに移動して、左側メニューから[Containers]を選択します。
続いて、[+ Container]を選択します。
右側に表示されるNew containerにて、任意のコンテナ名(ここでは「replicate」)を指定し、[Create]を選択してコンテナを作成します。
左側の[Access control (IAM)]を選択します。
続いて、[+ Add]→[Add role assignment]の順に選択します。
画面右側に表示される設定メニューで以下の項目を設定し、[Save]を選択します。
  • Role:  Storage Blob Data Contributor
  • Assign access to:  User, group, or service principal
  • Select:  先ほどADで登録したアプリ名を選択(ここでは「QDIAPP」)

ファイルシステムにターゲットディレクトリを作成

先ほどStorage Accountにて作成した「replicate」コンテナにQlik Replicateのターゲットディレクトリを作成します。
作成したStorage AcountのOverviewページで[Open in Explorer]を選択します。
Storage Explorerというアプリケーションがダウンロードされます。そちらを開いて、作成したStorage AccountのBlob Containers(ここではreplicate)を選択し、[新しいフォルダ…]を選択します。
Qlik Replicateのためのターゲットフォルダ―を作成します。(ここでは「landing」)

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]を選択してアカウントを作成します。

image

ここでは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ドライバの設定

前出のNotebookのセルの下にもう一つセルを追加します。※セルの下部にマウスカーソルを近づけると[+]が表示されますのでそちらをクリックしてセルを追加します。
以下のコードを貼り付け、実行します。
※<~~~~>の文字列は適宜変更してください。
%sql
drop database if exists  <database-name>;
create database <database-name> location '<mount-point>';
<database-name>:  任意のDB名を付与します。ここでは「replicate」とします。
<mount-point>: 一つ前の節で設定した「mount_point」の値を貼り付けます。ここでは「/mnt/replicate」
Azure Databricksポータル左側メニューの[Data]タブから、replicateというDBが作成されたか確認します。
[Cluster]から先ほど作成した「qdi_cluster」を開き、[Advanced Options]タブを展開します。
[JDBC/ODBC]のタブを開き、各種パラメータを確認します。こちらを後ほどQlik Replicateとの接続に使用します。

Qlik ReplicateでAzure Databricksへのエンドポイントを作成

Qlik Replicateのコンソールを開き、[Manage Endpoint Connections]を選択します。
[New Endpoint Connection]を選択します。
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の作成と実行

Qlik ReplicateでMySQLからAzure Databricksにデータ複製を行うタスクを作成し、実行します。
※ソースとなるMySQLの設定やタスク作成手順の詳細は割愛します。以下の記事を参考にしてください。
[New Task…]を選択します。
以下のように設定し、[OK]を選択します。
  • 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]を選択しレプリケーションタスクを実行します。

タスクを実行すると[Monitor]ビューに自動的に切り替わります。Full Loadのタブを確認すると、初期のFull Loadの実行状況を確認いただけます。タスクは変更データ捕捉(CDC)のために実行され続けていますが、そちらの状況は[Full Load]タブ右横の[Change Processing]のタブで確認いただけます。
 
Azure Databricksポータル左側メニューの[Data]タブから、replicateのデータベース内にテーブルがロードされたことが確認できます。
image
Replicateを使ったAzure Databricksへのリアルタイムなデータのレプリケートするための手順は以上です。続いて、Qlik Compose for Data Lakesを使ったAzure Databricksとの連携を行うには、以下のチュートリアルをご参照ください。