Spark & Hive Tools for Visual Studio Code を使用する

Apache Spark & Hive Tools for Visual Studio Code を使用する方法について説明します。 これらのツールを使用して、Apache Hive バッチ ジョブ、対話型 Hive クエリ、Apache Spark 用の PySpark スクリプトを作成して送信します。 最初に、Visual Studio Code で Spark & Hive Tools をインストールする方法について説明します。 次に、Spark & Hive Tools にジョブを送信する方法について説明します。

Spark & Hive Tools は、Visual Studio Code でサポートされているプラットフォームにインストールできます。 プラットフォームごとに以下の前提条件に注意してください。

前提条件

この記事の手順を完了するには、次の項目が必要です。

Spark & Hive Tools をインストールする

前提条件を満たしたら、これらの手順に従って、Spark & Hive Tools for Visual Studio Code をインストールできます。

  1. Visual Studio Code を開きます。

  2. メニュー バーから [View]\(表示\)>[Extensions]\(拡張機能\) に移動します。

  3. 検索ボックスに、「Spark & Hive」と入力します。

  4. 検索結果から Spark & Hive Tools を選び、[インストール] を選択します。

    Spark & Hive for Visual Studio Code Python install.

  5. 必要に応じて [再読み込み] を選択します。

作業フォルダーを開く

作業フォルダーを開いて Visual Studio Code でファイルを作成するには、これらの手順を実行します。

  1. メニュー バーから、 [ファイル]>[フォルダーを開く...]>C:\HD\HDexample に移動し、 [フォルダーの選択] ボタンを選択します。 左側の [Explorer](エクスプローラー) ビューにフォルダーが表示されます。

  2. [エクスプローラー] ビューで HDexample フォルダーを選択し、作業フォルダーの横にある [新しいファイル] アイコンを選択します。

    visual studio code new file icon.

  3. .hql (Hive クエリ) または .py (Spark スクリプト) のいずれかのファイル拡張子を使用して、新しいファイルに名前を付けます。 この例では HelloWorld.hql を使用します。

Azure 環境を設定する

国内のクラウド ユーザーの場合は、まずこれらの手順に従って Azure 環境を設定してから、Azure: Sign In コマンドを使用して Azure にサインインします。

  1. [ファイル]>[ユーザー設定]>[設定] に移動します。

  2. 次の文字列を検索します: Azure:クラウド

  3. 一覧から国内のクラウドを選択します。

    Set default login entry configuration.

Azure アカウントに接続する

Visual Studio Code からクラスターにスクリプトを送信する前に、ユーザーは Azure サブスクリプションにサインインするか、HDInsight クラスターをリンクすることができます。 Ambari のユーザー名とパスワードまたは ESP クラスターのドメイン参加済みの資格情報を使用して、HDInsight クラスターに接続します。 Azure に接続するには、これらの手順に従います。

  1. メニュー バーから、[表示]>[コマンド パレット] に移動し、「Azure: Sign In」と入力します。

    Spark & Hive Tools for Visual Studio Code login.

  2. サインインの手順に従って Azure にサインインします。 接続されると、Visual Studio Code ウィンドウの下部にあるステータス バーに Azure アカウント名が表示されます。

Apache Ambari マネージド ユーザー名を使用して通常のクラスターをリンクするか、またはドメイン ユーザー名 (user1@contoso.com など) を使用して Enterprise Security Pack のセキュリティ保護された Hadoop クラスターをリンクできます。

  1. メニュー バーから、 [表示]>[コマンド パレット...] に移動し、「Spark / Hive:Link a Cluster」と入力します。

    Command Palette link cluster command.

  2. リンクされるクラスターの種類として [Azure HDInsight] を選択します。

  3. HDInsight クラスターの URL を入力します。

  4. 自分の Ambari ユーザー名を入力します。既定値は「admin」です。

  5. 自分の Ambari パスワードを入力します。

  6. クラスターの種類を選択します。

  7. クラスターの表示名を設定します (省略可能)。

  8. [OUTPUT](出力) ビューを確認します。

    Note

    リンクされたユーザー名とパスワードは、クラスターが Azure サブスクリプションにログインし、かつクラスターにリンクしていた場合に使用されます。

  1. メニュー バーから、 [表示]>[コマンド パレット...] に移動し、「Spark / Hive:Link a Cluster」と入力します。

  2. リンクされるクラスターの種類として、 [Generic Livy Endpoint](ジェネリック Livy エンドポイント) を選択します。

  3. ジェネリック Livy エンドポイントを入力します。 例: http://10.172.41.42:18080.

  4. 承認の種類として、 [基本] または [なし] を選択します。 [基本] を選択する場合:

    1. 自分の Ambari ユーザー名を入力します。既定値は「admin」です。

    2. 自分の Ambari パスワードを入力します。

  5. [OUTPUT](出力) ビューを確認します。

