Java.io.EOFException при использовании spark-submit с пряжей в качестве мастера в кластере

Я пытаюсь запустить файл jar с помощью этой команды spark-submit:

spark-submit --master yarn --deploy-mode cluster --executor-memory 3g --class my.package.Main my-jar-file.jar

Класс Main - это основной класс jar, и вот его содержимое (все на Scala):

object Main{
    def main(args: Array[String]){
        val server = HttpServer.create(new InetSocketAddress("master", 8000), 0)
        val backend = new MainProcess()
        val handlerRoot = new RootHandler()
        handlerRoot.initProcess(backend)

        server.createContext("/", handlerRoot)
        server.setExecutor(null)

        server.start()
        println("Server is started at " + server.getAddress().getHostString() + ":" + server.getAddress().getPort())
    }
}

Класс MainProcess - это класс, в котором я работаю с библиотекой Spark и Spark GraphX, используя файлы, полученные из HDFS. Вот как я настраиваю SparkContext в классе MainProcess:

class MainProcess{
    val config = new SparkConf()
    config.setAppName("Final GraphX App - Main")
    val sc = new SparkContext(config)
   ...
}

Кажется, что приложение работает нормально, и окончательный статус вернул успех, но приложение просто закрывается, а не работает постоянно, поскольку оно должно быть работающим сервером. Я могу открыть мастер ссылок: 8000 только один раз, и он снова не может подключиться, когда я попытался обновить страницу. Вот журнал запуска приложения:

18/04/06 15:45:59 ERROR yarn.YarnAllocator: Failed to launch executor 2 on container container_1522920902032_0027_01_000003
org.apache.spark.SparkException: Exception while starting container container_1522920902032_0027_01_000003 on host slave2
    at org.apache.spark.deploy.yarn.ExecutorRunnable.startContainer(ExecutorRunnable.scala:125)
    at org.apache.spark.deploy.yarn.ExecutorRunnable.run(ExecutorRunnable.scala:65)
    at org.apache.spark.deploy.yarn.YarnAllocator$$anonfun$runAllocatedContainers$1$$anon$1.run(YarnAllocator.scala:523)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Failed on local exception: java.io.IOException: java.io.EOFException; Host Details : local host is: "master/10.100.69.207"; destination host is: "slave2":57914; 
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:776)
    at org.apache.hadoop.ipc.Client.call(Client.java:1479)
    at org.apache.hadoop.ipc.Client.call(Client.java:1412)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
    at com.sun.proxy.$Proxy19.startContainers(Unknown Source)
    at org.apache.hadoop.yarn.api.impl.pb.client.ContainerManagementProtocolPBClientImpl.startContainers(ContainerManagementProtocolPBClientImpl.java:96)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
    at com.sun.proxy.$Proxy20.startContainers(Unknown Source)
    at org.apache.hadoop.yarn.client.api.impl.NMClientImpl.startContainer(NMClientImpl.java:201)
    at org.apache.spark.deploy.yarn.ExecutorRunnable.startContainer(ExecutorRunnable.scala:122)
    ... 5 more
Caused by: java.io.IOException: java.io.EOFException
    at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:687)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
    at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:650)
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:737)
    at org.apache.hadoop.ipc.Client$Connection.access$2900(Client.java:375)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1528)
    at org.apache.hadoop.ipc.Client.call(Client.java:1451)
    ... 18 more
Caused by: java.io.EOFException
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:367)
    at org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:560)
    at org.apache.hadoop.ipc.Client$Connection.access$1900(Client.java:375)
    at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:729)
    at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:725)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:725)
    ... 21 more

Это приложение в основном представляет собой веб-приложение, созданное с использованием Java HTTP Server (com.sun.net.httpserver.HttpServer), и оно использует Spark для обработки больших данных. Отправленные запросы принимаются классом обработчика, и создается новый поток для выполнения задания Spark в фоновом режиме. Пользователь может отправить еще один запрос, чтобы проверить, завершено ли задание Spark, чтобы готовый результат можно было показать на веб-странице. Проблема в том, что сервер «убивает» каждый раз, когда Spark утверждает, что завершил задание (но в данном случае не удалось выполнить задание). Я использую Spark 2.2.0, созданный для Hadoop 2.7 и Hadoop 2.7.1. Все файлы данных находятся в HDFS.

server.start() неблокирующий?

ernest_k 06.04.2018 11:46

@ErnestKiwele нет, это не останавливается, когда я локально использовал spark-submit (с использованием ОС Windows). Но он остановился, когда я отправил в кластер (используя Linux Ubuntu)

user4803846 06.04.2018 11:50

Затем вам нужно проверить журналы YARN, они укажут, когда и почему приложение было убито (возможно, из-за чрезмерного использования ресурсов?)

ernest_k 06.04.2018 11:53

@ErnestKiwele уже сделал, я уже выложил журнал ошибок. Основная причина - исключение EOFException, но я не знаю, как его исправить.

user4803846 06.04.2018 11:56

Ваша ошибка указывает на то, что к машине slave2 невозможно получить доступ ... Убедитесь, что на нем запущен диспетчер узлов, а его порты открыты для приема запросов ресурсов YARN ... Кроме того, не совсем понятно, почему вы пытаетесь запустить веб-сервер в приложении Spark

OneCricketeer 07.04.2018 07:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
846
0

Другие вопросы по теме

Похожие вопросы