HDInsight のスクリプトアクションとは?
Spark やHadoop を動かす場合、実行環境の OS やアプリの動作環境の設定が必要になることがよくあります。 たとえば、
- 実行時に必要となるライブラリインストールしておきたい (apt-get を使って)
- 自作ライブラリなどを OS の特定のノードのどこかのディレクトリに格納しておきたい
- ワーカーノードに設定ファイルを作成し、必要に応じて設定も行いたい
などです。 もちろんシェルなどを使って都度設定することも可能ですが、プロダクション環境では現実的なやり方ではないと思います。 HDInsight のようなマネージドサービスには、あらかじめそういった環境構築用の機能が組み込まれており、柔軟にさまざまな環境に提供ができるようになっています。
HDInsight にはスクリプトアクションという機能があり、それを使うことによりクラスタの新規作成時や、ワーカーノードを増やす場合に環境設定用のスクリプトを仕込んでおくことができます。 スクリプトアクションを使うことにより、Spark や Hadoop が動作するときに必要となる環境設定をスクリプトを使って自動化することができるようになります。 ちなみに Windows 版のクラスタの場合は、PowerShell や .NET SDK などによるスクリプトを組み込むことができ、 Linux 版 では、bash のスクリプトを組み込むことができるようになっています。 試しに、Linux 版で bash のスクリプトアクションを動かす手順について見てみましょう。
サンプル
今回は例として、 Linux 版 ODBC ドライバ(Azure SQL DB, Azure SQL Dataware House, SQL サーバ用)をワーカノードに自動インストールするための、スクリプトアクションについて説明します。 なお今回使用する HDInsight の環境は、 HDInsight Spark 2.0( HDI 3.5.1) / Ubuntu 16.04 LTS を使います。
1. Bash シェルを下記のように作ります。 なおシェルの中身はこちらのリンク(ODBC Driver 13.0 for Linux Released) を参考にしています。 改行コードは LF になるように気を付けてください。またシェルはルート権限で実行されますので、sudo を付ける必要はありません。
————————————————————————————————————————————-
#!/bin/bash
OS_VERSION=$(lsb_release -sr)
if [[ $OS_VERSION == 16* ]]; then
echo “OS version is $OS_VERSION. Start installing ODBC driver for SQL DB”
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add –
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources. list.d/mssql-release.list
apt-get -y update
ACCEPT_EULA=Y apt-get -y install msodbcsql mssql-tools
apt-get -y install unixodbc-dev-utf16
else
echo “OS version is $OS_VERSION. Installation is aborted.”
fi
————————————————————————————————————————————-
2. 上記シェルをファイルに保存し、ファイルを Blob ストレージ に保存します。 実際のスクリプトアクション実行時は、ここで保存した ファイルを実行時に読み出すことになります。なお注意点として、Blob のアクセス権は、「完全なパブリック読み取りアクセス」 に設定しておいてください。
3. HDInsight Spark を新規作成します。 Azure ポータルから Linux ベースの Spark クラスタを作成します。 Azure ポータルを使用した HDInsight の Linux ベースのクラスター作成の「クラスターの作成」を参考に、クラスタを作成していきます。 なお今回必要となる設定は、[詳細な構成]となりますので、 [クラスター名]、[資格情報]、 [データソース]、[価格]、[リソースグループ] については任意に設定してください。 また[クラスターの構成] は、HDInsight Spark 2.0 (Linux) を設定してください。
4. [詳細な構成] – [スクリプト操作] で、Bash シェルを登録します。 下記のスクリーンショットを参考に [スクリプト操作] メニューにて、以下を入力します。
– 名前: シェルの任意の名前を設定します。
– ハッシュスクリプト URI: 上記手順2の、Blob に保存されたシェルファイルの URI を指定してください。
– [ワーカー] のみにチェックを入れます。 ODBCドライバが必要となるのは、ワーカーノードのみなので。
– [パラメーター] は必要に応じて指定可能です。今回は不要なので空白のままとします。
5. 上記の構成ができましたら、[作成] ボタンを押しクラスタの構築を開始します。状況によりますが約15 – 20分 ほどかかります。
6. 基本的には、これで設定は終わりで、クラスタ構築後はめでたくODBCドライバがインストールされているはずです。またクラスタの新規構築時に設定するシェルは、ワーカーノードを追加する場合も自動的に、新しいノードに対して適用されます。 Azure ポータルからは、あとでシェルを追加することも可能ですし、登録済みのシェルをアドホックに再起動させることも可能です。
スクリプトアクションのログ
スクリプトアクションの動作ログは、HDInsight に付属している Ambari () から確認することができます。 以下手順となります。
1. ブラウザで、https://<クラスタ名>.azurehdinsight.net/ にアクセスします。(Ambari はこちらを参考にしてください)
2. ページ上部のバーの、[ops] エントリをクリックします。
3. 一覧から、「run_customscriptaction (複数存在する可能性があります)」 をクリックすると、以下の画面が現れ STDERR と STDOUT の出力を確認することができます。
ODBCドライバの動作確認
クラスタの構築が完了したらODBCドライバが正常にインストールされているかを確認できます。 SSH でワーカーノードにログインし、 (SSH についてはこちらのドキュメントを参考にしてください) 、 ODBC Driver 13.0 for Linux Released の「Try our Sample」の個所を参考に簡単に確認することが可能です。 ※ その際、サンプルコード(sample_c_linux.c)の、ODBC接続文字列をご自身の SQL DB/SQL DWH の環境に合わせて変更して下さい。 サンプル実行時に、以下の文字列が表示されれば、インストール成功となります。
Result is: Microsoft SQL Azure (RTM) – 12.0.2000.8
Dec 5 2016 21:15:30
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
参考リンク
https://docs.microsoft.com/ja-jp/azure/hdinsight/hdinsight-hadoop-script-actions-linux