概要: HDInsight Linux の Apache Spark クラスターの作成と Spark SQL を使用した対話型クエリの実行

HDInsight で Apache Spark クラスターを作成し、Spark クラスターで Jupyter Notebook を使用して Spark SQL の対話型クエリを実行する方法について説明します。

HDInsight で Apache Spark の使用を開始

警告

HDInsight クラスターは、使用されているかどうかにかかわらず分単位で課金されます。 使用後は、クラスターを必ず削除してください。 クラスターの削除については、「 How to delete an HDInsight cluster (HDInsight クラスターを削除する方法)」を参照してください。

前提条件

  • Azure サブスクリプション。 このチュートリアルを開始する前に、Azure サブスクリプションが必要です。 Azure 無料試用版の取得に関するページを参照してください。
  • Secure Shell (SSH) クライアント: Linux、Unix、OS X システムには、ssh コマンドで SSH クライアントを提供していました。 Windows システムの場合は PuTTYをお勧めします。
  • Secure Shell (SSH) キー (省略可能): クラスターへの接続に使用する SSH アカウントは、パスワードまたは公開キーを使用してセキュリティで保護できます。 パスワードを使用すると、すぐに始められます。すばやくクラスターを作成し、テスト ジョブをいくつか実行する場合に、このオプションを使用してください。 キーのほうが安全ですが、追加の設定が必要です。 運用環境のクラスターを作成するとき、この手法を利用することがあります。 この記事では、パスワード手法を使用します。 HDInsight で SSH キーを作成して使用する手順については、次の記事を参照してください。

メモ

この記事では、Azure Resource Manager テンプレートを基に、クラスター ストレージとして Azure Storage BLOB を使用する Spark クラスターを作成します。 既定のストレージとして Azure Storage BLOB を使用し、さらに追加のストレージとして Azure Data Lake Store を使用する Spark クラスターを作成することもできます。 手順については、 Data Lake Store を使用した HDInsight クラスターの作成に関するページを参照してください。

アクセス制御の要件

会社が所有するサブスクリプションなど、自分が管理者でも所有者でもない Azure サブスクリプションを使用する場合は、このドキュメントの手順を実行する前に、以下の点を確認してください。

  • ご利用の Azure ログインには、HDInsight (他の Azure リソースを含む) の作成時に使用する Azure リソース グループへの、少なくとも共同作成者のアクセス権が必要となります。
  • これから使おうとするリソースのプロバイダーは、Azure サブスクリプションに対する共同作成者以上のアクセス権を持つユーザーによって前もって登録されていることが必要です。 プロバイダーの登録は、サブスクリプションに対する共同作成者アクセス権を持つユーザーが、そのサブスクリプションで初めてリソースを作成したときに行われます。 ただし、REST を使ってプロバイダーを登録する方法もあり、その場合、リソースの作成は不要です。

アクセス管理の操作の詳細については、次のドキュメントを参照してください。

Spark クラスターを作成する

