HDInsight

HDInsight のスクリプトアクションとは?

Spark や Hadoop を動かす場合、実行環境の OS やアプリの動作環境の設定が必要になることがよくあります。 たとえば、

  • Spark ジョブの実行時に必要となる 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 を付ける必要はありません。

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分 ほどかかります。

o1

6. 基本的には、これで設定は終わりで、クラスタ構築後はめでたくODBCドライバがインストールされているはずです。またクラスタの新規構築時に設定するシェルは、ワーカーノードを追加する場合も自動的に、新しいノードに対して適用されます。 Azure ポータルからは、あとでシェルを追加することも可能ですし、登録済みのシェルをアドホックに再起動させることも可能です。

スクリプトアクションのログ

スクリプトアクションの動作ログは、HDInsight に付属している Ambari  から確認することができます。 以下手順となります。

1. ブラウザで、https://<クラスタ名>.azurehdinsight.net/ にアクセスします。(Ambari についての説明はこちらを参考にしてください)

2. ページ上部のバーの、[ops] エントリをクリックします。

3. 一覧から、「run_customscriptaction  (複数存在する可能性があります)」 をクリックすると、以下の画面が現れ STDERR と STDOUT の出力を確認することができます。

odbc0

 

結果の確認 (ODBCドライバの動作確認)

これは必須ではないのですが、最後に、クラスタの構築が完了したらODBCドライバが正常にインストールされているかを確認できます。 SSH でワーカーノードにログインし、 (SSH についてはこちらのドキュメントを参考にしてください) 、 ODBC Driver 13.0 for Linux Released の「Try our Sample」の個所を参考に簡単に確認することが可能です。ワーカーノードに SSH でログインし、以下のコマンドを実行します。

>wget "https://raw.githubusercontent.com/Microsoft/sql-server-samples/master/samples/tutorials/c/linux/sample_c_linux.c"

ここで、ダウンロードしたサンプルコードの、61 行目の ODBC 接続文字列をご自身の環境に合わせて編集してください。`

>gcc sample_c_linux.c -o sampleapp -lodbc -w            # sampleapp という C のアプリがカレントディレクトリに生成されます

>./sampleapp

上記を実行すると、下記のようなメッセージが表示されます。  この例では、Azure SQL DB に接続しているのですが、下記のメッセージが正常表示されているので、ODBC ドライバのインストールが成功していると言えます。

Result is: Microsoft SQL Azure (RTM) - 12.0.2000.8
Dec 5 2016 21:15:30
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

 

参考リンク

/ja-jp/azure/hdinsight/hdinsight-hadoop-script-actions-linux /ja-jp/azure/hdinsight/hdinsight-hadoop-customize-cluster-linux#troubleshooting