Azure Databricks 上的 RStudio

Azure Databricks 集成了 RStudio Server,后者是适用于 R 的常用集成开发环境 (IDE)。

你可以使用 Azure Databricks 上的 RStudio Server 的开源版或专业版。 如果要使用 RStudio Server 专业版,则必须将现有的 RStudio 专业版许可证传输到 Azure Databricks(请参阅 RStudio Workbench(以前称为 RStudio Server 专业版)入门)。

用于机器学习的 Databricks Runtime 包括 RStudio Server 开源版包的未修改版本,可以在 GitHub 中找到该版本的源代码。 下表列出了当前预安装在 Databricks Runtime for ML 版本上的 Studio Server Open Source 版本。

用于 ML 的 Databricks Runtime 版本 RStudio Server 版本
Databricks Runtime 7.3 LTS ML 1.2
Databricks Runtime 9.1 LTS ML 和 10.4 LTS ML 1.4

RStudio 集成体系结构

在 Azure Databricks 上使用 RStudio Server 时,RStudio Server 守护程序在 Azure Databricks 群集的驱动程序节点上运行。 RStudio Web UI 通过 Azure Databricks Webapp 进行代理,这意味着你无需对群集网络配置进行任何更改。 下图演示了 RStudio 集成组件体系结构。

Architecture of RStudio on Databricks

警告

Azure Databricks 通过群集的 Spark 驱动程序上的端口 8787 充当 RStudio Web 服务的代理。 此 Web 代理仅与 RStudio 配合使用。 如果你在端口 8787 上启动其他 Web 服务,用户可能会受到安全攻击。 Databricks 和 Microsoft 均不负责因在群集上安装不受支持的软件而导致的任何问题。

要求

  • 群集不得启用表访问控制自动终止凭据传递
  • 你必须拥有对该群集的“可附加到”权限。 群集管理员可以向你授予此权限。 请参阅群集访问控制
  • 如果要使用专业版,则需要具有 RStudio Server 浮动专业版许可证。

开始使用 RStudio Server 开源版

重要

如果使用的是 Databricks Runtime 7.0 ML 或更高版本,则已经安装了 RStudio Server 开源版,可以跳过安装 RStudio Server 的部分。

若要开始使用 Azure Databricks 上的 RStudio Server 开源版,必须在 Azure Databricks 群集上安装 RStudio。 此安装只需执行一次。 安装通常由管理员执行。

安装 RStudio Server 开源版

若要在 Azure Databricks 群集上安装 RStudio Server 开源版,你必须创建一个初始化脚本来安装 RStudio Server 开源版二进制程序包。 有关更多详细信息,请参阅以群集为作用域的初始化脚本。 下面是一个笔记本单元示例,它在 DBFS 上的某个位置安装初始化脚本。

重要

  • 所有用户都有对 DBFS 的读取和写入访问权限,因此任何用户都可以修改 init 脚本。 如果这是一个潜在问题,Databricks 建议将 init 脚本放在 Azure Data Lake Storage Gen2 上,并限制对该脚本的权限。

  • 可能需要根据运行时的 Ubuntu 版本修改包 URL,可在发行说明中查找该版本。

script = """#!/bin/bash

set -euxo pipefail
RSTUDIO_BIN="/usr/sbin/rstudio-server"

if [[ ! -f "$RSTUDIO_BIN" && $DB_IS_DRIVER = "TRUE" ]]; then
  apt-get update
  apt-get install -y gdebi-core
  cd /tmp
  # You can find new releases at https://rstudio.com/products/rstudio/download-server/debian-ubuntu/.
  wget https://download2.rstudio.org/server/bionic/amd64/rstudio-server-2022.02.1-461-amd64.deb -O rstudio-server.deb
  sudo gdebi -n rstudio-server.deb
  rstudio-server restart || true
fi
"""