クラスターを一覧表示する

  1. メニュー バーから、 [表示]>[コマンド パレット...] に移動し、「Spark / Hive:List Cluster」と入力します。

  2. 目的のサブスクリプションを選択します。

  3. [OUTPUT](出力) ビューを確認します。 このビューには、リンクされたクラスターと、お使いの Azure サブスクリプションのすべてのクラスターが表示されます。

    Set a default cluster configuration.

既定のクラスターを設定する

  1. 前に説明した HDexample フォルダーを閉じていた場合、もう一度開きます。

  2. 前に作成した HelloWorld.hql ファイルを選択します。 それがスクリプト エディターで開かれます。

  3. スクリプト エディターを右クリックして、 [Spark / Hive: Set Default Cluster](Spark / Hive: 既定のクラスターの設定) を選択します。

  4. お使いの Azure アカウントに接続するか、クラスターをリンクします (まだ行っていない場合)。

  5. 現在のスクリプト ファイルの既定のクラスターとしてクラスターを選択します。 ツールによって、構成ファイルである .VSCode\settings.json が自動的に更新されます。

    Set default cluster configuration.

対話型 Hive クエリと Hive バッチ スクリプトを送信する

Spark & Hive Tools for Visual Studio Code を使用すると、対話型 Hive クエリと Hive バッチ スクリプトをクラスターに送信できます。

  1. 前に説明した HDexample フォルダーを閉じていた場合、もう一度開きます。

  2. 前に作成した HelloWorld.hql ファイルを選択します。 それがスクリプト エディターで開かれます。

  3. 次のコードをコピーし、Hive ファイルに貼り付けて保存します。

    SELECT * FROM hivesampletable;
    
  4. お使いの Azure アカウントに接続するか、クラスターをリンクします (まだ行っていない場合)。

  5. スクリプト エディターを右クリックし、 [Hive: Interactive] を選択してクエリを送信するか、キーボード ショートカットの Ctrl + Alt + I を使用します。 [Hive:Batch] を選択してスクリプトを送信するか、キーボード ショートカットの Ctrl + Alt + H を使用します。

  6. 既定のクラスターを指定していない場合は、クラスターを選択します。 また、このツールでは、コンテキスト メニューを使用して、スクリプト ファイル全体ではなく、コードのブロックを送信することもできます。 しばらくすると、新しいタブにクエリの結果が表示されます。

    Interactive Apache Hive query result.

    • [結果] パネル:結果全体を CSV、JSON、または Excel ファイルとしてローカル パスに保存したり、複数の行だけを選択したりできます。

    • [メッセージ] パネル:の番号を選択すると、実行されているスクリプトの最初の行にジャンプします。

対話型の PySpark クエリを送信する

Pyspark interactive の前提条件

ここで、HDInsight 対話型 PySpark クエリには、Jupyter 拡張機能バージョン (ms-jupyter): v2022.1.1001614873 と Python 拡張機能バージョン (ms-python): v2021.12.1559732655、Python 3.6.x、3.7.x が必要であることに注意してください。

ユーザーは、次の方法で PySpark Interactive を実行できます。

PY ファイルで PySpark Interactive コマンドを使用する

