Azure Databricks 上的 RStudio

你可以使用 RStudio(一个适用于 R 的通用集成开发环境 (IDE))连接到 Azure Databricks 工作区中的 Azure Databricks 计算资源。 使用 RStudio Desktop 从本地开发计算机连接到 Azure Databricks 群集SQL 仓库。 还可以使用 Web 浏览器登录到 Azure Databricks 工作区,然后连接到该工作区中安装了 RStudio Server 的 Azure Databricks 群集。

使用 RStudio Desktop 进行连接

使用 RStudio Desktop 从本地开发计算机连接到远程 Azure Databricks 群集或 SQL 仓库。 若要在此方案中进行连接,请使用 ODBC 连接,并调用本部分所述的适用于 R 的 ODBC 包函数。

注意

在此 RStudio Desktop 方案中不能使用 SparkRsparklyr 等包,除非同时使用 Databricks Connect。 如果不使用 RStudio Desktop,你可以使用 Web 浏览器登录到 Azure Databricks 工作区,然后连接到该工作区中安装了 RStudio Server 的 Azure Databricks 群集。

若要在本地开发计算机上安装 RStudio Desktop,请执行以下操作:

  1. 下载并安装 R 3.3.0 或更高版本
  2. 下载并安装 RStudio Desktop
  3. 启动 RStudio Desktop。

(可选)若要创建 RStudio 项目,请执行以下操作:

  1. 启动 RStudio Desktop。
  2. 单击“文件”>“新建项目”。
  3. 选择“新建目录”>“新建项目”。
  4. 为项目选择一个新目录,然后单击“创建项目”。

若要创建 R 脚本,请执行以下操作:

  1. 打开项目后,单击“文件”>“新建文件”>“R 脚本”。
  2. 单击“文件”>“另存为”。
  3. 为文件命名,然后单击“保存”。

若要通过适用于 R 的 ODBC 连接到远程 Azure Databricks 群集或 SQL 仓库,请执行以下操作:

  1. 获取远程群集SQL 仓库的服务器主机名、端口和 HTTP 路径值。 对于群集,这些值可以在“高级选项”的“JDBC/ODBC”选项卡上找到。 对于 SQL 仓库,这些值可以在“连接详细信息”选项卡上找到。

  2. 获取 Azure Databricks 个人访问令牌

    注意

    作为安全最佳做法,在使用自动化工具、系统、脚本和应用进行身份验证时,Databricks 建议使用属于服务主体(而不是工作区用户)的个人访问令牌。 若要为服务主体创建令牌,请参阅管理服务主体的令牌

  3. 根据本地计算机的操作系统,安装并配置适用于 WindowsmacOSLinux 的 Databricks ODBC 驱动程序。

  4. 根据本地计算机的操作系统,为远程群集或 SQL 仓库设置适用于 WindowsmacOSLinux 的 ODBC 数据源名称 (DSN)。

  5. 在 RStudio 控制台中(“视图”>“将焦点移到控制台”),安装来自 CRANodbcDBI 包:

    require(devtools)
    
    install_version(
      package = "odbc",
      repos   = "http://cran.us.r-project.org"
    )
    
    install_version(
      package = "DBI",
      repos   = "http://cran.us.r-project.org"
    )
    
  6. 返回到 R 脚本(“视图”>“将焦点移到源”),加载已安装的 odbcDBI 包:

    library(odbc)
    library(DBI)
    
  7. 调用 DBI 包中 dbConnect 函数的 ODBC 版本,并指定 odbc 包中的 odbc 驱动程序以及你创建的 ODBC DSN,例如 Databricks 的 ODBC DSN。

    conn = dbConnect(
      drv = odbc(),
      dsn = "Databricks"
    )
    
  8. 通过 ODBC DSN 调用某个操作(例如,通过 DBI 包中的 dbGetQuery 函数调用 SELECT 语句),并指定连接变量的名称和 SELECT 语句本身,例如指定名为 default 的架构(数据库)中名为 diamonds 的表中的变量:

    print(dbGetQuery(conn, "SELECT * FROM default.diamonds LIMIT 2"))
    

