Cloud Dataproc クラスタでの RStudio® Server の実行

このチュートリアルでは、Cloud Dataproc クラスタで RStudio Server を実行し、ローカルマシンから RStudio ウェブ ユーザー インターフェース(UI)にアクセスする方法を示します。

このチュートリアルは、R 言語と RStudio のウェブ UI に精通し、Cloud Dataproc で動作する Secure Shell(SSH)トンネル、Apache Spark、Apache Hadoop の使用に関する基本的な知識があることを前提としています。

目標

このチュートリアルでは、次の手順について説明します。

  • Apache Spark を介して、Cloud Dataproc クラスタ上で動作する Apache Hadoop YARN に R を接続します。
  • ブラウザに SSH トンネルを介して接続し、RStudio、Spark、YARN の UI にアクセスします。
  • RStudio を使用して、Cloud Dataproc に対してサンプルクエリを実行します。

費用

このチュートリアルでは、以下の課金対象の Google Cloud Platform コンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。 GCP を初めてご利用の場合は、無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP Console のプロジェクト セレクタのページで、GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Cloud Dataproc and Cloud Storage必要な API を有効にします。

    API を有効にする

  5. Cloud SDK をインストールして初期化します。

このチュートリアルを終了した後、作成したリソースを削除すれば、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

Cloud Dataproc クラスタの作成

  1. GCP Console で、[Cloud Dataproc クラスタ] ページに移動します。

    [クラスタ] ページに移動

  2. [クラスタを作成] をクリックします。

    クラスタの作成

  3. クラスタに名前を付け、[作成] をクリックします。

このチュートリアルでは、デフォルトのクラスタサイズで十分です。以降の手順でその情報が必要になるため、クラスタを作成したゾーンを記録しておいてください。

マスターノードへの RStudio Server とその依存関係のインストール

Linux または macOS

  1. ローカルマシンで、SSH を使用して Cloud Dataproc クラスタのマスターノードに接続します。

    gcloud compute ssh \
        --zone=[CLUSTER_ZONE] \
        --project=[PROJECT_ID] \
        [CLUSTER_NAME]-m
    

    ここで

    • [CLUSTER_ZONE] は、クラスタが作成されたゾーンです。
    • [PROJECT_ID] は、プロジェクトの ID です。
    • [CLUSTER_NAME] は、クラスタの名前です。
    • [CLUSTER_NAME]-m は、クラスタのマスターノード名です。
  2. マスターノードで、必要なパッケージと依存関係をインストールします。

    sudo apt-get update
    sudo apt-get install -y \
        r-base r-base-dev \
        libcurl4-openssl-dev libssl-dev libxml2-dev
    
  3. RStudio のウェブサイトの説明に従って、64 ビット Debian Linux 用の最新の RStudio Server をダウンロードしてインストールします。

Windows

  1. ローカルマシンで、SSH を使用して Cloud Dataproc クラスタのマスターノードに接続します。

    gcloud compute ssh ^
        --zone=[CLUSTER_ZONE] ^
        --project=[PROJECT_ID] ^
        [CLUSTER_NAME]-m
    

    ここで

    • [CLUSTER_ZONE] は、クラスタが作成されたゾーンです。
    • [PROJECT_ID] は、プロジェクトの ID です。
    • [CLUSTER_NAME] は、クラスタの名前です。
    • [CLUSTER_NAME]-m は、クラスタのマスターノード名です。
  2. マスターノードで、必要なパッケージと依存関係をインストールします。

    sudo apt-get update
    sudo apt-get install -y \
        r-base r-base-dev \
        libcurl4-openssl-dev libssl-dev libxml2-dev
    
  3. RStudio のウェブサイトの説明に従って、64 ビット Debian Linux 用の最新の RStudio Server をダウンロードしてインストールします。

マスターノードでのユーザー アカウントの作成

RStudio UI にログインするためのユーザー アカウントを作成するには、次の手順に従います。

  1. 新しいユーザー アカウントを作成します。[USER_NAME] は新しいユーザー名に置き換えます。

    sudo adduser [USER_NAME]
  2. プロンプトに従い、新しいユーザーのパスワードを入力します。

    マスターノードに複数のユーザー アカウントを作成すると、ユーザー毎に専用の RStudio 環境を提供できます。作成するユーザーごとに、sparklyr および Spark のインストール手順に従ってください。

RStudio ウェブ UI への接続

RStudio Server は Cloud Dataproc マスターノード上で動作し、GCP 内部ネットワークからのみアクセスできます。サーバーにアクセスするには、ローカルマシンと GCP 内部ネットワーク上のマスターノードとの間にネットワーク パスが必要です。

