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

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

HDInsight で Apache Spark の使用を開始

前提条件

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 で記述されたアプリケーション用)

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

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

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

  1. Azure Portalを開きます。

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

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

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

    HDInsight クラスター ダッシュボード

    メモ

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

    https://CLUSTERNAME.azurehdinsight.net/jupyter

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

    Jupyter Notebook の作成

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

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

    Notebook の名前を指定

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

     from pyspark.sql.types import *
    

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

    Jupyter Notebook ジョブのステータス

    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 fram 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 で使用可能なカーネルに関する記事を参照してください。

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

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

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

    クエリ結果の領域グラフ

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

トラブルシューティング

ここでは、HDInsight クラスターを使用しているときに遭遇する可能性のある一般的な問題を取り上げます。

アクセス制御の要件

会社所有のサブスクリプションなど、自身が管理者または所有者でない Azure サブスクリプションを使用する場合があります。 この場合、この記事の手順を実行するには、次のものを取得済みであることを確認する必要があります。

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

アクセス管理の操作の詳細については、次の記事を参照してください。

クラスターを削除する

警告

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

関連項目

シナリオ

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

ツールと拡張機能

リソースの管理