0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQL Server 2019 ビッグデータクラスターを AKS で使う - HDFS の階層化

Last updated at Posted at 2019-12-15

SQL Server 2019 BDC ではストレージプールを使った HDFS のアクセスだけでなく、HDFS の階層化機能により Azure Data Lake Storage Gen2 (ADLS Gen2) や AWS S3 にあるファイルにもアクセスすることができます。

参照: SQL Server ビッグ データ クラスター で HDFS の階層化を構成する

SQL Server 2019 BDC

クラスタは azdata 既定の構成でインストール で構築したものを使います。

ADLS Gen2 の作成

今回はクラスタと同じリソースグループに ADLS Gen2 を作成します。

1. 以下コマンドでストレージアカウントの作成。

az storage account create -n sqlbdcadlsg2 -g sqlbdcrg --location japaneast --sku Standard_LRS --kind StorageV2 --enable-hierarchical-namespace true

2. キーを取得。

az storage account keys list -n sqlbdcadlsg2 -g sqlbdcrg

3. コンテナを作成。

az storage container create -n myhdfsfiles --account-name sqlbdcadlsg2 --account-key <上記で取得したキー>

4. 作成したコンテナにファイルをアップロード。ここでは Azure Storage Explorer を使って、既存のサンプルでストレージプールに作成された web_clickstreams.csv を利用。
image.png

ストレージのマウント

ストレージのマウントで利用できる認証はいくつか方法がありますが、今回は一番シンプルなキーを直接使う方法を試します。OAuth を使いたい場合は参考ページを見てください。

1. 以下のコマンドを実行。

set MOUNT_CREDENTIALS=fs.azure.abfs.account.name=sqlbdcadlsg2.dfs.core.windows.net,fs.azure.account.key.sqlbdcadlsg2.dfs.core.windows.net=<上記で取得したキー>

2. BDC コントローラーの外部 IP を取得。

kubectl get svc controller-svc-external -n mssql-cluster

3. コントローラーにログイン。

azdata login -e https://<IP-of-controller-svc-external>:30080

4. マウントを実行。

  • ここではマウント先の名前を externalhdfsfile に指定
azdata bdc hdfs mount create --remote-uri abfs://myhdfsfiles@sqlbdcadlsg2.dfs.core.windows.net/ --mount-path /mounts/externalhdfsfile

5. マウントのステータスを確認。

>azdata bdc hdfs mount status
[
  {
    "mount": "/mounts/externalhdfsfile",
    "remote": "abfs://myhdfsfiles@sqlbdcadlsg2.dfs.core.windows.net/",
    "state": "Ready"
  }
]

6. ADS から階層化された HDFS にアクセスできることを確認。
image.png

マウントされたストレージからクエリを実行

1. テスト用のデータベースと外部テーブルを作成。

  • 場所で /mounts/externalhdfsfile/clickstream_data を指定
CREATE DATABASE HDFSTieringTestDB;
GO
USE HDFSTieringTestDB;
GO

CREATE EXTERNAL FILE FORMAT csv_file
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS(
        FIELD_TERMINATOR = ',',
        STRING_DELIMITER = '"',
        FIRST_ROW = 2,
        USE_TYPE_DEFAULT = TRUE)
);

IF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'SqlStoragePool')
BEGIN
  CREATE EXTERNAL DATA SOURCE SqlStoragePool
  WITH (LOCATION = 'sqlhdfs://controller-svc/default');
END

CREATE EXTERNAL TABLE [web_clickstreams_hdfs]
("wcs_click_date_sk" BIGINT , "wcs_click_time_sk" BIGINT , "wcs_sales_sk" BIGINT , "wcs_item_sk" BIGINT , "wcs_web_page_sk" BIGINT , "wcs_user_sk" BIGINT)
WITH
(
    DATA_SOURCE = SqlStoragePool,
    LOCATION = '/mounts/externalhdfsfile/clickstream_data',
    FILE_FORMAT = csv_file
);
GO

SELECT * FROM web_clickstreams_hdfs;

2. 結果を確認。
image.png

まとめ

パフォーマンスを求める場合、HDFS ファイルは記憶域プールにおけますし、クエリ結果はデータプールにも配置できますが、いずれもクラスタノードにアタッチされたディスクでやりコストに影響します。すでに ADLS Gen2 にファイルがある場合は、うまく組み合わせて使えるとより柔軟性が上がります。次回はアプリケーションの展開を見ていきます。

次の記事へ
目次へ戻る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?