当前位置: 首页 > 知识库问答 >
问题:

从EMR spark连接到EMR presto-连接失败

邵宏达
2023-03-14

我遇到了从一个火花运行的AWS EMR集群连接到另一个立即运行的AWS EMR集群的问题。

用python编写的代码是:

jdbcDF = spark.read \
        .format("jdbc") \
        .option("driver", "com.facebook.presto.jdbc.PrestoDriver")\
        .option("url", "jdbc:presto://ec2-xxxxxxxxxxxx.ap-southeast-2.compute.amazonaws.com:8889/hive/data-lake") \
        .option("user", "hadoop") \
        .option("dbtable", "customer") \
        .load()\

通过awsemr部署,使用选项--packages,\'org添加步骤。阿帕奇。spark:spark-streaming-kinesis-asl_2.11:2.4。0,组织。postgresql:postgresql:42.2。9,com。脸谱网。presto:presto jdbc:0.60\',\

部署时会抛出以下错误

线程“main”java中出现异常。朗。反思。组织中未声明的HrowableException。阿帕奇。hadoop。安全用户组信息。doAs(UserGroupInformation.java:1862)位于org。阿帕奇。火花部署斯巴克杜普蒂尔。runAsSparkUser(SparkHadoopUtil.scala:64)位于org。阿帕奇。火花遗嘱执行人。粗颗粒执行器后端$。在org上运行(grossGrainedExecutorBackend.scala:237)。阿帕奇。火花遗嘱执行人。粗颗粒执行器后端$。main(grossGrainedExecutorBackend.scala:330)位于org。阿帕奇。火花遗嘱执行人。粗粒化。main(grossGrainedExecutorBackend.scala)由以下原因引起:org。阿帕奇。火花SparkException:在组织的等待结果中引发异常。阿帕奇。火花util。ThreadUtils$。在org上等待结果(ThreadUtils.scala:226)。阿帕奇。火花rpc。RpcTimeout。在org上等待结果(RpcTimeout.scala:75)。阿帕奇。火花rpc。RpcEnv。组织上的setupEndpointRefByURI(RpcEnv.scala:101)。阿帕奇。火花遗嘱执行人。粗颗粒执行器后端$$anonfun$run$1。在组织上应用$mcV$sp(grossGrainedExecutorBackend.scala:250)。阿帕奇。火花部署SparkHadoopUtil$$anon$2。在org上运行(SparkHadoopUtil.scala:65)。阿帕奇。火花部署SparkHadoopUtil$$anon$2。在java上运行(SparkHadoopUtil.scala:64)。安全访问控制器。javax上的doPrivileged(本机方法)。安全auth。主题doAs(Subject.java:422)位于org。阿帕奇。hadoop。安全用户组信息。doAs(UserGroupInformation.java:1844)。。。另外4个原因是:java。木卫一。IOException:无法连接到ip xxxx xxx。ap-东南-2。计算内部/xxx xxxx:41885在组织。阿帕奇。火花网络客户运输客户工厂。在org上创建客户端(TransportClientFactory.java:245)。阿帕奇。火花网络客户运输客户工厂。在org上创建客户端(TransportClientFactory.java:187)。阿帕奇。火花rpc。内蒂。Nettyrpcev。在org上创建客户端(nettyrpcev.scala:198)。阿帕奇。火花rpc。内蒂。发件箱$$anon$1。请致电org(Outbox.scala:194)。阿帕奇。火花rpc。内蒂。发件箱$$anon$1。在java上调用(Outbox.scala:190)。util。同时发生的未来任务。在java上运行(FutureTask.java:266)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1149)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:624)。朗。丝线。运行(Thread.java:748)由:io引起。内蒂。频道AbstractChannel$AnnotatedConnectionException:连接被拒绝:ip-XXXXXXXX。ap-东南-2。计算内部/xxxxxx:41885,太阳时。尼奥。索克坦林普尔主教。sun上的checkConnect(本机方法)。尼奥。索克坦林普尔主教。在io上完成连接(socketchannelmpl.java:717)。内蒂。频道插座尼奥。NioSocketChannel。io上的doFinishConnect(NioSocketChannel.java:323)。内蒂。频道尼奥。AbstractNioChannel$AbstractNioSafe。在io上完成finishConnect(AbstractNioChannel.java:340)。内蒂。频道尼奥。NioEventLoop。在io上处理SelectedKey(NioEventLoop.java:633)。内蒂。频道尼奥。NioEventLoop。io上的processSelectedKeysOptimized(NioEventLoop.java:580)。内蒂。频道尼奥。NioEventLoop。在io上处理SelectedKeys(NioEventLoop.java:497)。内蒂。频道尼奥。NioEventLoop。在io上运行(NioEventLoop.java:459)。内蒂。util。同时发生的SingleThreadEventExecutor$5。在io上运行(SingleThreadEventExecutor.java:858)。内蒂。util。同时发生的DefaultThreadFactory$DefaultRunnableDecorator。运行(DefaultThreadFactory.java:138)。。。还有一个原因是:java。网ConnectException:连接被拒绝。。。11更多日志类型的末尾:stderr

虽然我已经编辑了上面的IP地址(安全第一),但它与spark slave实例上的内部IP地址相同。它似乎正在连接到自身,并且存在连接问题。

我已经打开了AWS EC2安全组中的端口,允许spark master/slave访问presto实例。

如果有帮助,编写一个快速的节点脚本来测试连接

var client = new presto.Client({
  host: prestoEndpoint,
  user: 'hadoop',
  port: 8889,
});

client.execute({
  query: 'select * from customer',
  catalog: 'hive',
  schema: 'data-lake',
  source: 'nodejs-client',
  state: function(error, query_id, stats) {
     console.log({ message: 'status changed', id: query_id, stats: stats });
  },
  columns: function(error, data) {
     console.log({ resultColumns: data });
  },
  data: function(error, data, columns, stats) {
    console.log({data, columns});
  },
  success: function(error, stats) {
     console.log(error);
     console.log(JSON.stringify(stats, null,2));
  },
  error: function(error) {
    console.log(error);
  },
});

错误信息的关键部分似乎是

原因:io。内蒂。频道AbstractChannel$AnnotatedConnectionException:连接被拒绝:ip-XXXXXXXX。ap-东南-2。计算内部/xxxxxx:41885


共有1个答案

夏侯昆琦
2023-03-14

问题是prest jdbc驱动程序的版本号

我从com更新了它。脸谱网。presto:presto jdbc:0.60tocom。脸谱网。presto:presto jdbc:0.225所以完整的包参数是

--packages,\'org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.0,org.postgresql:postgresql:42.2.9,com.facebook.presto:presto-jdbc:0.255\',\

感谢@Lamanus发现了这一点

 类似资料: