为 SQL Server 安装 R 自定义运行时

适用于: SQL Server 2019 (15.x)

了解如何在以下操作系统上安装 R 自定义运行时,以便使用 SQL Server 运行外部 R 脚本:

  • Windows
  • Ubuntu Linux
  • Red Hat Enterprise Linux (RHEL)
  • SUSE Linux Enterprise Server (SLES) 版本 12

自定义运行时可以运行机器学习脚本,并使用 SQL Server 语言扩展

可以将自己的 R 运行时版本与 SQL Server 一起使用,而不是使用随 SQL Server 机器学习服务安装的默认运行时版本。

从 SQL Server 2022 (16.x) 起,R、Python 和 Java 的运行时不再随 SQL 安装程序一起安装。 请改为安装所需的 R 自定义运行时和包。 有关详细信息,请参阅在 Windows 上安装 SQL Server 2022 机器学习服务(Python 和 R)在 Linux 上安装 SQL Server 机器学习服务(Python 和 R)

必备条件

安装 R 自定义运行时之前,请安装以下各项:

安装语言扩展

注意

如果已在 SQL Server 2019 上安装机器学习服务,则已安装语言扩展,可以跳过此步骤。

按照以下步骤安装 SQL Server 语言扩展,该扩展用于 R 自定义运行时。

  1. 启动 SQL Server 2019 的安装向导。

  2. 在“安装”选项卡上,选择“全新 SQL Server 独立安装或向现有安装添加功能” 。

  3. 在“功能选择” 页上,选择以下选项:

    • 数据库引擎服务

      要将语言扩展与 SQL Server 结合使用,必须安装数据库引擎的实例。 可以使用新的或现有实例。

    • 机器学习服务和语言扩展

      选择“机器学习服务和语言扩展”。 请勿选择 R,因为稍后将安装自定义 R 运行时。

      SQL Server 2019 Language Extensions setup.

  4. 在“准备安装”页面上,验证是否已包括这些选择,然后选择“安装” 。

    • 数据库引擎服务
    • 机器学习服务和语言扩展
  5. 安装完成后,重新启动计算机(如果要求这样做)。

重要

如果使用语言扩展安装 SQL Server 2019 的新实例,则在继续下一步之前,请安装累积更新 (CU) 3 或更高版本

安装 R

下载并安装将用作自定义运行时的 R 版本。 R 版本 3.3 或更高版本受支持。

  1. 下载 R 版本 3.3 或更高版本

  2. 运行 R 安装程序。

  3. 请记下 R 的安装路径。 例如,在本文中,该路径为 C:\Program Files\R\R-4.0.3

    R setup

更新系统环境变量

请按照以下步骤修改 PATH 系统环境变量。

  1. 在 Windows 搜索框中,搜索“编辑系统环境变量”,然后打开它。

  2. 在“高级”选项卡中,选择“环境变量” 。

  3. 修改“PATH”系统环境变量。

    选择“PATH”并单击“编辑”。

    选择“新建”并添加指向 R 安装路径中的 \bin\x64 文件夹的路径。 例如,C:\Program Files\R\R-4.0.3\bin\x64

安装 Rcpp 包

执行以下步骤安装 Rcpp 包。

  1. 启动权限已提升的命令提示符(以管理员身份运行)。

  2. 从命令提示符下启动 R。 运行 R 安装路径中的文件夹下的 \bin\R.exe。 例如,C:\Program Files\R\R-4.0.3\bin\R.exe

    "C:\Program Files\R\R-4.0.3\bin\R.exe"
    
  3. 运行以下脚本,将 Rcpp 包安装到 R 安装路径中的 \library 文件夹下。 例如,C:\Program Files\R\R-4.0.3\library

    install.packages("Rcpp", lib="C:\\Program Files\\R\\R-4.0.3\\library");
    

授予对 R 文件夹的访问权限

注意

如果已在默认位置 C:\Program Files\R\R-version(例如 C:\Program Files\R\R-4.0.3)安装 R,则可以跳过此步骤。

从权限已提升的新命令提示符下运行以下 icacls 命令,以向 SQL Server Launchpad 服务用户名和 SID S-1-15-2-1(所有应用程序包)授予读取和执行访问权限。 Launchpad 服务用户名的格式为 NT Service\MSSQLLAUNCHPAD$INSTANCENAME,其中 INSTANCENAME 是 SQL Server 的实例名称。

