使用 Polybase 在 SQL Server 2016 中创建外部表的问题

Posted

技术标签:

【中文标题】使用 Polybase 在 SQL Server 2016 中创建外部表的问题【英文标题】:Problem with creating external tables in SQL Server 2016 using Polybase 【发布时间】:2022-01-02 02:03:49 【问题描述】:

创建外部表时显示错误。谁能告诉我 core-site.xml 或其他文件中的 Hadoop 设置是否有问题?端口 9000 对于 SQL Server 端的设置是否正确,还是应该使用另一个?

一般架构概述:

    SQL Server 和 Hadoop 在其他 Windows 服务器上运行。 Ping 检查后,两台服务器可以互相看到。 在 SQL Server 中,TCP 传输设置正确,防火墙设置正确。

错误

消息 105036,第 16 级,状态 1,第 33 行 由于内部错误引发了“JNI.JavaExceptionCheckException”类型的异常,无法检索外部数据源信息。:错误 [Call From xxxxxxxxxxxx/00.000.000.000 to xxxxxx.xx.dev.net:9000 failed on connection exception: java .net.ConnectException:连接被拒绝:没有更多信息;有关详细信息,请参阅:>http://wiki.apache.org/hadoop/ConnectionRefused] 在访问外部文件时发生..

Hadoop core-site.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property> 
            <name>hadoop.security.authorization</name> 
            <value>false</value> 
    </property> 
</configuration>

SQL Server 中外部源的设置。

CREATE EXTERNAL DATA SOURCE MyHadoop
WITH
  (  LOCATION = 'hdfs://00.000.000.000:9000' 
    ,RESOURCE_MANAGER_LOCATION = '00.000.000.000:9000'
    ,TYPE = HADOOP
  ) ;

SQL Server 中的文件格式。

CREATE EXTERNAL FILE FORMAT csvformat 
WITH ( 
    FORMAT_TYPE = DELIMITEDTEXT, 
    FORMAT_OPTIONS (FIELD_TERMINATOR =';') 
);

SQL Server 中的外部表(运行此代码后出现错误)

CREATE EXTERNAL TABLE [EX_SQLPolybase]
(
    id [int],
    [Name] varchar(50)
   )
WITH 
(
     DATA_SOURCE = [MyHadoop]
    ,LOCATION = N'[Test].dbo.Test_tbl'
    ,FILE_FORMAT = csvformat 
)

【问题讨论】:

【参考方案1】:

你需要从头开始,有很多东西需要修改:

    检查 Hadoop 的 Polybase 配置和安全性:https://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-configuration 确保通信没有阻塞,可以使用powercat如下:powercat -c 00.000.000.000 -p 8020 -t 1 -Verbose -d 您是否配置了“hadoop 连接”服务器参数? 修改 HDFS 相关文件后是否重启过 SQL Server 服务? 您是否在 SQL Server 中创建了主密钥加密? 您是否尝试过在不指定资源管理器位置的情况下创建外部数据源? 外部表规范错误,LOCATION 是 HDFS 中的 Unix 路径,类似于:LOCATION='/user/pdw_user/input' 您是否在 Linux 中创建了可以访问“位置”路径的用户“pdw_user”?

详细解释和附加信息可以在这里找到:https://bpbonline.com/products/hands-on-data-virtualization-with-polybase

【讨论】:

以上是关于使用 Polybase 在 SQL Server 2016 中创建外部表的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure SQL Server 上安装和配置 Polybase - 找不到存储过程“sp_configure”

SQL Server 2019 中 Polybase 外部表的行级安全性可能吗?

SQL Server 2016 使用 sql 用户通过 azure blob 存储上的 polybase 访问外部表 - 访问被拒绝,因为没有登录映射

Polybase 外部表与 OPENROWSET 无服务器 sql 池架构

无法在 SQL 2019 Linux 上使用 PolyBase 通过 ODBC 查询 AS400

Azure SQL 数据仓库 (Synapse Analytics) 使用 ORC 表的 Polybase 性能