1

我正在尝试使用 Azure SQLDW 中的 Polybase 来访问 Cloudera 集群中 HDFS 中的分隔文件(在 Azure 中作为 IaaS 配置)但是我遇到了以下错误:

消息 105019,级别 16,状态 1,第 40 行外部表访问因内部错误而失败:“调用 HdfsBridge_IsDirExist 时引发 Java 异常。Java 异常消息:Call From DB55/10.0.0.59 to 10 .. . :8020 套接字超时异常失败:org.apache.hadoop.net.ConnectTimeoutException:等待通道准备好连接时超时 20000 毫秒。ch : java.nio.channels.SocketChannel[connection-pending remote=10.56.140.31/10.56.140.31:8020]; 有关更多详细信息,请参阅: http ://wiki.apache.org/hadoop/SocketTimeout:错误 [从 DB55/10.0.0.59 调用到 10.56.140.31:8020 在套接字超时异常上失败:org.apache.hadoop.net.ConnectTimeoutException:等待通道准备好连接时出现 20000 毫秒超时。ch : java.nio.channels.SocketChannel[connection-pending remote=10. . . /10。. .*:8020]; 有关更多详细信息,请参阅: http://wiki.apache.org/hadoop/SocketTimeout]访问外部文件时发生。

我使用了以下 Polybase T-SQL 脚本:

创建主密钥;

使用 IDENTITY = 'user_name',Secret = 'password' 创建数据库范围凭证 HadoopUser1;

创建外部数据源 MyHadoopCluster (
TYPE = HADOOP,
LOCATION ='hdfs://10 ... : 8020',
RESOURCE_MANAGER_LOCATION = '10
... : 8032',
CREDENTIAL = HadoopUser1);

创建外部文件格式 TextFile WITH ( FORMAT_TYPE = DelimitedText, FORMAT_OPTIONS (FIELD_TERMINATOR = ',') );

创建外部表 dbo.PolyCloudera (Id INT NOT NULL, Number INT NOT NULL, ZIPCODE INT NOT NULL) WITH (LOCATION='/user/hive/warehouse/sample_poly', DATA_SOURCE=MyHadoopCluster, FILE_FORMAT=TextFile);

Cloudera 集群和 Azure SQLDW 之间没有连接问题(因为我能够使用 BCP、JDBC 将数据从 Cloudera 集群摄取到 SQLDW 实例) Cloudera 集群尚未进行 kerberized。数据库范围凭据中指定的用户名和密码存在于 Cloudera Cluster 的底层 Linux 文件系统中。在这件事上的任何帮助将不胜感激。

4

1 回答 1

3

Azure SQL DW 中的 PolyBase 目前仅支持 Blob 存储和 Azure Data Lake Store。目前不支持连接HDFS。

请注意,文档在此处的任何 hdfs 示例中均未提及 Azure SQL DW :

-- 仅限 PolyBase:Hadoop 集群作为数据源
--(在 SQL Server 2016 上)创建外部数据源 data_source_name
WITH (
TYPE = HADOOP, LOCATION = 'hdfs://NameNode_URI[:port]'
[, RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:端口]' ]
[, CREDENTIAL = credential_name ] ) [;]

于 2017-03-24T02:29:33.740 回答