这些命令将以递归方式授予给定目录路径下的所有文件和文件夹的访问权限。

  1. 向 SQL Server Launchpad 服务用户名授予对 R 安装路径的权限。 例如,C:\Program Files\R\R-4.0.3

    icacls "C:\Program Files\R\R-4.0.3" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T
    

    对于命名实例,针对名为 SQL01 的实例的命令将为 icacls "C:\Program Files\R\R-4.0.3" /grant "NT Service\MSSQLLAUNCHPAD$SQL01":(OI)(CI)RX /T

  2. 向 SID S-1-15-2-1 授予对 R 安装路径的权限。 例如,C:\Program Files\R\R-4.0.3

    icacls "C:\Program Files\R\R-4.0.3" /grant *S-1-15-2-1:(OI)(CI)RX /T
    

    上述命令向计算机 SID S-1-15-2-1 授予权限,这等同于英语版本的 Windows 上的 ALL APPLICATION PACKAGES。 此外,也可以在英语版本的 Windows 上使用 icacls "C:\Program Files\R\R-4.0.3" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T

重新启动 SQL Server Launchpad

请按照以下步骤重新启动 SQL Server Launchpad 服务。

  1. 打开“SQL Server 配置管理器”。

  2. 在“SQL Server 服务”下,右键单击“SQL Server Launchpad (MSSQLSERVER)”,然后选择“重启”。 如果使用命名实例,则将显示实例名称,而不是 (MSSQLSERVER)。

注册语言扩展

按照以下步骤下载并注册 R 语言扩展,该扩展用于 R 自定义运行时。

  1. SQL Server 语言扩展 GitHub 存储库下载 R-lang-extension-windows-release.zip 文件。

    或者,可以在开发或测试环境中使用调试版本 (R-lang-extension-windows-debug.zip)。 调试版本提供详细的日志记录信息来调查任何错误,不建议用于生产环境。

  2. 使用 Azure Data Studio 连接到 SQL Server 实例,并运行以下 T-SQL 命令,以便使用 CREATE EXTERNAL LANGUAGE 注册 R 语言扩展。

    修改此语句中的路径,以反映下载的语言扩展 zip 文件 (R-lang-extension-windows-release.zip) 的位置和 R 安装的位置 (C:\\Program Files\\R\\R-4.0.3)。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'C:\path\to\R-lang-extension-windows-release.zip', 
        FILE_NAME = 'libRExtension.dll',
        ENVIRONMENT_VARIABLES = N'{"R_HOME": "C:\\Program Files\\R\\R-4.0.3"}');
    GO
    

    为要使用 R 语言扩展的每个数据库执行该语句。

    注意

    R 是保留字,不能用作新的外部语言名称。 请改用其他名称。 例如,上面的语句使用 myR。

必备条件

安装 R 自定义运行时之前,请安装以下各项:

安装语言扩展

注意

如果已在 SQL Server 2019 上安装机器学习服务,则已安装用于语言扩展的 mssql-server-extensibility 包,你可以跳过此步骤。

运行以下命令以在 Ubuntu Linux 上安装 SQL Server 语言扩展,该扩展用于 R 自定义运行时。

  1. 如果可以,请在安装之前运行此命令以刷新系统中的包。

    # Install as root or sudo
    sudo apt-get update
    
  2. 使用此命令安装 mssql-server-extensibility。

    # Install as root or sudo
    sudo apt-get install mssql-server-extensibility
    

安装 R

  1. 如果安装了机器学习服务,则已在 /opt/microsoft/ropen/3.5.2/lib64/R 中安装 R。 如果要继续使用该路径作为 R_HOME,则可以跳过此步骤。

    如果要使用 R 的其他运行时,首先需要删除 microsoft-r-open-mro,然后再继续安装新版本。

    sudo apt remove microsoft-r-open-mro-3.5.2
    
  2. 安装适用于 Ubuntu 的 R(3.3 或更高版本)。 默认情况下,R 安装在 /usr/lib/R 中。 此路径是 R_HOME。 如果在其他位置安装 R,请记下该路径作为你的 R_HOME。

    下面是适用于 Ubuntu 的示例说明。 为你的 R 版本更改以下存储库 URL。

    export DEBIAN_FRONTEND=noninteractive
    sudo apt-get update
    sudo apt-get --no-install-recommends -y install curl zip unzip apt-transport-https libstdc++6
    
    # Add R CRAN repository. This repository works for R 4.0.x.
    #
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
    sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu xenial-cran40/'
    sudo apt-get update
    
    # Install R runtime.
    #
    sudo apt-get -y install r-base-core
    

