Подключение от искры ЭМИ к престо ЭМИ - Не удалось подключиться
У меня возникают проблемы с подключением из кластера AWS EMR, когда искра работает, к другому кластеру AWS EMR, работающему presto.
Код, написанный на 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()\
развернут через AWS emr add-steps
с возможностью --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.60\',\
Что при развертывании выдает следующую ошибку
Исключение в потоке "main" java.lang.reflect.UndeclaredThrowableException в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1862) в org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.runAsSparkUser 64: SparkHadoopUtil.runAsSparkUser) по адресу org.apache.spark.executor.CoarseGrainedExecutorBackend$.run(CoarseGrainedExecutorBackend.scala:237) в org.apache.spark.executor.CoarseGrainedExecutorBackend$.main(или CoarseGrained.exe).CoarseGrainedExecutorBackend.main(CoarseGrainedExecutorBackend.scala) Вызвано: org.apache.spark.SparkException: исключение возникло в awaitResult: at org.apache.spark.util.ThreadUtils$.awaitResult(Thread.Util.scala) или.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:75) в org.apache.spark.rpc.RpcEnv.setupEndpointRefByURI(RpcEnv.scala:101) в org.apache.spark.executor.CoarseGrainedExecutorBackend$$anonfun$run$1.примените $mcV$sp(CoarseGrainedExecutorBackend.SparkHapache.scala:250) в org.adoop. $2.run(SparkHadoopUtil.scala:65) в org.apache.spark.deploy.SparkHadoopUtil$$ и $2.run(SparkHadoopUtil.scala:64) в java.security.AccessController.doPrivileged(собственный метод) в javax.security.auth.Subject.doAs(Subject.java:422) в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1844) ... еще 4 Причина: java.io.IOException: не удалось подключиться к ip-xxxx-xxx.ap-southeast-2.compute.internal/xxx-xxxx:41885 в org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:245) в org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:187) в org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:198) в org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:194) в org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:190) в java.util.concurrent.FutureTask.run(FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) в java.lang.Thread.run7 (Thread.java) от: io.netty.channel.AbstractChannel$AnnotatedConnectException: в соединении отказано: ip-xxxxxxxxx.ap-southeast-2.compute.internal/xxxxxx:41885 на sun.nio.ch.SocketChannelImpl.checkConnect(собственный метод) на sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) в io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:323) на io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.nio.nio: processSelectedKey(NioEventLoop.java:633) на io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) в io.netty.channel.nio.NioEventLoop.processSelectedKeys.channel.nio.NioEventLoop.run(NioEventLoop.java:459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFaableDefaultThreadFactory.java:138) ... еще 1 Причина: java.net.ConnectException: соединение отклонено... еще 11 Конец LogType:stderrchannel.socket.nio.NioSocketChannel.doFinishConnect (NioSocketChannel.java:323) в io.netty.channel.nio.AbstractNioChannel $ AbstractNioUnsafe.finishConnect (AbstractNioUnsafe.finishConnect (AbstractNioChannel.channel.java:340.NioChannel. NioEventLoop.java:633) по адресу io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) по адресу io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop).java:.nio.NioEventLoop.run (NioEventLoop.java:459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory.DefaultThreadFactory. java: 138)... еще 1 Причина: java.net.ConnectException: соединение отклонено... еще 11 Конец LogType:stderrchannel.socket.nio.NioSocketChannel.doFinishConnect (NioSocketChannel.java:323) на io.netty.channel.nio.AbstractNioChannel $ AbstractNioUnsafe.finishConnect (AbstractNioUnsafe.finishConnect (AbstractNioChannel.channel.java:340ey.NioChannel. NioEventLoop.java:633) по адресу io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) по адресу io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop).java:.nio.NioEventLoop.run (NioEventLoop.java:459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory.DefaultThreadFactory. java: 138)... еще 1 Причина: java.net.ConnectException: соединение отклонено... еще 11 Конец LogType:stderrNioSocketChannel.doFinishConnect (NioSocketChannel.java:323) на io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) на io.netty.channel. на io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) на io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:497) на io.netty.channel.nio. (NioEventLoop.java:459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run8:... Еще 1 Причина: java.net.ConnectException: В соединении отказано... Еще 11 Конец LogType:stderrNioSocketChannel.doFinishConnect (NioSocketChannel.java:323) по адресу io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) в io.netty.channel.java:340) (NioChannel.java:340) в io.netty. на io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) на io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:497) на io.netty.channel.nio. (NioEventLoop.java:459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.runctor:... Еще 1 Причина: java.net.ConnectException: В соединении отказано... Еще 11 Конец LogType:stderrdoFinishConnect (NioSocketChannel.java:323) на io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) на io.netty.channel.nio.NioEventLoop.at io.netty.channel.nio..netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:580) в io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:497) в io.netty.channioEvent.nio..java: 459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory)... java подробнее Вызвано: java.net.ConnectException: В соединении отказано... Еще 11 Конец LogType:stderrdoFinishConnect (NioSocketChannel.java:323) в io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) в io.netty.channel.nio.NioEventLoop.at io.netty.channel.nio..netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:580) по адресу io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:497) по адресу io.netty.channioEvent.nio..java: 459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory)... java подробнее Вызвано: java.net.ConnectException: Соединение отклонено... Еще 11 Конец LogType:stderrnio.AbstractNioChannel $ AbstractNioUnsafe.finishConnect (AbstractNioChannel.java:340) в io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633) по адресу io.netty.channelEventLoop.nio 580) на io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:497) на io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) в io.netty.util.concreadEventExele. $ 5.run (SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory.java:138) ... еще 1 Причина: java.net.ConnectException: соединение отклонено... Еще 11 End of LogType:stderrnio.AbstractNioChannel $ AbstractNioUnsafe.finishConnect (AbstractNioChannel.java:340) по адресу io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633) по адресу io.netty.channelEventLoop.Nio.netty.channelEventLoop.nio.net 580) на io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:497) на io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) в io.netty.util.concreadEventExele. $ 5.run (SingleThreadEventExecutor.java:858) в io.netty.util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory.java:138) ... еще 1 Причина: java.net.ConnectException: соединение отклонено... Еще 11 End of LogType:stderrNioEventLoop.processSelectedKey(NioEventLoop.java:633) в io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) в io.netty.channel.nio.NioEventLoop.process.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в $ io.netty.util.concurrentactory.DefaultThread run (DefaultThreadFactory.java:138) ... еще 1 Причина: java.net.ConnectException: соединение отклонено... еще 11 Конец LogType:stderrNioEventLoop.processSelectedKey(NioEventLoop.java:633) в io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) в io.netty.channel.nio.NioEventLoop.process.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) в io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) в $ io.netty.util.concurrentactory.DefaultThread run (DefaultThreadFactory.java:138) ... еще 1 Причина: java.net.ConnectException: соединение отклонено... еще 11 Конец LogType:stderr497) на io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) на io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) на io.netty.util.concurrent. DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory.java:138) ... еще 1 Причина: java.net.ConnectException: соединение отклонено... еще 11 Конец LogType:stderr497) на io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) на io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) на io.netty.util.concurrent. DefaultThreadFactory $ DefaultRunnableDecorator.run (DefaultThreadFactory.java:138) ... еще 1 Причина: java.net.ConnectException: соединение отклонено... еще 11 Конец LogType:stderr
Хотя я отредактировал приведенный выше IP-адрес (безопасность прежде всего), это тот же внутренний IP-адрес на экземпляре ведомого устройства Spark. Похоже, он подключается к самому себе и имеет проблему с подключением.
Я открыл порты в группах безопасности AWS EC2, предоставив доступ как мастеру, так и подчиненному устройству Spark к экземпляру 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.netty.channel.AbstractChannel$AnnotatedConnectException: в соединении отказано: ip-xxxxxxxxx.ap-southeast-2.compute.internal/xxxxxx:41885
1 ответ
Проблема заключалась в номере версии драйвера perst-jdbc
Я обновил это с com.facebook.presto:presto-jdbc:0.60
к
com.facebook.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 за то, что заметил это