完整的 R 脚本如下所示:

library(odbc)
library(DBI)

conn = dbConnect(
  drv = odbc(),
  dsn = "Databricks"
)

print(dbGetQuery(conn, "SELECT * FROM default.diamonds LIMIT 2"))

若要运行该脚本,请在源视图中单击“源”。 上述 R 脚本的结果如下所示:

  _c0 carat     cut color clarity depth table price    x    y    z
1   1  0.23   Ideal     E     SI2  61.5    55   326 3.95 3.98 2.43
2   2  0.21 Premium     E     SI1  59.8    61   326 3.89 3.84 2.31

使用 RStudio Server 进行连接

使用 Web 浏览器登录到 Azure Databricks 工作区,然后连接到该工作区中安装了 RStudio Server 的 Azure Databricks 群集。

注意

作为 RStudio Server 的替代方案,你可以使用 RStudio Desktop 通过 ODBC 连接从本地开发计算机连接到 Azure Databricks 群集或 SQL 仓库,并调用适用于 R 的 ODBC 包函数。不能使用 RStudio Desktop 方案中的 SparkRsparklyr 等包,除非同时使用 Databricks Connect

对于 RStudio Server,可以在 Azure Databricks 上使用 Open Source Edition 或 RStudio Workbench(以前称为 RStudio Server Pro)版本。 如果要使用 RStudio Workbench/RStudio Server 专业版,则必须将现有的 RStudio Workbench/RStudio Server 专业版许可证传输到 Azure Databricks(请参阅入门指南:RStudio Workbench)。

Databricks 建议在包含 RStudio Server 的 Azure Databricks 群集上使用用于机器学习的 Databricks Runtime (Databricks Runtime ML),以减少群集启动时间。 Databricks Runtime ML 包含 RStudio Server Open Source Edition 包的未修改版本,其源代码可在 GitHub 中找到。 下表列出了当前预装在 Databricks Runtime ML 版本中的 RStudio Server Open Source Edition 版本。

用于 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 集成组件体系结构。

Databricks 上的 RStudio 的体系结构

警告

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

要求

  • 群集必须是通用群集。
  • 你必须拥有该群集的“可附加到”权限。 群集管理员可以向你授予此权限。 请参阅群集访问控制
  • 群集不得启用表访问控制自动终止凭据传递
  • 群集不得使用共享访问模式
  • 群集不得将 Spark 配置 spark.databricks.pyspark.enableProcessIsolation 设置为 true
  • 必须有 RStudio Server 浮动专业版许可证才能使用专业版。

入门指南:RStudio Server OS Edition

RStudio Server Open Source Edition 预安装在使用 Databricks Runtime 进行机器学习 (Databricks Runtime ML) 的 Azure Databricks 群集上。

若要在群集上打开 RStudio Server OS Edition,请执行以下操作:

  1. 打开群集的详细信息页。

  2. 启动群集,然后单击“应用”选项卡:

    “群集应用”选项卡

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

    RStudio 一次性密码

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

    RStudio 登录窗体

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

    library(SparkR)
    
    sparkR.session()
    
    # Query the first two rows of a table named "diamonds" in a
    # schema (database) named "default" and display the query result.
    df <- SparkR::sql("SELECT * FROM default.diamonds LIMIT 2")
    showDF(df)
    

    RStudio Open Source Edition 会话

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

    library(sparklyr)
    
    sc <- spark_connect(method = "databricks")
    
    # Query a table named "diamonds" and display the first two rows.
    df <- spark_read_table(sc = sc, name = "diamonds")
    print(x = df, n = 2)
    

    RStudio Open Source Edition sparklyr 连接