R 的自定义安装

注意

如果已在默认位置 /usr/lib/R 安装了 R,则可以跳过此部分,并转到安装 Rcpp 包部分。

更新环境变量

首先,编辑 mssql-launchpadd 服务,将 R_HOME 环境变量添加到 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 文件

  1. 用 systemctl 打开文件

    sudo systemctl edit mssql-launchpadd
    
  2. 在打开的 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 文件中插入以下文本。 将 R_HOME 的值设置为自定义 R 安装路径。

    [Service]
    Environment="R_HOME=<path to R>"
    
  3. 保存并关闭。

接下来,确保可加载 libR.so

  1. 在 /etc/ld.so.conf.d 中创建 custom-r.conf 文件。

    sudo vi /etc/ld.so.conf.d/custom-r.conf
    
  2. 在打开的文件中,添加从自定义 R 安装到 libR.so 的路径。

    <path to the R lib>
    
  3. 保存新文件并关闭编辑器。

  4. 运行 ldconfig,然后运行以下命令,并检查是否可以找到所有依赖库,来验证是否可以加载 libR.so。

    sudo ldconfig
    ldd <path to the R lib>/libR.so
    

授权访问自定义 R 安装文件夹

/var/opt/mssql/mssql.conf 文件的扩展性部分中的 datadirectories 选项设置为自定义 R 安装。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

重启 mssql-launchpadd 服务

运行以下命令重启 mssql-launchpadd。

sudo systemctl restart mssql-launchpadd

安装 Rcpp 包

执行以下步骤安装 Rcpp 包。

  1. 从 shell 启动 R:

    sudo ${R_HOME}/bin/R
    
  2. 运行以下脚本以将 Rcpp 包安装到 ${R_HOME}\library 文件夹中。

install.packages("Rcpp", lib = "${R_HOME}/library");

注册语言扩展

按照以下步骤下载并注册 R 语言扩展,该扩展用于 R 自定义运行时。

  1. SQL Server 语言扩展 GitHub 存储库下载 R-lang-extension-linux-release.zip 文件。

    或者,可以在开发或测试环境中使用调试版本 (R-lang-extension-linux-debug.zip)。 调试版本提供详细的日志记录信息来调查任何错误,不建议用于生产环境。

  2. 使用 Azure Data Studio 连接到 SQL Server 实例,并运行以下 T-SQL 命令,以便使用 CREATE EXTERNAL LANGUAGE 注册 R 语言扩展。

    修改此语句中的路径,以反映下载的语言扩展 zip 文件 (R-lang-extension-linux-release.zip) 的位置。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
    GO
    

    为要使用 R 语言扩展的每个数据库执行该语句。

    注意

    R 是保留字,不能用作新的外部语言名称。 请改用其他名称。 例如,上面的语句使用 myR。

必备条件

安装 R 自定义运行时之前,请安装以下各项:

  • RExtension 需要 GLIBCXX_3.4.20。 请确保 Red Hat Enterprise Linux (RHEL) 上安装的 libstdc++.so.6 版本提供它。

安装语言扩展

注意

如果已在 SQL Server 2019 上安装机器学习服务,则已安装用于语言扩展的 mssql-server-extensibility 包,你可以跳过此步骤。

运行以下命令以在 Red Hat Enterprise Linux (RHEL) 上安装 SQL Server 语言扩展,该扩展用于 R 自定义运行时。

# Install as root or sudo
sudo yum install mssql-server-extensibility

安装 R

  1. 如果安装了机器学习服务,则已在 /opt/microsoft/ropen/3.5.2/lib64/R 中安装 R。 如果要继续使用该路径作为 R_HOME,则可以跳过此步骤。

    如果要使用 R 的其他运行时,首先需要删除 microsoft-r-open-mro,然后再继续安装新版本。

    sudo yum erase microsoft-r-open-mro-3.5.2
    
  2. 安装用于 Red Hat Enterprise Linux (RHEL) 的 R(3.3 或更高版本)。 默认情况下,R 安装在 /usr/lib64/R 中。 此路径是 R_HOME。 如果在其他位置安装 R,请记下该路径作为你的 R_HOME。

    sudo yum install -y R
    

R 的自定义安装

注意

如果已在默认位置 /usr/lib/R 安装了 R,则可以跳过此部分,并转到安装 Rcpp 包部分。

更新环境变量