PySpark Interactive コマンドを使用してクエリを送信するには、次の手順を実行します。

  1. 前に説明した HDexample フォルダーを閉じていた場合、もう一度開きます。

  2. 前の手順に従って、新しい HelloWorld.py ファイルを作成します。

  3. 次のコードをコピーしてスクリプト ファイルに貼り付けます。

    from operator import add
    from pyspark.sql import SparkSession 
    spark = SparkSession.builder \ 
          .appName('hdisample') \ 
          .getOrCreate() 
    lines = spark.read.text("/HdiSamples/HdiSamples/FoodInspectionData/README").rdd.map(lambda r: r[0])
    counters = lines.flatMap(lambda x: x.split(' ')) \
                 .map(lambda x: (x, 1)) \
                 .reduceByKey(add)
    
    coll = counters.collect()
    sortedCollection = sorted(coll, key = lambda r: r[1], reverse = True)
    
    for i in range(0, 5):
         print(sortedCollection[i])
    
  4. PySpark/Synapse Pyspark カーネルをインストールするためのプロンプトが、ウィンドウの右下隅に表示されます。 PySpark/Synapse Pyspark のインストールを続行するには [インストール] ボタンをクリックします。この手順をスキップするには、 [スキップ] をクリックします。

    Screenshot shows an option to skip the PySpark installation.

  5. 後でインストールする必要がある場合は、 [ファイル]>[基本設定]>[設定] に移動し、 [HDInsight:Pyspark のインストールをスキップする] をオフにします。

    Screenshot shows the option to Enable Skip Pyspark Installation.

  6. 手順 4 でインストールが正常に完了した場合、ウィンドウの右下隅に "PySpark が正常にインストールされました" というメッセージ ボックスが表示されます。 [再読み込み] ボタンをクリックして、ウィンドウを再度読み込みます。

    pyspark installed successfully.

  7. メニュー バーから、[表示]>[コマンド パレット] に移動するか、Shift + Ctrl + P キーボード ショートカットを使用して、「Python: Select Interpreter to start Jupyter Server」と入力します。

    select interpreter to start jupyter server.

  8. 下の Python オプションを選択します。

    choose the below option.

  9. メニュー バーから、[表示]>[コマンド パレット] に移動するか、Shift + Ctrl + P キーボード ショートカットを使用して、「Developer: Reload Window」と入力します。

    reload window.

  10. お使いの Azure アカウントに接続するか、クラスターをリンクします (まだ行っていない場合)。

  11. すべてのコードを選択し、スクリプト エディターを右クリックして、 [Spark: PySpark Interactive / Synapse:Pyspark Interactive] を選択してクエリを送信します。

    pyspark interactive context menu.

  12. 既定のクラスターを指定していない場合は、クラスターを選択します。 しばらくすると、Python Interactive の結果が新しいタブに表示されます。PySpark をクリックすると、カーネルが PySpark / Synapse Pyspark に切り替わり、コードが正常に実行されます。 Synapse Pyspark カーネルに切り替える場合は、Azure portal で自動設定を無効にすることが推奨されます。 そうしないと、クラスターをウェイクアップし、初めて使用するために Synapse カーネルを設定するのに時間がかかることがあります。 このツールでは、コンテキスト メニューを使用して、スクリプト ファイル全体ではなく、コードのブロックも送信できます。

    pyspark interactive python interactive window.

  13. %%info」と入力し、Shift + Enter キーを押してジョブ情報を表示します (省略可能)。

    pyspark interactive view job information.

ツールでは Spark SQL クエリもサポートされています。

pyspark interactive view result.

#%% コメントを使用して PY ファイルで対話型クエリを実行する

  1. ノートブックのエクスペリエンスを得るには、PY コードの前に #%% を追加します。

    add #%%.

  2. [セルの実行] をクリックします。 しばらくすると、新しいタブに Python Interactive の結果が表示されます。PySpark をクリックしてカーネルを PySpark/Synapse PySpark に切り替えてから、 [セルの実行] を再度クリックすると、コードが正常に実行されます。

    run cell results.

