本文介绍如何使用 Databricks JDBC 驱动程序 (OSS) 配置与 Databricks 的连接。
配置连接
若要使用 JDBC 驱动程序连接到 Azure Databricks 工作区,需要指定各种连接设置,例如 Azure Databricks 工作区的服务器主机名、计算资源设置和身份验证凭据以连接到工作区。
可以在 JDBC 连接 URL 上设置这些属性的值,设置并将其传递到 DriverManager.getConnection 方法,或结合两者。 请参阅提供程序的文档,以了解如何最好地使用特定应用、客户端、SDK、API 或 SQL 工具进行连接。
JDBC 连接 URL 必须采用以下格式。 属性不区分大小写。
jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];...
或者,使用 java.util.Properties
类或组合指定设置:
String url = "jdbc:databricks://<server-hostname>:<port>/<schema>";
Properties properties = new java.util.Properties();
properties.put("<property1>", "<value1");
properties.put("<property2>", "<value2");
// ...
Connection conn = DriverManager.getConnection(url, properties);
String url = "jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];";
Connection conn = DriverManager.getConnection(url, "token", "12345678901234667890abcdabcd");
下表描述了连接 URL 的元素。
有关其他属性的信息,包括身份验证属性、SQL 配置属性和日志记录属性,请参阅 支持的连接属性。
注释
URL 元素和属性不区分大小写。
URL 元素或属性 | DESCRIPTION |
---|---|
<server-hostname> |
Azure Databricks 计算资源的“服务器主机名”值。 |
<port> |
Azure Databricks 计算资源的端口值。 默认值是 443 。 |
<schema> |
架构的名称。 此外,你还可以设置 ConnSchema 属性。 请参阅 支持的连接属性。 |
httpPath |
Azure Databricks 计算资源的 HTTP 路径值。 连接器将 httpPath 值追加到连接 URL 中指定的主机和端口,形成要连接的 HTTP 地址。 例如,若要连接到 HTTP 地址 http://localhost:10002/cliservice ,请使用以下连接 URL:jdbc:databricks://localhost:10002;httpPath=cliservice |
若要获取 Azure Databricks 群集的 JDBC 连接 URL,请执行以下操作:
登录到 Azure Databricks 工作区。
在边栏中,单击“计算”,然后单击目标群集的名称。
在“配置”选项卡上,展开“高级选项”。
单击“JDBC/ODBC”选项卡。
复制 JDBC URL 以用作 JDBC 连接 URL,或从“服务器主机名”、“端口”和“HTTP 路径”字段中的值构造 URL。
若要获取 Databricks SQL 仓库的 JDBC 连接 URL,请执行以下操作:
登录到 Azure Databricks 工作区。
在边栏中,单击“SQL 仓库”,然后单击目标仓库的名称。
单击“连接详细信息”选项卡。
复制 JDBC URL 以用作 JDBC 连接 URL,或从“服务器主机名”、“端口”和“HTTP 路径”字段中的值构造 URL。
配置代理连接
可以将连接器配置为通过代理服务器进行连接,而不是直接连接到 Databricks。 通过代理服务器进行连接时,连接器支持基本身份验证和 SPNEGO 身份验证。
配置代理连接:
将
UseProxy
属性设置为 1。若要在系统级别配置代理设置,请将
UseSystemProxy
属性设置为 1,否则按以下方式为驱动程序设置该属性:- 将
ProxyHost
属性设置为代理服务器的 IP 地址或主机名。 - 将
ProxyPort
属性设置为代理服务器用于侦听客户端连接的端口。 - 将
ProxyIgnoreList
属性设置为逗号分隔主机名。 - 使用代理服务器进行身份验证:
- 使用基本身份验证
- 将
ProxyAuth
属性设置为 1。 - 将
ProxyUID
属性设置为用于访问服务器的用户名。 - 将
ProxyPWD
属性设置为用于访问服务器的密码。
- 将
- 若要使用 SPNEGO 身份验证,请执行以下作:
- 在系统级别验证 kerberos 主体身份。
- 将
ProxyAuth
属性设置为 2。
- 使用基本身份验证
- 将
若要专门对 CloudFetch 使用不同的代理,请使用以下属性执行上述步骤:UseCFProxy
、、、CFProxyHost
CFProxyPort
、、 CFProxyAuth
CFProxyUID
CFProxyPwd
配置 SSL
如果要连接到启用了安全套接字层 (SSL) 的 Databricks,则可以配置连接器以连接到已启用 SSL 的套接字。 通过 SSL 连接到服务器时,连接器使用单向身份验证来验证服务器的标识。
单向身份验证需要签名的受信任 SSL 证书来验证服务器的标识。 可以将连接器配置为访问包含相应证书的特定 TrustStore。 如果未指定 TrustStore,连接器将使用名为 jssecacerts 的默认 Java TrustStore。 如果 jssecacerts 不可用,则连接器将改用 cacerts。
配置 SSL:
将 SSL 属性设置为 1。
如果不使用默认 Java 信任存储之一,请创建信任存储并配置连接器以使用它:
- 创建包含已签名的受信任服务器证书的信任存储。
- 将 SSLTrustStore 属性设置为 TrustStore 的完整路径。
- 将 SSLTrustStorePwd 属性设置为用于访问 TrustStore 的密码。
- 如果 TrustStore 不是 JKS TrustStore,请将 SSLTrustStoreType 属性设置为正确的类型。 支持的类型包括:
- SSLTrustStoreType=BCFKS (BouncyCastle FIPS 密钥存储)
- SSLTrustStoreType=PKCS12 (公钥加密标准 #12)
在某些情况下,如果要更改证书吊销策略,连接器将提供以下参数:
- 如果设置为 0,CheckCertRevocation 属性将接受已吊销的证书(默认值为 1)
- 如果将 AcceptUndeterminedRevocation 属性设置为 1,该属性将接受我们无法确定吊销状态的证书(例如,CRLDP 不可访问或超时等)。此属性的默认值为 0
对驱动程序进行身份验证
可以使用以下身份验证机制之一对 JDBC 驱动程序连接进行身份验证:
OAuth 用户到计算机 (U2M) 身份验证
JDBC 驱动程序支持 OAuth 用户到机器 (U2M) 身份验证,以通过实时人工登录和同意来验证目标 Azure Databricks 用户帐户。 这也称为基于浏览器的 OAuth 身份验证。
Azure Databricks 已为客户了创建 OAuth 客户端 ID databricks-sql-jdbc
。 这也是 JDBC 驱动程序中使用的默认 OAuth 客户端 ID。 若要配置 OAuth U2M 身份验证,只需将以下属性添加到现有的 JDBC 连接 URL 或 java.util.Properties
对象:
资产 | 价值 |
---|---|
AuthMech |
11 |
Auth_Flow |
2 |
TokenCachePassPhrase |
用于加密已缓存的 OAuth U2M 凭据的密码。 这可以防止重复基于浏览器的身份验证。 若要选择退出令牌缓存,请设置为 EnableTokenCache 0 。 |
OAuth 计算机到计算机 (M2M) 身份验证
JDBC 驱动程序支持使用以下主体或标识之一进行 OAuth 计算机到计算机(M2M)身份验证,也称为 OAuth 2.0 客户端凭据 身份验证。 请参阅通过服务主体使用 OAuth 授权对 Azure Databricks 资源进行无须人工干预的访问。
- 一个 Databricks 服务主体
- 一个 Azure 托管服务主体
- 一个 Azure 托管标识(系统分配的或用户分配的)
使用 Databricks 托管服务主体的 M2M
若要使用 Databricks 托管服务主体配置身份验证,请执行以下操作:
创建一个 Databricks 托管服务主体并将其分配给 Databricks 帐户和工作区。
为服务主体创建 Databricks OAuth 机密。 请参阅 OAuth M2M 设置指南。
将以下属性添加到你现有的 JDBC 连接 URL 或
java.util.Properties
对象:
资产 | 价值 |
---|---|
AuthMech |
11 |
Auth_Flow |
1 |
OAuth2ClientID |
服务主体的“应用程序(客户端)ID”值。 |
OAuth2Secret |
服务主体的 Azure Databricks OAuth 机密。 |
使用 Azure 托管服务主体的 M2M
若要使用 Azure 托管服务主体配置身份验证,请执行以下作:
为服务主体创建 Databricks OAuth 机密。 请参阅 OAuth M2M 设置指南。
将以下属性添加到你现有的 JDBC 连接 URL 或
java.util.Properties
对象:
资产 | 价值 |
---|---|
AuthMech |
11 |
Auth_Flow |
1 |
OAuth2ClientID |
服务主体的“应用程序(客户端)ID”值。 |
AzureTenantID |
在 Azure Active Directory 中找到的 Azure 租户 ID 。 |
OAuth2Secret |
服务主体的 Azure Databricks OAuth 机密。 |
使用 Azure 托管标识的 M2M
若要使用 Azure 托管标识配置身份验证,请执行以下作:
将以下属性添加到你现有的 JDBC 连接 URL 或
java.util.Properties
对象:
资产 | 价值 |
---|---|
AuthMech |
11 |
Auth_Flow |
3 |
OAuth2ClientID |
托管标识的客户端 ID。 仅当使用用户分配的托管标识时,此参数才是必需的。 |
Azure_workspace_resource_id |
Databricks 工作区的 Azure 资源 ID |
Azure Databricks 个人访问令牌
要使用 Azure Databricks 个人访问令牌对 JDBC 驱动程序连接进行身份验证,请将以下属性添加到 JDBC 连接 URL 或 java.util.Properties
对象:
资产 | 价值 |
---|---|
AuthMech |
3 |
user |
值 token ,字符串形式。 |
PWD 或 password |
你的 Azure Databricks 个人访问令牌值,以字符串形式。 |