dbutils.fs.mkdirs("/databricks/rstudio")
dbutils.fs.put("/databricks/rstudio/rstudio-install.sh", script, True)
  1. 在一个笔记本中运行此代码以安装 dbfs:/databricks/rstudio/rstudio-install.sh 处的脚本
  2. 在启动群集之前,请将 dbfs:/databricks/rstudio/rstudio-install.sh 添加为初始化脚本。 有关详细信息,请参阅群集范围内的初始化脚本
  3. 启动群集。

使用 RStudio Server 开源版

  1. 显示你在其中安装了 RStudio 的群集的详细信息,并单击“应用”选项卡:

    Cluster Apps tab

  2. 在“应用”选项卡中,单击“设置 RStudio”按钮。 这会为你生成一次性密码。 单击“显示”链接以显示它并复制密码。

    RStudio one-time password

  3. 单击“打开 RStudio UI”链接,在新选项卡中打开 UI。在登录窗体中以输入用户名和密码的方式登录。

    RStudio login form

  4. 在 RStudio UI 中,可以导入 SparkR 包并设置一个 SparkR 会话,以便在群集上启动 Spark 作业。

    library(SparkR)
    sparkR.session()
    

    RStudio Open Source session

  5. 你还可以附加 sparklyr 包并设置 Spark 连接。

    SparkR::sparkR.session()
    library(sparklyr)
    sc <- spark_connect(method = "databricks")
    

    RStudio Open Source sparklyr connection

RStudio Workbench(以前称为 RStudio Server 专业版)入门

2022 年 2 月,RStudio Server 专业版重命名为 RStudio Workbench(有关名称更改的常见问题解答)。 根据许可证,RStudio Workbench 可能包括 RStudio Server 专业版。

设置 RStudio 许可证服务器

若要在 Azure Databricks 上使用 RStudio Workbench,你需要将专业版许可证转换为浮动许可证。 如需帮助,请联系 help@rstudio.com。 如果许可证已转换,必须为 RStudio Workbench 设置许可证服务器

若要设置许可证服务器,请执行以下操作:

  1. 在你的云提供商网络上启动一个小型实例;许可证服务器守护程序是很轻型的程序。
  2. 在你的实例上下载并安装相应版本的 RStudio 许可证服务器,然后启动该服务。 有关详细说明,请参阅 RStudio Workbench 管理员指南
  3. 请确保通向 Azure Databricks 实例的许可证服务器端口已打开。

安装 RStudio Workbench

若要在 Azure Databricks 群集上安装 RStudio Workbench,必须创建一个初始化脚本来安装 RStudio Workbench 二进制程序包,并将其配置为使用你的许可证服务器进行许可证租用。 有关更多详细信息,请参阅诊断日志

注意

如果你计划在已包含 RStudio Server Open Source 程序包的 Databricks Runtime 版本上安装 RStudio Workbench,则需要首先卸载该程序包,这样才能安装成功。

下面是一个笔记本单元示例,它在 DBFS 上生成初始化脚本。 该脚本还会执行其他身份验证配置,以简化与 Azure Databricks 的集成。

重要

  • 所有用户都有对 DBFS 的读取和写入访问权限,因此任何用户都可以修改 init 脚本。 如果这是一个潜在问题,Databricks 建议将 init 脚本放在 Azure Data Lake Storage Gen2 上,并限制对该脚本的权限。

  • 可能需要根据运行时的 Ubuntu 版本修改包 URL,可在发行说明中查找该版本。