SSH トンネルを使用してポート転送すると、マスターノード用にファイアウォール ポートを開くよりも安全に接続できます。サーバーが単純な HTTP を使用していても、SSH トンネルを使用するとウェブ UI への接続が暗号化されます。

ポート転送には、SOCKS を使用した動的ポート転送TCP ポート転送の 2 種類があります。

SOCKS を使用すると、Cloud Dataproc マスターノードで実行されるすべての内部ウェブ インターフェースを表示できます。ただし、すべてのブラウザ トラフィックを SOCKS プロキシ経由でリダイレクトするには、カスタム ブラウザ構成を使用する必要があります。

TCP ポート転送ではカスタム ブラウザ構成が必要ありませんが、RStudio ウェブ インターフェースしか表示できません。

SSH SOCKS トンネル経由で接続する

SSH SOCKS トンネルを作成し、専用構成のブラウザ プロファイルを使用して接続するには、ウェブ インターフェースへの接続の手順に従います。

接続後、次の URL を使用してウェブ インターフェースにアクセスします。

  • RStudio ウェブ UI を読み込むには、専用構成のブラウザで http://[CLUSTER_NAME]-m:8787 に接続します。次に、作成したユーザー名とパスワードを使用してログインします。

  • YARN リソース マネージャー ウェブ UI を読み込むには、専用構成のブラウザで http://[CLUSTER_NAME]-m:8088 に接続します。

  • HDFS NameNode ウェブ UI を読み込むには、専用構成のブラウザで http://[CLUSTER_NAME]-m:9870 に接続します。

SSH ポート転送を使用して接続する

Linux または macOS

  1. ローカルマシンで、Cloud Dataproc マスターノードに接続します。

    gcloud compute ssh \
        --zone=[CLUSTER_ZONE] \
        --project=[PROJECT_ID] \
        [CLUSTER_NAME]-m -- \
        -L 8787:localhost:8787
    

    -- パラメータは、gcloud コマンドの引数と ssh コマンドに送信される引数を区切るためにあります。-L オプションでは、ローカルマシンのポート 8787 から RStudio Server がリッスンしているクラスタ マスターノードのポート 8787 への、TCP ポート転送が設定されます。

  2. RStudio ウェブ UI を読み込むには、ブラウザで http://localhost:8787 に接続します。

  3. 作成したユーザー名とパスワードを使用してログインします。

Windows

  1. ローカルマシンで、Cloud Dataproc マスターノードに接続します。

    gcloud compute ssh ^
        --zone=[CLUSTER_ZONE] ^
        --project=[PROJECT_ID] ^
        [CLUSTER_NAME]-m -- ^
        -L 8787:localhost:8787
    

    -- パラメータは、gcloud コマンドの引数と ssh コマンドに送信される引数を区切るためにあります。-L オプションでは、ローカルマシンのポート 8787 から RStudio Server がリッスンしているクラスタ マスターノードのポート 8787 への、TCP ポート転送が設定されます。

  2. RStudio ウェブ UI を読み込むには、ブラウザで http://localhost:8787 に接続します。

  3. 作成したユーザー名とパスワードを使用してログインします。

sparklyr パッケージと Spark のインストール

sparklyr パッケージと Spark をインストールするには、RStudio の R コンソールで次のコマンドを実行します。

install.packages("sparklyr")
sparklyr::spark_install()

このコマンドでは、必要な R パッケージおよび互換性のある Spark インスタンスがダウンロード、コンパイル、インストールされます。各コマンドが完了するまでに数分かかります。

YARN 上の Spark への R の接続

R セッションを再起動するたびに、次の手順に従います。

  1. ライブラリを読み込み、必要な環境変数を設定します。

    library(sparklyr)
    library(dplyr)
    spark_home_set()
    Sys.setenv(HADOOP_CONF_DIR = '/etc/hadoop/conf')
    Sys.setenv(YARN_CONF_DIR = '/etc/hadoop/conf')
    
  2. デフォルト設定を使用して、YARN 上の Spark に接続します。

    sc <- spark_connect(master = "yarn-client")

    sc オブジェクトは Spark 接続を参照します。このオブジェクトを使用すると、R でデータを管理し、クエリを実行できます。

    コマンドが成功した場合は、Spark 接続のステータスの確認に進みます。

    コマンドが失敗すると、次で始まるエラー メッセージが表示されます。

    Error in force(code) :
    Failed during initialize_connection: java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig

    この場合は、YARN のバージョンと RStudio が使用する Spark のバージョンの間に互換性がありません。この非互換の問題は、Yarn タイムサービスを無効にすることで回避できます。

  3. RStudio ウェブ UI のメニューで、[Tools] > [Shell] に移動して、新しい [Terminal] タブを作成します。

  4. [Terminal] タブで、次のコマンドを入力して、非互換の問題を引き起こしているサービスを無効にします。

    echo "spark.hadoop.yarn.timeline-service.enabled false" \
        >> $SPARK_HOME/conf/spark-defaults.conf
  5. [Terminal] タブを閉じ、メニューで [Session] > [Restart R] に移動します。

