Spark — 2.0: отказано в подключении

#apache-spark #emr #amazon-emr

#apache-spark #emr #amazon-emr

Вопрос:

Я пытаюсь перейти с Spark 1.6 на Spark 2.0 на EMR. (Режим кластера)

Я получаю следующую ошибку при выполнении моей рабочей нагрузки:

Исключение в потоке «main» java.lang.reflect.Исключение UndeclaredThrowableException в org.apache.hadoop.security.Информация о группе пользователей.doAs(UserGroupInformation.java: 1672) в org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.scala:70) в org.apache.spark.executor.CoarseGrainedExecutorBackend$.run(CoarseGrainedExecutorBackend.scala:174) в org.apache.spark.executor.CoarseGrainedExecutorBackend$.main(CoarseGrainedExecutorBackend.scala:270) в org.apache.spark.executor.Крупнозернистый executorbackend.main(Крупнозернистый executorbackend.scala) Вызвано: org.apache.spark.SparkException: исключение, вызванное ожиданием результата в org.apache.spark.rpc.RpcTimeout$$anonfun$ 1.applyOrElse(RpcTimeout.scala: 77) в org.apache.spark.rpc.RpcTimeout $$anonfun $ 1.applyOrElse(RpcTimeout.scala: 75) в scala.runtime.Абстрактная функция PartialFunction.apply(AbstractPartialFunction.scala:36) в org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:59) в org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$ 1.applyOrElse(RpcTimeout. скала:59) в scala.Частичная функция $OrElse.apply(PartialFunction.scala:167) в org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:83) в org.apache.spark.rpc.RpcEnv.setupEndpointRefByURI(RpcEnv.scala:88) в org.apache.spark.executor.Крупнозернистый executorbackend$$anonfun$выполнить $1. применить $mcV $ sp(крупнозернистый executorbackend.scala:188) в org.apache.spark.deploy.SparkHadoopUtil$$анон $1.запустите (SparkHadoopUtil.scala:71) в org.apache.spark.deploy.SparkHadoopUtil$$анон $1.запустите (SparkHadoopUtil.scala:70) в java.security.Контроллер доступа.Допривилегирован (собственный метод) в javax.security.auth.Subject.doAs(Subject.java: 422) в org.apache.hadoop.security.Информация о группе пользователей.doAs(UserGroupInformation.java: 1657) … еще 4 вызвано: java.io.IOException: не удалось подключиться к / 172.x.x.x:33190 в org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:228) в org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:179) в org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:197) в org.apache.spark.rpc.netty.Исходящие $$анон $ 1. вызов (Outbox.scala: 191) в организации.apache.spark.rpc.netty.Исходящие $$анон $ 1.вызов (Outbox.scala:187) в java.util.concurrent.FutureTask.run(FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1142) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) на java.lang.Thread.run(Thread.java:745) Вызвано: java.net.ConnectException: отказано в подключении: /172.31.32.131:33190 в sun.nio.ch.SocketChannelImpl.checkConnect(собственный метод) в sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) при вводе-выводе.netty.channel.socket.nio.NioSocketChannel.Завершите подключение (NioSocketChannel.java: 224) к io.netty.channel.nio.AbstractNioChannel $ AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:289) к io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528) к io.netty.channel.nio.NioEventLoop .Процесс выбора клавиш оптимизирован(NioEventLoop.java: 468) в io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) в io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) в io.netty.util.concurrent.SingleThreadEventExecutor$2.выполнить(SingleThreadEventExecutor.java:111) … еще 1

Обратите внимание, что указанный ниже IP-адрес является IP-адресом рабочего компьютера, и этот сбой возникает при выполнении шага ‘sortByKey’.

Я подтвердил, что могу передавать ssh от Master к Worker и наоборот.

Обновить:

Еще немного информации, журналы диспетчера узлов Yarn:

Трассировка стека: исключение ExitCodeException ExitCode=1: 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в org.apache.hadoop.util.Shell.runCommand(Shell.java: 545) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в org.apache.hadoop.util.Shell.run(Shell.java: 456) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в org.apache.hadoop.util.Shell$ShellCommandExecutor.execut e(Shell.java: 722) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в org.apache.hadoop.yarn.server.nodemanager.По умолчанию поддерживается erExecutor.launchContainer(DefaultContainerExecutor.java:212) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в org.apache.hadoop.yarn.server.nodemanager.containermanag er.launcher.ContainerLaunch.call(ContainerLaunch.java:302) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в org.apache.hadoop.yarn.server.nodemanager.containermanag er.launcher.ContainerLaunch.call(ContainerLaunch.java:82) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в java.util.concurrent.FutureTask.run(FutureTask.java:266) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в java.util.concurrent.ThreadPoolExecutor.runWorker(Thread PoolExecutor.java: 1142) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): в java.util.concurrent.ThreadPoolExecutor$Worker.run(Threa dPoolExecutor.java:617) 2016-10-17 06:27:43 468 INFO org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor (ContainersLauncher #66): на java.lang.Thread.run(Thread.java:745)

Я предполагаю, что это происходит из-за ошибки отказа в подключении в worker. Кроме того, я не совсем уверен, почему worker пытается подключиться к самому себе с помощью IP, а не 127.0.0.1.

Комментарии:

1. какую версию EMR вы используете? можем ли мы увидеть образец приложения, которое вы запускаете?

2. EMR — 5.0.0 . В моем приложении я просто вызываю rdd.sample , за которым следует sortByKey, а затем collect . Это исключение возникает при вызове sortByKey . Обратите внимание, что то же приложение отлично работает на EMR 4.7.2 с Spark 1.6, и я не внес никаких изменений, кроме изменения зависимостей (Spark 1.6 -> Spark 2.0)

3. у spark 5.0 теперь другой конструктор, поэтому вам нужно будет использовать sparksession и получать доступ к rdd через него. используете ли вы новый sparksession объект? если это действительно так, мы бы сразу увидели это, если бы вы поделились своим кодом. пожалуйста, добавьте свой код к вопросу. 🙂

4. @Kristian: я все еще использую JavaSparkContext, SparkContext больше не работает? Я попробую использовать SparkSession, чтобы посмотреть, поможет ли это.