script = """#!/bin/bash

set -euxo pipefail

if [[ $DB_IS_DRIVER = "TRUE" ]]; then
  sudo apt-get update
  sudo dpkg --purge rstudio-server # in case open source version is installed.
  sudo apt-get install -y gdebi-core alien

  ## Installing RStudio Workbench
  cd /tmp

  # You can find new releases at https://rstudio.com/products/rstudio/download-commercial/debian-ubuntu/.
  wget https://download2.rstudio.org/server/bionic/amd64/rstudio-workbench-2022.02.1-461.pro1-amd64.deb -O rstudio-workbench.deb
  sudo gdebi -n rstudio-workbench.deb

  ## Configuring authentication
  sudo echo 'auth-proxy=1' >> /etc/rstudio/rserver.conf
  sudo echo 'auth-proxy-user-header-rewrite=^(.*)$ $1' >> /etc/rstudio/rserver.conf
  sudo echo 'auth-proxy-sign-in-url=<domain>/login.html' >> /etc/rstudio/rserver.conf
  sudo echo 'admin-enabled=1' >> /etc/rstudio/rserver.conf
  sudo echo 'export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' >> /etc/rstudio/rsession-profile

  # Enabling floating license
  sudo echo 'server-license-type=remote' >> /etc/rstudio/rserver.conf

  # Session configurations
  sudo echo 'session-rprofile-on-resume-default=1' >> /etc/rstudio/rsession.conf
  sudo echo 'allow-terminal-websockets=0' >> /etc/rstudio/rsession.conf

  sudo rstudio-server license-manager license-server <license-server-url>
  sudo rstudio-server restart || true
fi
"""

dbutils.fs.mkdirs("/databricks/rstudio")
dbutils.fs.put("/databricks/rstudio/rstudio-install.sh", script, True)
  1. <domain> 替换为你的 Azure Databricks URL,并将 <license-server-url> 替换为你的浮动许可证服务器的 URL。
  2. 在一个笔记本中运行此代码以安装 dbfs:/databricks/rstudio/rstudio-install.sh 处的脚本
  3. 在启动群集之前,请将 dbfs:/databricks/rstudio/rstudio-install.sh 添加为初始化脚本。 有关详细信息,请参阅诊断日志
  4. 启动群集。

使用 RStudio Server 专业版

  1. 显示你在其中安装了 RStudio 的群集的详细信息,并单击“应用”选项卡:

    Cluster Apps tab

  2. 在“应用”选项卡中,单击“设置 RStudio”按钮。

    RStudio one-time password

  3. 你不需要使用这个一次性密码。 单击“打开 RStudio UI”链接,它会为你打开一个经身份验证的 RStudio 专业版会话。

  4. 在 RStudio UI 中,可以附加 SparkR 包并设置一个 SparkR 会话,以便在群集上启动 Spark 作业。

    library(SparkR)
    sparkR.session()
    

    RStudio Pro session

  5. 你还可以附加 sparklyr 包并设置 Spark 连接。

    SparkR::sparkR.session()
    library(sparklyr)
    sc <- spark_connect(method = "databricks")
    

    RStudio Pro sparklyr connection

常见问题 (FAQ)

RStudio Server Open Source 与 RStudio Workbench 之间的区别是什么?

RStudio Workbench 支持各种企业功能,这些功能在开源版上不可用。 可以在 RStudio 网站上查看功能比较情况。

此外,RStudio Server 开源版根据 GNU Affero 通用公共许可证 (AGPL) 分发,而专业版为不能使用 AGPL 软件的组织提供了商业许可证。

最后,RStudio Workbench 附带 RStudio, PBC 提供的专业和企业支持,而 RStudio Server 开源版没有这些支持。

是否可以在 Azure Databricks 上使用我的 RStudio Workbench / RStudio Server 专业版许可证?

可以。如果你已有 RStudio Server 的专业版或企业版许可证,则可以在 Azure Databricks 上使用该许可证。 若要了解如何在 Azure Databricks 上安装 RStudio Workbench,请参阅RStudio Workbench(以前称为 RStudio Server 专业版)入门

RStudio Server 在何处运行? 我是否需要管理任何其他服务/服务器?

正如 RStudio 集成体系结构中的关系图所示,RStudio Server 守护程序在 Azure Databricks 群集的驱动程序节点(主节点)上运行。 使用 RStudio Server 开源版,无需运行任何其他服务器/服务。 但是,对于 RStudio Workbench,你必须管理一个运行 RStudio 许可证服务器的单独实例。