Python 拡張機能の IPYNB サポートを活用する

  1. コマンド パレットからコマンドを使用するか、ワークスペースで新しい .ipynb ファイルを作成することで、Jupyter Notebook を作成できます。 詳細については、「Visual Studio Code での Jupyter Notebook の使用」を参照してください。

  2. [セルの実行] ボタンをクリックし、画面の指示に従って既定の Spark プールを設定します (ノートブックを開く前に毎回既定のクラスターまたはプールを設定することを強くお勧めします)。その後、ウィンドウを再度読み込みます

    set the default spark pool and reload.

  3. [PySpark] をクリックしてカーネルを PySpark / Synapse Pyspark に切り替え、 [セルの実行] をクリックすると、しばらくしてから結果が表示されます。

    run ipynb results.

Note

Synapse PySpark のインストール エラーの場合、その依存関係が他のチームによって維持されなくなるため、これも維持されなくなります。 Synapse Pyspark Interactive を使用しようとしている場合は、代わりに Azure Synapse Analytics に切り替えて使用してください。 これは長期的な変更です。

PySpark バッチ ジョブを送信する

  1. 前に説明した HDexample フォルダーを閉じていた場合、もう一度開きます。

  2. 前の手順に従って、新しい BatchFile.py ファイルを作成します。

  3. 次のコードをコピーしてスクリプト ファイルに貼り付けます。

    from __future__ import print_function
    import sys
    from operator import add
    from pyspark.sql import SparkSession
    if __name__ == "__main__":
        spark = SparkSession\
            .builder\
            .appName("PythonWordCount")\
            .getOrCreate()
    
        lines = spark.read.text('/HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv').rdd.map(lambda r: r[0])
        counts = lines.flatMap(lambda x: x.split(' '))\
                   .map(lambda x: (x, 1))\
                    .reduceByKey(add)
        output = counts.collect()
        for (word, count) in output:
            print("%s: %i" % (word, count))
        spark.stop()
    
  4. お使いの Azure アカウントに接続するか、クラスターをリンクします (まだ行っていない場合)。

  5. スクリプト エディターを右クリックし、[Spark:PySpark Batch]、または [Synapse:PySpark Batch]* を選択します。

  6. PySpark ジョブの送信先となるクラスター/spark プールを選択します。

    Submit Python job result output.

Python ジョブを送信すると、Visual Studio Code の [OUTPUT](出力) ウィンドウに送信ログが表示されます。 Spark UI URL と Yarn UI URL も表示されます。 バッチ ジョブを Apache Spark プールに送信すると、Spark の履歴 UI の URL と Spark ジョブ アプリケーション UI の URL も表示されます。 Web ブラウザーで URL を開いて、ジョブの状態を追跡することができます。

HDInsight Identity Broker (HIB) との統合

HDInsight ESP cluster with ID Broker (HIB) に接続する

HDInsight ESP cluster with ID Broker (HIB) に接続するには、通常の手順に従って Azure サブスクリプションにサインインします。 サインインすると、Azure Explorer にクラスターの一覧が表示されます。 詳細な手順については、「HDInsight クラスターに接続する」を参照してください。

HDInsight ESP cluster with ID Broker (HIB) で Hive/PySpark ジョブを実行する

Hive ジョブを実行するには、通常の手順に従って、HDInsight ESP cluster with ID Broker (HIB) にジョブを送信します。 詳細な手順については、「対話型 Hive クエリと Hive バッチ スクリプトを送信する」を参照してください。

対話型 PySpark ジョブを実行するには、通常の手順に従って、HDInsight ESP cluster with ID Broker (HIB) にジョブを送信します。 「対話型の PySpark クエリを送信する」を参照してください。

PySpark バッチ ジョブを実行するには、通常の手順に従って、HDInsight ESP cluster with ID Broker (HIB) にジョブを送信します。 詳細な手順については、「PySpark バッチ ジョブを送信する」を参照してください。

Apache Livy の構成