首先,编辑 mssql-launchpadd 服务,将 R_HOME 环境变量添加到 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 文件

  1. 用 systemctl 打开文件

    sudo systemctl edit mssql-launchpadd
    
  2. 在打开的 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 文件中插入以下文本。 将 R_HOME 的值设置为自定义 R 安装路径。

    [Service]
    Environment="R_HOME=<path to R>"
    
  3. 保存并关闭。

接下来,确保可加载 libR.so

  1. 在 /etc/ld.so.conf.d 中创建 custom-r.conf 文件。

    sudo vi /etc/ld.so.conf.d/custom-r.conf
    
  2. 在打开的文件中,添加从自定义 R 安装到 libR.so 的路径。

    <path to the R lib>
    
  3. 保存新文件并关闭编辑器。

  4. 运行 ldconfig,然后运行以下命令,并检查是否可以找到所有依赖库,来验证是否可以加载 libR.so。

    sudo ldconfig
    ldd <path to the R lib>/libR.so
    

授权访问自定义 R 安装文件夹

/var/opt/mssql/mssql.conf 文件的扩展性部分中的 datadirectories 选项设置为自定义 R 安装。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

重启 mssql-launchpadd 服务

运行以下命令重启 mssql-launchpadd。

sudo systemctl restart mssql-launchpadd

安装 Rcpp 包

执行以下步骤安装 Rcpp 包。

  1. 从 shell 启动 R:

    sudo ${R_HOME}/bin/R
    
  2. 运行以下脚本以将 Rcpp 包安装到 ${R_HOME}\library 文件夹中。

install.packages("Rcpp", lib = "${R_HOME}/library");

注册语言扩展

按照以下步骤下载并注册 R 语言扩展,该扩展用于 R 自定义运行时。

  1. SQL Server 语言扩展 GitHub 存储库下载 R-lang-extension-linux-release.zip 文件。

    或者,可以在开发或测试环境中使用调试版本 (R-lang-extension-linux-debug.zip)。 调试版本提供详细的日志记录信息来调查任何错误,不建议用于生产环境。

  2. 使用 Azure Data Studio 连接到 SQL Server 实例,并运行以下 T-SQL 命令,以便使用 CREATE EXTERNAL LANGUAGE 注册 R 语言扩展。

    修改此语句中的路径,以反映下载的语言扩展 zip 文件 (R-lang-extension-linux-release.zip) 的位置。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
    GO
    

    为要使用 R 语言扩展的每个数据库执行该语句。

    注意

    R 是保留字,不能用作新的外部语言名称。 请改用其他名称。 例如,上面的语句使用 myR。

必备条件

安装 R 自定义运行时之前,请安装以下各项:

安装语言扩展

注意

如果已在 SQL Server 2019 上安装机器学习服务,则已安装用于语言扩展的 mssql-server-extensibility 包,你可以跳过此步骤。

运行以下命令以在 SUSE Linux Enterprise Server (SLES) 上安装 SQL Server 语言扩展,该扩展用于 R 自定义运行时。

# Install as root or sudo
sudo zypper install mssql-server-extensibility

安装 R

  1. 如果安装了机器学习服务,则已在 /opt/microsoft/ropen/3.5.2/lib64/R 中安装 R。 如果要继续使用该路径作为 R_HOME,则可以跳过此步骤。

    如果要使用 R 的其他运行时,首先需要删除 microsoft-r-open-mro,然后再继续安装新版本。

    sudo zypper remove microsoft-r-open-mro-3.4.4
    
  2. 安装用于 SUSE Linux Enterprise Server (SLES) 的 R(3.3 或更高版本)。 默认情况下,R 安装在 /usr/lib64/R 中。 此路径是 R_HOME。 如果在其他位置安装 R,请记下该路径作为你的 R_HOME。

    请按照以下步骤安装 R:

    sudo zypper ar -f http://download.opensuse.org/repositories/devel:/languages:/R:/patched/openSUSE_12.3/ R-patched
    sudo zypper --gpg-auto-import-keys ref
    sudo zypper install R-core-libs R-core R-core-doc R-patched
    

    如果不需要 R-tcltk-3.6.1,则可以忽略有关此包的警告。

安装 gcc-c++

在 SUSE Linux Enterprise Server (SLES) 上安装 gcc-c++。 它用于稍后安装的 Rcpp。

sudo zypper install gcc-c++

R 的自定义安装

注意

如果已在默认位置 /usr/lib/R 安装了 R,则可以跳过此部分,并转到安装 Rcpp 包部分。

更新环境变量