是否可以在标准群集上使用 RStudio Server?

可以。 最初,你需要使用高并发群集,但该限制已不再存在。

是否可以在具有自动终止功能的群集上使用 RStudio Server?

否。启用自动终止功能后,不能使用 RStudio。 自动终止功能可以清除 RStudio 会话中未保存的用户脚本和数据。 为了使用户免受这种意外数据丢失情况的影响,默认情况下,RStudio 在此类群集上已禁用。

对于需要在不使用群集资源时对其进行清理的客户,Databricks 建议使用群集 API 根据计划来清理 RStudio 群集。

我应该如何在 RStudio 上持久保存我的工作?

我们强烈建议你使用 RStudio 中的版本控制系统来持久保存工作。 RStudio 对各种版本控制系统提供了很大的支持,允许你签入和管理你的项目。

你还可以在 Databricks 文件系统 (DBFS) 上保存文件(代码或数据)。 例如,如果你将文件保存在 /dbfs/ 下,则在群集终止或重启时不会删除这些文件。

重要

如果你不通过版本控制或 DBFS 来持久保存代码,则在管理员重启或终止群集时,你可能会丢失工作。

另一种方法是将 R 笔记本作为 Rmarkdown 导出以将其保存到你的本地文件系统,然后将该文件导入到 RStudio 实例中。

Sharing R Notebooks using RMarkdown(使用 RMarkdown 共享 R 笔记本)这一博客文章更详细地介绍了这些步骤。

如何启动 SparkR 会话?

SparkR 包含在 Databricks Runtime 中,但你必须将其加载到 RStudio 中。 在 RStudio 中运行以下代码以初始化 SparkR 会话。

library(SparkR)
sparkR.session()

如果导入 SparkR 包时出错,请运行 .libPaths() 并验证结果中是否包含 /home/ubuntu/databricks/spark/R/lib

如果未包含此内容,请检查 /usr/lib/R/etc/Rprofile.site 的内容。 列出驱动程序上的 /home/ubuntu/databricks/spark/R/lib/SparkR,以验证是否安装了 SparkR 包。

如何启动 sparklyr 会话?

必须在群集上安装 sparklyr 包。 使用以下方法之一安装 sparklyr 包:

  • 作为 Azure Databricks 库
  • install.packages() 命令
  • RStudio 包管理 UI

SparkR 包含在 Databricks Runtime 中,但你必须将其加载到 RStudio 中。 在 RStudio 中运行以下代码以初始化 sparklyr 会话。

SparkR::sparkR.session()
library(sparklyr)
sc <- spark_connect(method = “databricks”)

如果 sparklyr 命令失败,请确认 SparkR::sparkR.session() 是否成功。

RStudio 如何与 Azure Databricks R 笔记本集成?

你可以通过版本控制在笔记本与 RStudio 之间移动你的工作。

什么是工作目录?

当你在 RStudio 中启动项目时,你选择了一个工作目录。 默认情况下,这是在其中运行 RStudio Server 的驱动程序容器(主容器)中的主目录。 如果需要,你可以更改此目录。

是否可以从 Azure Databricks 上运行的 RStudio 启动 Shiny 应用?

是的,可以在 Databricks 上的 RStudio Server 内开发和查看 Shiny 应用程序

无法在 Azure Databricks 上的 RStudio 内使用终端或 git, 如何解决此问题?

请确保已禁用 WebSocket。 在 RStudio Server 开源版中,你可以从 UI 执行此操作。

RStudio Session

在 RStudio Server 专业版中,你可以将 allow-terminal-websockets=0 添加到 /etc/rstudio/rsession.conf,以便对所有用户禁用 Websocket。

我在群集详细信息下看不到“应用”选项卡。

此功能并非可供所有客户使用。 必须已参加高级计划