你可以使用 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 方案中不能使用 SparkR sparklyr 等包,除非同时使用 Databricks Connect 。 如果不使用 RStudio Desktop,你可以使用 Web 浏览器登录到 Azure Databricks 工作区,然后连接到该工作区中安装了 RStudio Server 的 Azure Databricks 群集。

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

  • 下载并安装 R 3.3.0 或更高版本
  • 下载并安装 RStudio Desktop
  • 启动 RStudio Desktop。
  • (可选)若要创建 RStudio 项目,请执行以下操作:

  • 启动 RStudio Desktop。
  • 单击“文件”>“新建项目”。
  • 选择“新建目录”>“新建项目”。
  • 为项目选择一个新目录,然后单击“创建项目”。
  • 若要创建 R 脚本,请执行以下操作:

  • 打开项目后,单击“文件”>“新建文件”>“R 脚本”。
  • 单击“文件”>“另存为”。
  • 为文件命名,然后单击“保存”。
  • 若要通过适用于 R 的 ODBC 连接到远程 Azure Databricks 群集或 SQL 仓库,请执行以下操作:

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

  • 获取 Azure Databricks 个人访问令牌

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

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

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

  • 在 RStudio 控制台中(“ 视图 > 将焦点移到控制台 ”),安装来自 CRAN odbc DBI 包:

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

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

    conn = dbConnect(
      drv = odbc(),
      dsn = "Databricks"
    
  • 通过 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 版本

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

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

    如果你正在使用 Databricks Runtime 7.0 ML 或更高版本,则已经安装了 RStudio Server Open Source Edition。 可以跳过有关安装 RStudio Server 的部分,直接开始使用 RStudio Server Open Source Edition

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

    无法在使用共享访问模式连接到 Unity Catalog 的群集上访问 RStudio Server 开放源代码版本。 有关群集访问模式的详细信息,请参阅什么是群集访问模式?

    安装 RStudio Server Open Source Edition

    若要在使用 Databricks Runtime 6.6 ML 或更低版本的 Azure Databricks 群集上安装 RStudio Server Open Source Edition,必须创建一个初始化脚本来安装 RStudio Server Open Source Edition 二进制文件包。 有关详细信息,请参阅群集范围的初始化脚本。 下面是一个笔记本单元示例,它在 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
    dbutils.fs.mkdirs("/databricks/rstudio")
    dbutils.fs.put("/databricks/rstudio/rstudio-install.sh", script, True)
    
  • 在一个笔记本中运行此代码以安装 dbfs:/databricks/rstudio/rstudio-install.sh 处的脚本
  • 在启动群集之前,请将 dbfs:/databricks/rstudio/rstudio-install.sh 添加为初始化脚本。 有关详细信息,请参阅群集范围内的初始化脚本
  • 启动群集。
  • 使用 RStudio Server Open Source Edition

  • 显示安装了 RStudio Server Open Source 的群集的详细信息,然后单击“应用”选项卡:

    # 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) 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 Workbench

    本部分介绍如何在 Azure Databricks 群集上安装和开始使用 RStudio Workbench(以前称为 RStudio Server Pro)。 请参阅有关名称更改的常见问题解答。 根据许可证,RStudio Workbench 可能包括 RStudio Server 专业版。

    设置 RStudio 许可证服务器

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

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

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

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

    如果你计划在已包含 RStudio Server Open Source Edition 包的 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
    dbutils.fs.mkdirs("/databricks/rstudio")
    dbutils.fs.put("/databricks/rstudio/rstudio-install.sh", script, True)
    
  • <domain> 替换为你的 Azure Databricks URL,并将 <license-server-url> 替换为你的浮动许可证服务器的 URL。
  • 在一个笔记本中运行此代码以安装 dbfs:/databricks/rstudio/rstudio-install.sh 处的脚本
  • 在启动群集之前,请将 dbfs:/databricks/rstudio/rstudio-install.sh 添加为初始化脚本。 有关详细信息,请参阅群集范围内的初始化脚本
  • 启动群集。
  • 使用 RStudio Server 专业版

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

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

  • 在 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)
    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 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 Server 专业版中,你可以将 allow-terminal-websockets=0 添加到 /etc/rstudio/rsession.conf,以便对所有用户禁用 Websocket。

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

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

  •