SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2019 のBig Data Cluster を扱う際に見ておきたい情報

leave a comment

SQL Server 2019 の大きな機能として Big Data Cluster があります。
現在は Limited Public Preview として公開がされている機能ですが、SQL Server 2019 の Early Adoption Program に承認されると利用できるようになります。

Big Data Cluster を取り扱う際に見ておきたい情報がいくつか公開されていますので、情報をまとめておきたいと思います。

全体像をつかむには?

Ignite 2018 で発表された直後から、公開されている情報が更新されているようで、インストールを含めた流れは、What is SQL Server 2019 big data clusters? からの一連のドキュメントとして公開されています。

実際のインストールについては、EAP の承認により連携される情報がないと実施することはできませんが、ドキュメントからも色々と情報がわかるかと。

テクニカルホワイトペーパーも Microsoft SQL Server 2019 and Big Data—a technical white paper で公開されていますので、最初にこちらを確認すると全体像がつかめるかと。

Ignite 2018 では Big Data Cluster に特化したセッションもいくつか実施されており、スピーカーの Travis Wright さんの SlideShare で以下の 2 種類のスライドが公開されていますので、こちらも目を通しておくとよいかと。
現時点で全体像から詳細までがまとめられている唯一のドキュメントかと思います。

 

Big Data Cluster とは??

Big Data Cluster は次のような 3 つの目的を実現することができる機能となっています。

  • 全てのデータを統合
  • 全てのデータを管理
  • 全てのデータを分析

これらを実現するために、SQL Server 2019 では次のような機能が追加されています。

  • 新しい PolyBase を使用したデータの仮想化
  • HDFS を使用した Data Lake の作成
  • Big Data Cluster の Storage Pool 層を使用したデータマートの作成
  • Spark / Machine Learning Services によるデータの分析
  • k8s の Pod を利用したコンポーネント単位のスケールアウト

最初にこれらの目的や追加された機能イメージを念頭に置いておくと全体像を把握しやすいのではないでしょうか。
私は上記の内容を意識して、情報を確認していたのですが、これらを意識しておくと、機能の意味が頭に入ってきやすかったです。

Big Data Cluster は、k8s の Pod によって構成されており、各役割が Pod としてパッケージングされていることになります。
そのため、スケールアウトさせる場合は Pod を増やすことで実施できるというような特徴も持っています。

 

Big Data Cluster の構成を把握するには?

Big Data Cluster は複数の層と、コンポーネントにより構成されています。

image

画像は What is SQL Server 2019 big data clusters? より引用

大きく分けて次の三階層で構成されています。

  • コントロール プレーン
  • コンピュート プレーン
  • データ プレーン

コントロール プレーン

ドキュメントの次のコンポーネントが含まれている面になります。

データを利用するのに意識しておく必要があるのが、SQL Server Master Instance の存在ではないでしょうか。
この Pod が Big Data Cluster の SQL Server にアクセスをするためのインタフェースとなります。

Connect to SQL Server master instance and SQL Server big data cluster HDFS/Spark end points / Connect to a SQL Server big data cluster with Azure Data Studio 等のドキュメントで TCP 31433 に対して接続が行われていますが、このポートで接続しているのが SQL Server Master Instance となります。

このポートが外部から SQL Server に接続をするための唯一の公開されたポートとなり、コンピュート プレーンやデータ プレーンの SQL Server は、Master Instance を介して使用することになりますので、T-SQL でデータを取り扱うためのインタフェースとして利用されるイメージですね。

Hadoop へのアクセスについては、Knox Gateway が利用されており、これについてもコントロールプレーン内の Pod としてホストされています。
Use curl to load data into HDFS on SQL Server 2019 CTP 2.0 で解説されていますが、WebHDFS のインタフェースも持っていますので、HTTP でデータを HDFS に流すことも可能となっています。

これらのインタフェースをアプリケーションから利用することになり、Azure Data Studio では、次の 2 種類のコネクションタイプにより使用することができるようになっています。
image

Big Data Cluster では、両方のコネクションタイプを利用することになります。
「Microsoft SQL Server」から TCP 31433 をリスニングしている k8s のサービスに接続をすることで、SQL Server Master Instance 上の SQL Server の操作を行います。
「SQL Server big data cluster」から、Knox Gateway の TCP ポートをリスニングしている k8s のサービスに接続することで、Hadoop の操作を行います。

他にも Restore a database into the SQL Server big data cluster master instance で解説されているように、外部データだけではなく、Master Instance 自体にデータベースを持たせて、データを利用するという方法も取れるようです。
データプレーンとのすみわけを考量する必要があるのではと思いますが、データベースを配置するロールとしても使うことができるのは覚えておくとよさそうです。

コントロール プレーンはクラスターの管理を担っている面で、ここにクラスター全体を管理するための各種コンポーネント /  k8s のマスター / SQL Server の接続のインタフェースとなる SQL Server Manster Instance 等が含まれていることになります。

コンピュート プレーン

ドキュメントの次のコンポーネントが含まれている面になります。

CTP 2.0 時点では、クラスターごとに一つのコンピュートプールがサポートされています。
コンピュートプールは PolBase スケールアウトグループとして動作することになり、外部データソースとのインタフェースとして利用されます。
# 現状は 1 コンピュート プールのみのサポートとなるようなので、PolyBase スケールアウトグループは CTP 2.0 では試すことができないと思いますが。

