作業開始: HDInsight で Apache Spark クラスターを作成し、対話型の Spark SQL クエリを実行する

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

Azure HDInsight に Apache Spark クラスターを作成する手順を説明するクイック スタート図

前提条件

HDInsight Spark クラスターの作成

このセクションでは、Azure Resource Manager テンプレートを使用して HDInsight Spark クラスターを作成します。 その他のクラスター作成方法については、「 HDInsight での Linux ベースの Hadoop クラスターの作成」を参照してください。

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

    Deploy to Azure

  2. 次の値を入力します。

    Azure Resource Manager テンプレートを使用して HDInsight Spark クラスターを作成する

    • サブスクリプション: このクラスター向けに Azure サブスクリプションを選択します。
    • リソース グループ: リソース グループを作成するか、既存のリソース グループを選択します。 リソース グループは、プロジェクトの Azure リソースを管理するために使用されます。
    • 場所: リソース グループの場所を選択します。 この場所は、既定のクラスター ストレージと HDInsight クラスター向けにも使用されます。
    • ClusterName: 作成する Hadoop クラスターの名前を入力します。
    • Spark のバージョン: クラスターにインストールする Spark バージョンを選択します。
    • クラスターのログイン名とパスワード: 既定のログイン名は admin です。
    • SSH のユーザー名とパスワード

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

  3. [上記の使用条件に同意する][ダッシュボードにピン留めする] の順に選択し、[購入] をクリックします。 "Submitting deployment for Template deployment" という新しいタイルが表示されます。 クラスターの作成には約 20 分かかります。

注意

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

対話型の Spark SQL クエリの実行

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

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

この記事では、対話型の Spark SQL クエリを実行する Notebook で PySpark カーネルを使用します。 これらのカーネルの詳細については、HDInsight での Apache Spark クラスターと Jupyter Notebook カーネルの使用に関する記事を参照してください。 PySpark カーネルを使用した場合の主な利点のいくつかを次に示します。

  • Spark と Hive のコンテキストが自動的に設定されます。
  • セル マジック (%%sql など) を使用すると、コード スニペットを付けずに対話型の SQL または Hive クエリが直接実行されます。
  • 対話型のクエリの出力は、自動的に視覚化されます。

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

  1. Azure Portalを開きます。

  2. クラスターをダッシュボードにピン留めしている場合は、ダッシュボードから目的のクラスターのタイルをクリックしてクラスター ブレードを起動します。

    クラスターをダッシュボードにピン留めしていない場合は、左側のウィンドウで [HDInsight クラスター] をクリックし、作成したクラスターをクリックします。

  3. クイック リンク[クラスター ダッシュボード] をクリックし、[Jupyter Notebook] をクリックします。 入力を求められたら、クラスターの管理者資格情報を入力します。

    Jupyter Notebook を開いて対話型の Spark SQL クエリを実行する

    注意

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

    https://CLUSTERNAME.azurehdinsight.net/jupyter

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

    対話型の Spark SQL クエリを実行する Jupyter Notebook を作成する

    Untitled(Untitled.pynb) という名前の新しい Notebook が作成されて開かれます。

  5. 上部の Notebook 名をクリックし、目的のわかりやすい名前を入力します。

    対話型の Spark クエリを実行する Jupter Notebook に名前を指定する

  6. 次のコードを空のセルに貼り付け、Shift + Enter キーを押してコードを実行します。 このコードにより、このシナリオに必要な種類がインポートされます。

     from pyspark.sql.types import *
    

    PySpark カーネルを使用して Notebook を作成したため、コンテキストを明示的に作成する必要はありません。 最初のコード セルを実行すると、Spark コンテキストと Hive コンテキストが自動的に作成されます。

    対話型の Spark SQL クエリの状態

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

  7. 次のコードを実行してサンプル データセットを一時テーブル (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 frame as a table to run queries against
     hvacdf.registerTempTable("hvac")
    

    HDInsight の Spark クラスターにはサンプル データ ファイル hvac.csv が付属しています。このファイルは \HdiSamples\HdiSamples\SensorSampleData\hvac にあります。

  8. そのデータに対して対話型のクエリを実行するには、次のコードを使用します。

     %%sql
     SELECT buildingID, (targettemp - actualtemp) AS temp_diff, date FROM hvac WHERE date = \"6/1/13\"
    

    PySpark カーネルを使用しているため、%%sql マジックを使用して、作成した一時テーブル hvac に対して対話型の SQL クエリを直接実行できます。 %%sql マジックの詳細と、PySpark カーネルで使用できるその他のマジックの詳細については、Spark HDInsight クラスターと Jupyter Notebook で使用可能なカーネルに関する記事を参照してください。

    次の表形式の出力が既定で表示されます。

    対話型の Spark クエリの表形式の出力

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

    対話型の Spark クエリ結果の領域グラフ

  9. アプリケーションの実行後は、Notebook をシャットダウンしてクラスター リソースを解放します。 そのためには、Notebook の [ファイル] メニューの [Close and Halt] (閉じて停止) をクリックします。

クラスターを削除する

警告

HDInsight クラスターの料金は、そのクラスターを使用しているかどうかに関係なく、分単位で課金されます。 使用後は、クラスターを必ず削除してください。 詳細については、HDInsight クラスターの削除方法に関する記事を参照してください。

アクセス制御のトラブルシューティング

HDInsight クラスターの作成で問題が発生した場合は、アクセス制御の要件に関するページを参照してください。

関連項目

シナリオ

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

ツールと拡張機能

リソースの管理