このセクションでは、Azure Resource Manager テンプレートを使用して HDInsight バージョン 3.4 クラスター (Spark バージョン 1.6.1) を作成します。 HDInsight バージョンとその SLA については、「 HDInsight コンポーネントのバージョン」をご覧ください。 その他のクラスター作成方法については、「 HDInsight での Linux ベースの Hadoop クラスターの作成」を参照してください。

  1. 次の画像をクリックして Azure ポータルでテンプレートを開きます。

    Deploy to Azure

    テンプレートはパブリック BLOB コンテナー (https://hditutorialdata.blob.core.windows.net/armtemplates/create-linux-based-spark-cluster-in-hdinsight.json) 内にあります。

  2. [パラメーター] ブレードで、次の各項目を入力します。

    • ClusterName: 作成する Hadoop クラスターの名前を入力します。
    • クラスターのログイン名とパスワード: 既定のログイン名は admin です。
    • SSH のユーザー名とパスワード

      これらの値を書き留めておいてください。 この情報は後で必要になります。

      メモ

      SSH はコマンドラインで HDInsight クラスターにリモート アクセスするために使用されます。 ここで使用するユーザー名とパスワードは、SSH でクラスターに接続するときに使用されます。 また、SSH ユーザー名は一意にする必要があります。この名前により、すべての HDInsight クラスター ノードでユーザー アカウントが作成されます。 次はクラスターのサービスのために予約されている名前の一部であり、SSH ユーザー名として使用できません。

      root、hdiuser、storm、hbase、ubuntu、zookeeper、hdfs、yarn、mapred、hbase、hive、oozie、falcon、sqoop、admin、tez、hcat、hdinsight-zookeeper

      HDInsight での SSH の使用方法の詳細については、次の記事を参照してください。

  3. [OK] をクリックしてパラメーターを保存します。

  4. [カスタム デプロイ] ブレードで [リソース グループ] ボックスをクリックし、[新規] をクリックして新しいリソース グループを作成します。 リソース グループとは、クラスター、依存するストレージ アカウント、その他のリンクされたリソースをグループ化しているコンテナーです。

  5. [法律条項] をクリックし、[作成] をクリックします。

  6. [作成] をクリックします。 "Submitting deployment for Template deployment" という新しいタイルが表示されます。 クラスターと SQL Database の作成には約 20 分かかります。

Jupyter Notebook を使用して Spark SQL クエリを実行する

このセクションでは、Jupyter Notebook を使用して、Spark クラスターに対して Spark SQL クエリを実行します。 HDInsight の Spark クラスターには、Jupyter Notebook で使用できる 2 つのカーネルが用意されています。 次のとおりです。

  • PySpark (Python で記述されたアプリケーション用)
  • Spark (Scala で記述されたアプリケーション用)

この記事では、PySpark カーネルを使用します。 Spark HDInsight クラスターと Jupyter Notebook で使用可能なカーネルに関する記事で、PySpark カーネルを使用する利点に関する詳細を確認できますが、 主な利点のいくつかをここで紹介します。

  • Spark と Hive のコンテキストを設定する必要はありません。 これらは自動的に設定されます。
  • セル マジック ( %%sqlなど) を使用して、コード スニペットを付けずに SQL または Hive クエリを直接実行できます。
  • SQL または Hive クエリの出力は、自動的に視覚化されます。

PySpark カーネルを使用した Jupyter Notebook の作成

  1. Azure Portal のスタート画面で Spark クラスターのタイルをクリックします (スタート画面にピン留めしている場合)。 [すべて参照] > [HDInsight クラスター] でクラスターに移動することもできます。
  2. Spark クラスター ブレードから [クラスター ダッシュボード] をクリックし、[Jupyter Notebook] をクリックします。 入力を求められたら、クラスターの管理者資格情報を入力します。

    メモ

    ブラウザーで次の URL を開き、クラスターの Jupyter Notebook にアクセスすることもできます。 CLUSTERNAME をクラスターの名前に置き換えます。

    https://CLUSTERNAME.azurehdinsight.net/jupyter

  3. 新しい Notebook を作成します。 [新規] をクリックし、[PySpark] をクリックします。

    新しい Jupyter Notebook の作成

  4. Untitled.pynb という名前の新しい Notebook が作成されて開かれます。 上部の Notebook 名をクリックし、わかりやすい名前を入力します。

    Notebook の名前を指定

  5. PySpark カーネルを使用して Notebook を作成したため、コンテキストを明示的に作成する必要はありません。 最初のコード セルを実行すると、Spark および Hive コンテキストが自動的に作成されます。 このシナリオに必要な種類をインポートすることから始めることができます。 このためには、次のコード スニペットをセルに貼り付けて、 Shift + Enterキーを押します。

     from pyspark.sql.types import *
    

    Jupyter でジョブを実行するたびに、Web ブラウザー ウィンドウのタイトルに [(ビジー)] ステータスと Notebook のタイトルが表示されます。 また、右上隅にある PySpark というテキストの横に塗りつぶされた円も表示されます。 ジョブが完了すると、白抜きの円に変化します。

    Jupyter Notebook ジョブのステータス

  6. サンプル データを一時テーブルに読み込みます。 HDInsight の Spark クラスターを作成すると、サンプル データ ファイル hvac.csv が、関連するストレージ アカウントの \HdiSamples\HdiSamples\SensorSampleData\hvac にコピーされます。

    次のコード サンプルを空のセルに貼り付けて、 Shift + Enterキーを押します。 このコード サンプルは、 hvacという一時テーブルにデータを登録します。

     # Load the data
     hvacText = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
     # Create the schema
     hvacSchema = StructType([StructField("date", StringType(), False),StructField("time", StringType(), False),StructField("targettemp", IntegerType(), False),StructField("actualtemp", IntegerType(), False),StructField("buildingID", StringType(), False)])
    
     # Parse the data in hvacText
     hvac = hvacText.map(lambda s: s.split(",")).filter(lambda s: s[0] != "Date").map(lambda s:(str(s[0]), str(s[1]), int(s[2]), int(s[3]), str(s[6]) ))
    
     # Create a data frame
     hvacdf = sqlContext.createDataFrame(hvac,hvacSchema)
    
     # Register the data fram as a table to run queries against
     hvacdf.registerTempTable("hvac")
    
  7. PySpark カーネルを使用しているため、%%sql マジックを使用して、作成した一時テーブル hvac に対して SQL クエリを直接実行できます。 %%sql マジックの詳細と、PySpark カーネルで使用できるその他のマジックの詳細については、 Spark HDInsight クラスターと Jupyter Notebook で使用可能なカーネルに関する記事を参照してください。

     %%sql
     SELECT buildingID, (targettemp - actualtemp) AS temp_diff, date FROM hvac WHERE date = \"6/1/13\"
    
  8. ジョブが正常に完了すると、既定で次の出力が表示されます。

    クエリ結果のテーブル出力

    他の視覚化でも結果を表示できます。 たとえば、ある出力の領域グラフは次のようになります。

    クエリ結果の領域グラフ

  9. アプリケーションの実行が完了したら、Notebook をシャットダウンしてリソースを解放する必要があります。 そのためには、Notebook の [ファイル] メニューの [Close and Halt] (閉じて停止) をクリックします。 これにより、Notebook がシャットダウンされ、閉じられます。

クラスターを削除する

警告

HDInsight クラスターは、使用されているかどうかにかかわらず分単位で課金されます。 使用後は、クラスターを必ず削除してください。 クラスターの削除については、「 How to delete an HDInsight cluster (HDInsight クラスターを削除する方法)」を参照してください。

関連項目

シナリオ

アプリケーションの作成と実行

ツールと拡張機能

リソースの管理