もう一度手順 1 と 2 を繰り返すと、Spark に接続されます。

Spark 接続のステータスの確認

前の手順で作成した sc オブジェクトは、Spark 接続への参照です。次のコマンドを実行して、R セッションが接続されていることを確認できます。

spark_connection_is_open(sc)

接続が確立されている場合は、コマンドで以下が返されます。

[1] TRUE

接続パラメータを調整するには、spark_connect() に渡すことができる構成オブジェクトを使用します。

sparklyr の接続パラメータと YARN 上の Spark の調整の詳細については、以下をご覧ください。

省略可能: インストールの確認

すべてが正常に機能することを確認するには、Cloud Dataproc クラスタにテーブルを読み込んでクエリを実行します。

  1. R コンソールで、2013 年のニューヨーク市のすべてのフライトリストというサンプル データセットをインストールし、それを Spark にコピーします。

    install.packages("nycflights13")
    flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
    
  2. SOCKS ポート転送を使用していない場合は、手順 3 に進みます。それ以外の場合は、Spark UI を使用して、テーブルが作成されたことを確認します。

    1. 構成したブラウザで、YARN リソース マネージャーを読み込みます。

      http://[CLUSTER_NAME]-m:8088

      アプリケーション リストのテーブルに、sparklyr アプリの行が表示されます。

      sparklyr アプリの行

    2. テーブルの右側にある [Tracking UI] 列で [ApplicationMaster] リンクをクリックし、Spark UI にアクセスします。

      Spark UI の [Jobs] タブに、データを Spark にコピーしたジョブのエントリが表示されます。[Storage] タブには、[In-memory table 'flights'] のエントリが表示されます。

      [Storage] タブの [In-memory table flights] エントリ

  3. R コンソールで次のクエリを実行します。

    flights_tbl %>%
      select(carrier, dep_delay) %>%
      group_by(carrier) %>%
      summarize(count = n(), mean_dep_delay = mean(dep_delay)) %>%
      arrange(desc(mean_dep_delay))
    

    このクエリは、航空会社のフライトごとの平均出発遅延時間の降順リストを作成します。結果は次のとおりです。

    # Source:     lazy query [?? x 3]
    # Database:   spark_connection
    # Ordered by: desc(mean_dep_delay)
       carrier  count mean_dep_delay
       <chr>    <dbl>          <dbl>
     1 F9        685.           20.2
     2 EV      54173.           20.0
     3 YV        601.           19.0
     4 FL       3260.           18.7
     5 WN      12275.           17.7
    ...
    

Spark UI の [Jobs] タブに戻ると、このクエリの実行に使用されたジョブが表示されています。実行時間の長いジョブの場合は、このタブを使用して進行状況を監視できます。

謝辞

この記事の特定の技術的内容を準備する際に Mango Solutions を参考にしました。

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

  • Cloud Dataproc クラスタを削除します。
  • 同じリージョンに他の Cloud Dataproc クラスタがない場合は、そのリージョンに自動作成された Cloud Storage バケットも削除する必要があります。

クラスタの削除

  1. GCP Console で、[Cloud Dataproc クラスタ] ページに移動します。

    [Cloud Dataproc クラスタ] ページに移動

  2. クラスタリストで、作成した Cloud Dataproc クラスタの行を探し、[Cloud Storage ステージング バケット] 列にある dataproc という単語で始まるバケット名を記録します。

    クラスタの削除

  3. [rstudio-cluster] の横にあるチェックボックスをオンにし、[削除] をクリックします。

  4. クラスタの削除を確認するメッセージが表示されたら、削除を確定します。

バケットの削除

  1. Cloud Storage バケットを削除するには、Cloud Storage ブラウザに移動します。

    Cloud Storage ブラウザに移動

  2. 削除した Cloud Dataproc クラスタに関連付けられたバケットを探します。

  3. バケット名の横にあるチェックボックスをオンにし、[削除] をクリックします。

    ストレージ バケットの削除

  4. ストレージ バケットの削除を確認するメッセージが表示されたら、削除を確定します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...