Подключение от свечи EMR к EMR presto - Не удалось подключиться - PullRequest
1 голос
/ 24 января 2020

У меня проблемы с подключением из кластера 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 .had oop .security.UserGroupInformation.doAs (UserGroupInformation. java: 1862) в org. apache .spark.deploy.SparkHadoopUtil.runAsSparkoopUser. SparkUser. 1037 *: 64) в орг. apache .spark.executor.CoarseGrainedExecutorBackend $ .run (CoarseGrainedExecutorBackend. scala: 237) в орг. apache .spark.executor.CoarseGrainedExecutorBackend $. : 330) в орг. apache .spark.executor.CoarseGrainedExecutorBackend.main (CoarseGrainedExecutorBackend. scala) Причина: org. apache .spark.SparkException: исключение, генерируемое в awaitResult: в орг. apache. .util.ThreadUtils $ .а waitResult (ThreadUtils. scala: 226) в орг. apache .spark.rp c .RpcTimeout.awaitResult (RpcTimeout. scala: 75) в орг. apache .spark.rp c. RpcEnv.setupEndpointRefByURI (RpcEnv. scala: 101) в орг. apache .spark.executor.CoarseGrainedExecutorBackend $$ anonfun $ run $ 1.apply $ mcV $ sp (CoarseGrainedExecutorBackend 1055 или 55): * 10 * на 10%. * .spark.deploy.SparkHadoopUtil $$ anon $ 2.run (SparkHadoopUtil. scala: 65) в org. apache .spark.deploy.SparkHadoopUtil $$ anon $ 2.run (SparkHadoopUtil. scala: 64) в java .security.AccessController.doPrivileged (собственный метод) в javax.security.auth.Subject.doAs (Subject. java: 422) в org. apache .had oop .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 (Транспортер tClientFactory. java: 187) в орг. apache .spark.rp c .netty.NettyRpcEnv.createClient (NettyRpcEnv. scala: 198) в орг. apache .spark.rp c. netty.Outbox $$ anon $ 1.call (Исходящие. scala: 194) в org. apache .spark.rp c .netty.Outbox $$ anon $ 1.call (Исходящие. 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.run (Thread. java: 748) Причина: 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: 7) в io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect (NioSocketChannel. java: 323) в io.netty.channel.nio.AbstractNioChannel $ AbstractNioUnsafe.finishConnect (Abstr actNioChannel. java: 340) на io.netty.channel.nio.NioEventL oop .processSelectedKey (NioEventL oop. java: 633) на io.netty.channel.nio.NioEventL oop .processSelectedKeysOptimized (NioEventL oop. java: 580) на io.netty.channel.nio.NioEventL oop .processSelectedKeys (NioEventL oop. java: 497) на io.netty.channel.nio.NioEventL oop .run (NioEventL oop. java: 459) на io.netty.util.concurrent.SingleThreadEventExecutor $ 5.run (SingleThreadEventExecutor. java: 858) на io.netty.util.concurrent.DefaultThreadFactoryD Defaultcounn .run (DefaultThreadFactory. java: 138) ... еще 1 причина: java. net .ConnectException: соединение отклонено ... еще 11 Конец LogType: stderr

Несмотря на то, что я отредактировал вышеуказанный IP-адрес (в первую очередь безопасность), это тот же внутренний IP-адрес в экземпляре Spark-slave. Похоже, что он подключается к себе и имеет проблему с подключением.

Я открыл порты в AWS группах безопасности EC2, разрешая доступ как от основного, так и от ведомого устройства зажигания к экземпляру 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 Ответ

0 голосов
/ 29 января 2020

Проблема заключалась в том, что номер версии драйвера perst-jdb c

Я обновил его с 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 для того, чтобы определить это

...