在 Cloud Dataproc 集群上运行 RStudio® Server

本教程将向您介绍如何在 Dataproc 集群上运行 RStudio Server,并从本地机器访问 RStudio 网页界面。

本教程假设您熟悉 R 语言和 RStudio 网页界面,并且基本了解如何使用在 Dataproc 上运行的 Secure Shell (SSH) 隧道、Apache Spark 和 Apache Hadoop。

目标

本教程介绍了以下步骤:

  • 通过 Apache Spark 将 R 连接到在 Dataproc 集群中运行的 Apache Hadoop YARN。
  • 通过 SSH 隧道连接您的浏览器,以访问 RStudio、Spark 和 YARN UI。
  • 在 Dataproc 上使用 RStudio 运行示例查询。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用量来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

  4. 启用 Dataproc and Cloud Storage API。

    启用 API

  5. 安装并初始化 Cloud SDK

完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理

创建 Dataproc 集群

  1. 在 Cloud Console 中,转到 Dataproc 集群页面:

    转到“集群”页面

  2. 点击创建集群

    创建集群

  3. 为您的集群命名,然后点击创建

在本教程中,默认集群大小合乎需要。请记下您用来创建该集群的地区,因为您会在后面的步骤中用到该信息。

在主节点上安装 RStudio Server 及其依赖项

Linux 或 macOS

  1. 在本地机器上,通过 SSH 连接到 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 连接到 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 界面,请按照以下步骤操作。

  1. 创建一个新的用户帐号,将 [USER_NAME] 替换为新的用户名:

    sudo adduser [USER_NAME]
  2. 系统提示您时,请输入新用户的密码。

    您可在主节点上创建多个用户帐号,为用户创建专属的 RStudio 环境。对于您创建的每个用户,请按照 sparklyr 和 Spark 安装步骤操作。

连接到 RStudio 网页界面

RStudio Server 在 Dataproc 主节点上运行,并且仅可通过 GCP 内部网络进行访问。要访问该服务器,您需要本地计算机与 GCP 内部网络上的主节点之间的网络路径。

您可以通过 SSH 隧道利用端口转发进行连接,这比打开防火墙连接到主节点更安全。即使服务器使用简单的 HTTP,使用 SSH 隧道也能对您与网页界面的连接加密。

有两种端口转发方法,即使用 SOCKS 进行动态端口转发TCP 端口转发

使用 SOCKS,您可以查看正在 Dataproc 主节点上运行的所有内部网页界面;不过,您需要使用自定义浏览器配置,重定向通过 SOCKS 代理的所有浏览器流量。

TCP 端口转发不需要自定义浏览器配置,但您仅可查看 RStudio 网页界面。

通过 SSH SOCKS 隧道连接

要创建 SSH SOCKS 隧道,并通过特别配置的浏览器配置文件进行连接,请按照连接到网页界面中的步骤操作。

连接后,请使用以下网址访问网页界面。

  • 要加载 RStudio 网页界面,请通过经特别配置的浏览器连接到 http://[CLUSTER_NAME]-m:8787。然后,使用您所创建的用户名和密码登录。

  • 要加载 YARN 资源管理器网页界面,请通过经特别配置的浏览器连接到 http://[CLUSTER_NAME]-m:8088

  • 要加载 HDFS NameNode 网页界面,请通过经特别配置的浏览器连接到 http://[CLUSTER_NAME]-m:9870

通过 SSH 端口转发连接

Linux 或 macOS

  1. 在本地机器上,连接到 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 网页界面,请将您的浏览器连接到 http://localhost:8787

  3. 使用您所创建的用户名和密码登录。

Windows

  1. 在本地机器上,连接到 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 网页界面,请将您的浏览器连接到 http://localhost:8787

  3. 使用您所创建的用户名和密码登录。

安装 sparklyr 软件包和 Spark

要安装 sparklyr 软件包和 Spark,请在 RStudio R 控制台中运行以下命令:

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

通过这些命令,可下载、编译和安装必要的 R 软件包和兼容的 Spark 实例。请注意,每个命令都需要几分钟才能完成。

将 R 连接到 YARN 上的 Spark

每次在重新启动 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 对象引用您可用于管理数据和在 R 中执行查询的 Spark 连接。

    如果命令成功,则跳至检查 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 网页界面的菜单中,导航到工具 > Shell 以创建新的“终端”标签页。

  4. 在“终端”标签页中,输入以下命令,以停用导致不兼容的服务。

    echo "spark.hadoop.yarn.timeline-service.enabled false" \
        >> $SPARK_HOME/conf/spark-defaults.conf
  5. 关闭“终端”标签页,然后在菜单中导航至会话 > 重启 R

现在重新执行第 1 步和第 2 步,您将成功连接到 Spark。

检查 Spark 连接的状态。

上面创建的 sc 对象是对 Spark 连接的引用。您可以执行以下命令,确认 R 会话是否已连接:

spark_connection_is_open(sc)

如果建立了连接,该命令会返回以下内容:

[1] TRUE

您可以使用可传递给 spark_connect() 的配置对象调整连接参数。

如需详细了解 sparklyr 连接参数和调整 YARN 上的 Spark,请参阅以下文件:

可选:验证您的安装

要验证一切是否正常,您可以将表加载到 Dataproc 集群,并执行查询。

  1. 在 R 控制台中,安装示例数据集(即 2013 年纽约市所有航班的列表),并将其复制到 Spark 中:

    install.packages("nycflights13")
    flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
    
  2. 如果您没有使用 SOCKS 端口转发,请跳到第 3 步。否则,请使用 Spark 界面验证是否已创建该表。

    1. 在您配置的浏览器中,加载 YARN 资源管理器:

      http://[CLUSTER_NAME]-m:8088

      应用列表将显示一个与 sparklyr 应用对应的行。

      sparklyr 应用的行

    2. 在表右侧的跟踪界面列中,点击 ApplicationMaster 链接以访问 Spark 界面。

      在 Spark 界面的作业标签页中,您会看到用于将数据复制到 Spark 的作业条目。在存储标签页中,您将看到内存表“航班”的条目。

      带有内存表航班的条目的存储标签页

  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 界面中的作业标签,则您可以看到用于执行此查询的作业。对于运行时间较长的作业,您可以使用此标签监控进度。

致谢

感谢 Mango Solutions 协助制定本文章的某些技术内容。

清理

为避免因本教程中使用的资源导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

  • 删除 Dataproc 集群。
  • 如果您在同一区域中没有其他 Dataproc 集群,则还需要删除系统自动为该区域创建的 Cloud Storage 存储分区。

删除集群

  1. 在 Cloud Console 中,转到“Dataproc 集群”页面:

    转到“Cloud Dataproc 集群”页面

  2. 在集群列表中,找到所创建 Dataproc 集群对应的行,然后在 Cloud Storage 暂存存储分区列中,记下以单词 dataproc 开头的存储分区名称。

    删除集群

  3. 勾选 rstudio-cluster 旁的复选框,并点击删除

  4. 当系统提示您删除集群时,请确认删除。

删除存储分区

  1. 要删除 Cloud Storage 存储分区,请转到 Cloud Storage 浏览器:

    转到 Cloud Storage 浏览器

  2. 找到与您刚刚删除的 Dataproc 集群相关联的存储分区。

  3. 选中该存储分区名称旁的复选框,然后点击删除

    删除存储分区

  4. 当系统提示您删除存储分区时,请确认删除。

后续步骤

  • 如需了解与 Dataproc 互动的其他方式,请参阅示例和教程
  • 试用其他 Google Cloud 功能。查阅我们的教程