リンクサーバーでも外部データソースとの連携はできるのですが、PolyBase ではスケールアウトできるようになっており、パフォーマンスの優位性がありますので、効率よく外部データと連携をするために、コンピュート プレーンを使うイメージでいるとよいのかと。

データ プレーン

ドキュメントの次のコンポーネントが含まれている面になります。

データ プールとストレージ プールという二種類のロールが含まれていますがこれらはデータ格納の方法によって使い分けが行われます。

データ プールは SQL Server のデータベースにデータを格納します。
一般的な利用方法としては PolyBase により外部データソースにアクセスし、取得したデータをデータプール内のデータベースに格納をして、データマートとして利用することになるかと。
このデータマートのデータは Master Instance から参照することができるので、Master Instance 上のデータベースとも結合して参照することができるようになります。

ストレージ プールは Hadoop のエコシステム + SQL Server によって構成されているロールとなり、データを HDFS に格納することになります。
Spark も含まれているので HDFS のデータを Spark を使用して分析するということも可能となっています。
この HDFS についても、Master Instance から参照することができるようになっています。

SQL Server のデータベースによって構築されたデータマートと、HDFS によって構築された Big Data のデータを格納するのがデータプレーンの役割になります。

 

特徴と役割

ここまでで、各プレーンに含まれている役割を見てみました。

それでは冒頭に記載した、Big Data Cluster の目的について、もう一度見直してみましょう。

全てのデータを統合

Big Data Cluster には、様々なデータソースに対応した新しい PolyBase が含まれています。
これにより、複数のデータを SQL Server をインタフェースとしてアクセスが可能となっています。
この部分は「データ仮想化」とも呼ばれており、「データ仮想化」によって、SQL Server を「Data Hub」として使用することにより様々なデータを Transact-SQL をインタフェースとして統合して取り扱うことができる用意なります。

 

全てのデータを管理

Big Data Cluster は、SQL Server のデータベースとしてデータマートを作成する機能と、HDFS を利用して Big Data を格納するための機能が含まれています。
これにより、大小さまざまなデータを格納することができるようになっています。

また、データ仮想化により、「データをデータソースから移動させることなく参照」することができるようになります。
これには、次のようなメリットがあります。

  • データソースのデータをリアルタイムに参照することができる
  • データの移動を行わないため、データの重複管理が不要となり、セキュリティの向上や、ストレージサイズの削減が行える
    (どちらも「データを 1 箇所で持てばよい」ことにより利点となります)

PolyBase はスケールアウトによりパフォーマンスを向上させることができますが、データサイズ等によっては、外部データとしての参照を最小限に抑えたい場合もあるかと思います。
これは「データ移動を行わない」というのとは逆になるのですが、「頻繁に利用するデータを SQL Server にキャッシュする」という機能も備えています。
具体的にはデータ プールの SQL Server のデータベースにデータを格納して利用するという方法になります。

  • データを移動せず、データソースのデータを直接参照
  • データを移動させ、データソースのデータをローカル DB として参照

このようなデータの利用を Transact-SQL をインタフェースとして実現することができるようになります。

 

全てのデータを分析

SQL Server 2019 では、Machine Learning Services が SQL Server on Linux にも対応するようになりました。
これは、「Kubernetes 上に構築された SQL Server on Linux の Pod でも Machine Learning Services が利用できるようになった」ということでもあります。

ML Services は、Transact-SQL で取得した結果を、機械学習モデルに渡して、結果を付与するということができます。これを PolyBase と組み合わせと、外部データソースのデータを使用して機械学習を実施するということが可能になります。

また、Big Data Cluster には、Spark を利用することも可能となっており、SparkML による機械学習の実行も可能です。Azure Data Studio は、Notebook に対応していますので、Big Data Cluster に Notebook で接続をして、解析を行うということも可能となっています。

現時点で公開されている情報からでも、このようなことが読み取れるのではないでしょうか。

 

サンプルの実行

What is SQL Server 2019 big data clusters? で構成やインストールの理解はすることができるのですが、現時点ではデータ操作のチュートリアルが少し少ないかと思います。

実際のデータ操作等については、Ignite 2018 で実施されたハンズオンのコンテンツを見るとよいかと。

https://github.com/Microsoft/sql-server-samples/tree/master/samples/hands-on-labs/sql-server-big-data-cluster

ハンズオンで使用したデータベース自体は公開されていないのですが、このサンプルからも様々な情報を確認することができます。

  • data_ingestion_using_spark_streaming.sql
    • データ プールのデータマートに、Spark Job を使用して HDFS のデータを投入する方法
  • data_ingestion_using_sql_store_proc.sql
    • データ プールのデータマートに、ストアドプロシージャを使用して、SQL の実行結果を格納する方法
  • data_virtualization_hdfs.sql
    • ストレージ プールの HDFS のデータを、外部テーブルとして参照させる方法

上記のような Big Data Cluster でデータを認識させる際の具体的なクエリは、現状 docs のドキュメントからは確認できないと思いますので、これらのサンプルを実行してみることは、機能を理解するための一助となります。

 

データを様々な観点で活用するための Big Data Cluster は、含まれているコンポーネントが多く、今まで Hadoop のエコシステムを利用していた方には、当然の内容がたくさん含まれていると思うのですが、RDBMS を主に扱ってきたエンジニアにとっては学習するのに時間がかかります。

データを活用するために、知っておかなくてはいけない知識がたくさん詰まっていますので、かなり勉強になりますね。

Written by masayuki.ozawa

10月 7th, 2018 at 8:55 pm

Posted in SQL Server

Tagged with ,

Leave a Reply

*