在 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 Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

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

  4. 启用 Dataproc and Cloud Storage API。

    启用 API

  5. 安装并初始化 Cloud SDK
  6. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

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

  8. 启用 Dataproc and Cloud Storage API。

    启用 API

  9. 安装并初始化 Cloud SDK

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

创建 Dataproc 集群

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

    转到 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 控制器节点上运行,且只能通过 Google Cloud 内部网络访问。如需访问该服务器,您需要本地机器与 Google Cloud 内部网络上的控制器节点之间的网络路径。

您可以通过 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 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

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

删除集群

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

    转到 Dataproc 集群

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

    删除集群

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

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

删除存储分区

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

    转到 Cloud Storage 浏览器

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

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

    删除存储分区

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

后续步骤

  • 如需了解与 Dataproc 互动的其他方式,请参阅示例和教程
  • 探索有关 Google Cloud 的参考架构、图表、教程和最佳做法。查看我们的云架构中心