Apache Livy の構成がサポートされています。 これは、ワークスペース フォルダーにある .VSCode\settings.json ファイルで構成できます。 現在、Livy の構成では Python スクリプトのみがサポートされています。 詳細については、Livy の README を参照してください。

Livy の構成をトリガーする方法

方法 1

  1. メニュー バーから [File](ファイル)>[Preferences](基本設定)>[Settings](設定) に移動します。
  2. [検索設定] ボックスに「HDInsight Job Submission: Livy Conf」と入力します。
  3. 関連する検索結果に対して [Edit in settings.json](settings.json で編集) を選択します。

方法 2

ファイルを送信ます。また、.vscode フォルダーが作業フォルダーに自動的に追加されることに注意してください。 Livy の構成は .vscode\settings.json を選択することで確認できます。

  • プロジェクトの設定:

    HDInsight Apache Livy configuration.

    Note

    driverMemoryexecutorMemory の設定では、値と単位を設定します。 次に例を示します。1 g、1,024 m。

  • サポートされている Livy の構成:

    POST/バッチ

    要求本文

    name description type
    file 実行するアプリケーションを含むファイル パス (必須)
    proxyUser ジョブの実行時に権限を借用するユーザー String
    className アプリケーション Java/Spark のメイン クラス String
    args アプリケーションのコマンドライン引数 文字列のリスト
    jars このセッションで使用される Jar 文字列のリスト
    pyFiles このセッションで使用される Python ファイル 文字列のリスト
    files このセッションで使用されるファイル 文字列のリスト
    driverMemory ドライバー プロセスに使用するメモリの量 String
    driverCores ドライバー プロセスに使用するコアの数 int
    executorMemory 実行プログラム プロセスごとに使用するメモリの量 String
    executorCores 実行プログラムごとに使用するコアの数 int
    numExecutors このセッションで起動する実行プログラムの数 int
    archives このセッションで使用するアーカイブ 文字列のリスト
    queue 送信先の YARN キューの名前 String
    name このセッションの名前 String
    conf Spark の構成プロパティ キーのマップ = val

    応答本文 作成された Batch オブジェクト。

    name description type
    id セッション ID int
    appId このセッションのアプリケーション ID String
    appInfo アプリケーションの詳細情報 キーのマップ = val
    log ログの行 文字列のリスト
    state バッチの状態 String

    注意

    割り当てられた Livy の構成は、スクリプトの送信時に出力ウィンドウに表示されます。

エクスプローラーから Azure HDInsight と統合する

Azure HDInsight のエクスプローラーを通じて直接、クラスター内の Hive テーブルをプレビューできます。

  1. Azure アカウントに接続します (まだ接続していない場合)。

  2. 左端の列の Azure アイコンを選択します。

  3. 左側のウィンドウから、 [AZURE:HDINSIGHT] を展開します。 利用可能なサブスクリプションとクラスターが一覧表示されます。

  4. クラスターを展開して、Hive メタデータのデータベースとテーブルのスキーマを表示します。

  5. Hive テーブルを右クリックします。 例: hivesampletable[Preview](プレビュー) を選択します。

    Spark & Hive for Visual Studio Code preview hive table.

  6. [結果のプレビュー] ウィンドウが開きます。

    Spark & Hive for Visual Studio Code preview results window.

  • [結果] パネル

    結果全体を CSV、JSON、または Excel ファイルとしてローカル パスに保存したり、複数の行だけを選択したりできます。

  • [メッセージ] パネル

    1. テーブルの行数が 100 行を超えると、次のメッセージが表示されます: "The first 100 rows are displayed for Hive table (Hive テーブルの先頭から 100 行を表示しています)"。

    2. テーブル内の行数が 100 以下の場合は、次のメッセージが表示されます: "60 rows are displayed for Hive table (Hive テーブルの 60 行を表示しています)"。

    3. テーブルの内容がない場合は、次のメッセージが表示されます: "0 rows are displayed for Hive table."

      注意

      Linux でテーブル データをコピーするには、xclip をインストールします。

      Spark & Hive for Visual Studio code in Linux.

追加機能