入门指南:RStudio Workbench

本部分介绍如何在 Azure Databricks 群集上安装和开始使用 RStudio Workbench(以前称为 RStudio Server Pro)。 请参阅有关名称更改的常见问题解答。 根据许可证,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 Edition 包的 Databricks Runtime 版本中安装 RStudio Workbench,则需要首先卸载该包,这样才能成功安装。

以下是一个示例 .sh 文件,可以将其作为 init 脚本存储在某个位置,例如作为工作区文件存储在主目录中、Unity Catalog 卷中或对象存储中。 有关详细信息,请参阅使用群集范围的 init 脚本。 该脚本还会执行其他身份验证配置,以简化与 Azure Databricks 的集成。

警告

DBFS 上的群集范围的 init 脚本已终止服务。 在 DBFS 中存储 init 脚本存在于一些工作区中,以支持旧式工作负载,但不建议使用。 存储在 DBFS 中的所有 init 脚本都应迁移。 有关迁移说明,请参阅从 DBFS 迁移 init 脚本

#!/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
  1. <domain> 替换为你的 Azure Databricks URL,并将 <license-server-url> 替换为你的浮动许可证服务器的 URL。
  2. 将此 .sh 文件作为 init 脚本存储在某个位置,例如作为工作区文件存储在主目录中、Unity Catalog 卷中或对象存储中。 有关详细信息,请参阅使用群集范围的 init 脚本
  3. 在启动群集之前,请从关联的位置将此 .sh 文件添加为 init 脚本。 有关说明,请参阅使用群集范围的 init 脚本
  4. 启动群集。

使用 RStudio Server 专业版

  1. 打开群集的详细信息页。

  2. 启动群集,单击“应用”选项卡:

    “群集应用”选项卡

  3. 在“应用”选项卡上,单击“安装 RStudio”按钮。

    RStudio 一次性密码

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

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

    library(SparkR)
    
    sparkR.session()
    
    # Query the first two rows of a table named "diamonds" in a
    # schema (database) named "default" and display the query result.
    df <- SparkR::sql("SELECT * FROM default.diamonds LIMIT 2")
    showDF(df)
    

    RStudio 专业版会话

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

    library(sparklyr)
    
    sc <- spark_connect(method = "databricks")
    
    # Query a table named "diamonds" and display the first two rows.
    df <- spark_read_table(sc = sc, name = "diamonds")
    print(x = df, n = 2)
    

    RStudio 专业版 sparklyr 连接

RStudio Server 常见问题解答

RStudio Server Open Source Edition 与 RStudio Workbench 有何差别?

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

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

最后,RStudio Workbench 享受“RStudio, PBC”提供的专业和企业支持,而 RStudio Server Open Source Edition 没有这些支持。

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

可以。如果你已有 RStudio Server 的专业版或企业版许可证,则可以在 Azure Databricks 上使用该许可证。 参阅入门指南:RStudio Workbench,了解如何在 Azure Databricks 上安装 RStudio Workbench。

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

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

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

注意

本文介绍旧版群集 UI。 有关新群集 UI(预览版)的信息(包括群集访问模式的术语更改),请参阅创建群集。 有关新旧版群集类型的比较,请参阅群集 UI 更改和群集访问模式

可以。

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

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

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

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

我们强烈建议你使用 RStudio 中的版本控制系统来持久保存工作。 RStudio 对各种版本控制系统提供了很大的支持,允许你签入和管理你的项目。 如果你不通过以下方法之一来持久保存代码,则在工作区管理员重启或终止群集时,你的工作可能会丢失。

一种方法是在什么是 Databricks 文件系统 (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
library(sparklyr)

sc <- spark_connect(method = "databricks")

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

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

什么是工作目录?

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

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

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

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

请确保已禁用 WebSocket。 在 RStudio Server Open Source Edition 中,你可以从 UI 执行此操作。

RStudio 会话

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

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

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