首先,编辑 mssql-launchpadd 服务,将 R_HOME 环境变量添加到 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 文件

  1. 用 systemctl 打开文件

    sudo systemctl edit mssql-launchpadd
    
  2. 在打开的 /etc/systemd/system/mssql-launchpadd.service.d/override.conf 文件中插入以下文本。 将 R_HOME 的值设置为自定义 R 安装路径。

    [Service]
    Environment="R_HOME=<path to R>"
    
  3. 保存并关闭。

接下来,确保可加载 libR.so

  1. 在 /etc/ld.so.conf.d 中创建 custom-r.conf 文件。

    sudo vi /etc/ld.so.conf.d/custom-r.conf
    
  2. 在打开的文件中,添加从自定义 R 安装到 libR.so 的路径。

    <path to the R lib>
    
  3. 保存新文件并关闭编辑器。

  4. 运行 ldconfig,然后运行以下命令,并检查是否可以找到所有依赖库,来验证是否可以加载 libR.so。

    sudo ldconfig
    ldd <path to the R lib>/libR.so
    

授权访问自定义 R 安装文件夹

/var/opt/mssql/mssql.conf 文件的扩展性部分中的 datadirectories 选项设置为自定义 R 安装。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to R>

重启 mssql-launchpadd 服务

运行以下命令重启 mssql-launchpadd。

sudo systemctl restart mssql-launchpadd

安装 Rcpp 包

执行以下步骤安装 Rcpp 包。

  1. 从 shell 启动 R:

    sudo ${R_HOME}/bin/R
    
  2. 运行以下脚本以将 Rcpp 包安装到 ${R_HOME}\library 文件夹中。

install.packages("Rcpp", lib = "${R_HOME}/library");

注册语言扩展

按照以下步骤下载并注册 R 语言扩展,该扩展用于 R 自定义运行时。

  1. SQL Server 语言扩展 GitHub 存储库下载 R-lang-extension-linux-release.zip 文件。

    或者,可以在开发或测试环境中使用调试版本 (R-lang-extension-linux-debug.zip)。 调试版本提供详细的日志记录信息来调查任何错误,不建议用于生产环境。

  2. 使用 Azure Data Studio 连接到 SQL Server 实例,并运行以下 T-SQL 命令,以便使用 CREATE EXTERNAL LANGUAGE 注册 R 语言扩展。

    修改此语句中的路径,以反映下载的语言扩展 zip 文件 (R-lang-extension-linux-release.zip) 的位置。

    CREATE EXTERNAL LANGUAGE [myR]
    FROM (CONTENT = N'/path/to/R-lang-extension-linux-release.zip', FILE_NAME = 'libRExtension.so.1.1');
    GO
    

    为要使用 R 语言扩展的每个数据库执行该语句。

    注意

    R 是保留字,不能用作新的外部语言名称。 请改用其他名称。 例如,上面的语句使用 myR。

启用外部脚本

可以通过存储过程 sp_execute_external script 执行 R 外部脚本。

若要启用外部脚本,请使用 Azure Data Studio 执行下面的语句。

sp_configure 'external scripts enabled', 1;
RECONFIGURE WITH OVERRIDE;  

验证安装

使用以下 SQL 脚本验证 R 自定义运行时的安装和功能。 在下面的示例脚本中,myR 用作语言名称,因为无法为自定义运行时输入默认语言名称 R

EXEC sp_execute_external_script
    @language =N'myR',
    @script=N'
print(R.home());
print(file.path(R.home("bin"), "R"));
print(R.version);
print("Hello RExtension!");'

已知问题

如果你使用 SQL Server 机器学习服务中提供的 R 运行时(通过在注册语言扩展时将 R_HOME 设置为 C:\Program Files\Microsoft SQL Server\MSSQL15.<INSTANCE_NAME>\R_SERVICES),则可能会在执行具有 sp_execute_external 脚本的任何外部自定义 R 脚本时遇到以下错误。

错误:cons 内存已用完(已达到限制?)

若要解决此问题,请执行下列操作:

  1. 设置环境变量 R_NSIZE,指示固定大小对象的数量 (cons cells) 为一个合理的值,例如 200000
  2. 重启启动板服务并重试脚本执行。

已知问题

libstdc++.so.6 并非正确的版本时,你将看到以下错误:

Exthost: 无法加载扩展 /lib64/libstdc++.so.6: 版本 “GLIBCXX_3.4.20” 找不到(/home/mssql_satellite/externallanguagessandboxpath/libRExtension.so.1.1 的必需项)

后续步骤