Spark & Hive for Visual Studio Code では、次の機能もサポートされています。

  • IntelliSense のオートコンプリート。 キーワード、メソッド、変数、その他のプログラミング要素の候補がポップアップ表示されます。 オブジェクトの種類ごとに異なるアイコンで表されます:

    Spark & Hive Tools for Visual Studio Code IntelliSense objects.

  • IntelliSense エラー マーカー。 言語サービスにより、Hive スクリプトの編集エラーに下線が引かれます。

  • 構文の強調表示。 言語サービスにより、異なる色を使用して、変数、キーワード、データ型、関数、その他のプログラミング要素が区別されます。

    Spark & Hive Tools for Visual Studio Code syntax highlights.

読み取り専用ロール

クラスターに対する読み取り専用ロールが割り当てられているユーザーは、HDInsight クラスターにジョブを送信することも、Hive データベースを表示することもできません。 クラスター管理者に連絡し、Azure portalHDInsight クラスター オペレーターへとロールをアップグレードしてもらいます。 有効な Ambari 資格情報を持っている場合は、次のガイダンスに従って、クラスターを手動でリンクすることができます。

HDInsight クラスターを参照する

Azure HDInsight のエクスプローラー上で選択して HDInsight クラスターを展開したときに、そのクラスターに対して読み取り専用ロールを持っている場合は、クラスターをリンクするよう求められます。 自分の Ambari 資格情報を使用してクラスターにリンクするには、次の方法を使用します。

HDInsight クラスターにジョブを送信する

HDInsight クラスターにジョブを送信するときに、そのクラスターに対して読み取り専用ロールを持っている場合は、クラスターをリンクするよう求められます。 Ambari 資格情報を使用してクラスターにリンクするには、次の手順を使用します。

  1. 有効な Ambari ユーザー名を入力します。

  2. 有効なパスワードを入力します。

    Spark & Hive Tools for Visual Studio Code Username.

    Spark & Hive Tools for Visual Studio Code Password.

    Note

    Spark / Hive: List Cluster を使用して、リンクされたクラスターを確認できます。

    Spark & Hive Tools for Visual Studio Code Reader Linked.

Azure Data Lake Storage Gen2

Data Lake Storage Gen2 アカウントを参照する

Azure HDInsight エクスプローラーを選択して Data Lake Storage Gen2 アカウントを展開します。 Azure アカウントに Gen2 ストレージへのアクセス権がない場合は、ストレージ アクセス キーを入力するよう求められます。 アクセス キーが検証されると、Data Lake Storage Gen2 アカウントは自動的に展開されます。

Data Lake Storage Gen2 を使用して HDInsight クラスターにジョブを送信する

Data Lake Storage Gen2 を使用して HDInsight クラスターにジョブを送信します。 Azure アカウントに Gen2 ストレージへの書き込みアクセス権がない場合は、ストレージ アクセス キーを入力するよう求められます。 アクセス キーが検証されると、ジョブは正常に送信されます。

Spark & Hive Tools for Visual Studio Code AccessKey.

Note

ストレージ アカウントのアクセス キーは Azure portal から取得できます。 詳細については、「ストレージ アカウント アクセス キーを管理する」を参照してください。

  1. メニュー バーから、 [表示]>[コマンド パレット] の順に移動し、「Spark / Hive: Unlink a Cluster」と入力します。

  2. リンクを解除するクラスターを選択します。

  3. 検証のため、 [出力] ビューを確認します。

サインアウトする

メニュー バーから、 [ビュー]>[コマンド パレット] の順に移動し、「Azure: Sign Out」と入力します。

既知の問題

Synapse PySpark のインストール エラー。

Synapse PySpark のインストール エラーの場合、その依存関係が他のチームによって維持されなくなるため、これは維持されなくなります。 Synapse Pyspark Interactive を使用しようとしている場合は、代わりに Azure Synapse Analytics を使用してください。 これは長期的な変更です。

synapse pyspark installation error.

次のステップ

Spark & Hive for Visual Studio Code の使用については、Spark & Hive for Visual Studio Code のデモ ビデオをご覧ください。