我正在尝试使用azure sqldw中的polybase访问cloudera集群中hdfs中的分隔文件(在azure中设置为iaas),但是遇到以下错误:
msg 105019,level 16,state 1,line 40由于内部错误,外部表访问失败:“调用hdfsbridge\u isdirexist时引发java异常。java异常消息:从db55/10.0.0.59到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:error[从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脚本:
创建主密钥;
创建数据库范围的凭证hadoopuser1,标识='用户名',密码='密码';
创建外部数据源myhadoopcluster(
类型=hadoop,
位置='hdfs://10...:8020',
资源管理器位置='10…:8032',
凭证=hadoopuser1);
使用(format_type=delimitedtext,format_options(field_terminator=',')创建外部文件格式textfile;
使用(location='/user/hive/warehouse/sample\poly',data\u source=myhadoopcluster,file\u format=textfile)创建外部表dbo.polycloudera(id int not null,number int not null,zipcode int not null);
cloudera集群和azuresqldw之间没有连接问题(因为我能够使用bcp、jdbc将数据从cloudera集群摄取到sqldw示例),cloudera集群还没有被kerberized。在数据库作用域凭据中指定的用户名和密码存在于cloudera集群的底层linux文件系统中。在这件事上任何帮助都将不胜感激。
1条答案
按热度按时间bis0qfac1#
azuresqldw中的polybase目前只支持blob存储和azuredatalake存储。目前不支持连接到hdfs。
注意文档中没有提到任何hdfs示例上的azure sql dw:
--仅polybase:hadoop集群作为数据源
--(在sql server 2016上)创建外部数据源数据源名称
与(
type=hadoop,location='hdfs://namenode_uri[:端口]'
[,resource\u manager\u location='资源管理器\u uri[:端口]']
[,credential=credential_name])[;]