Kubernetes - Spark - Как решить «BindException: адрес недоступен: после сбоя службы« sparkDriver »»? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть приложение для структурированной потоковой передачи, использующее сообщения из кафки.Это приложение отлично работает в локальном режиме (master = local).Теперь я хочу запустить его в режиме кластера в кластере Kubernetes, который есть в Amazon EKS (версия Kubernetes 1.11).Для развертывания мы решили попробовать Kubernetes Spark Operator и Spark submit .Приложение разворачивается без проблем в обоих случаях, но при использовании первого сообщения kafka мы получили ошибку

BindException: Address not available: Service 'sparkDriver' failed".

Журнал в исполнителе выглядит так:

2019-02-14 23:02:29 INFO  Executor:54 - Adding file:/opt/spark/work-dir/./mammut-transducer-ktt.jar to class loader
2019-02-14 23:02:29 INFO  TorrentBroadcast:54 - Started reading broadcast variable 0
2019-02-14 23:02:29 INFO  TransportClientFactory:267 - Successfully created connection to spark-pi-1550185196340-driver-svc.default.svc/192.168.125.76:7279 after 2 ms (0 ms spent in bootstraps)
2019-02-14 23:02:30 INFO  MemoryStore:54 - Block broadcast_0_piece0 stored as bytes in memory (estimated size 7.3 KB, free 997.8 MB)
2019-02-14 23:02:30 INFO  TorrentBroadcast:54 - Reading broadcast variable 0 took 161 ms
2019-02-14 23:02:30 INFO  MemoryStore:54 - Block broadcast_0 stored as values in memory (estimated size 17.4 KB, free 997.8 MB)
2019-02-14 23:02:30 INFO  ConsumerConfig:279 - ConsumerConfig values: 
    auto.commit.interval.ms = 5000
...
2019-02-14 23:02:30 INFO  AppInfoParser:109 - Kafka version : 2.0.0
2019-02-14 23:02:30 INFO  AppInfoParser:110 - Kafka commitId : 3402a8361b734732
2019-02-14 23:02:31 INFO  CodeGenerator:54 - Code generated in 582.151004 ms
2019-02-14 23:02:31 INFO  CodeGenerator:54 - Code generated in 13.579402 ms
2019-02-14 23:02:31 INFO  Metadata:273 - Cluster ID: K0XS-CasSt6MVY0r9NqCjg
2019-02-14 23:02:32 INFO  SparkContext:54 - Running Spark version 2.4.0
2019-02-14 23:02:32 INFO  SparkContext:54 - Submitted application: mammut-transducers-ktt
2019-02-14 23:02:32 INFO  SecurityManager:54 - Changing view acls to: root
2019-02-14 23:02:32 INFO  SecurityManager:54 - Changing modify acls to: root
2019-02-14 23:02:32 INFO  SecurityManager:54 - Changing view acls groups to: 
2019-02-14 23:02:32 INFO  SecurityManager:54 - Changing modify acls groups to: 
2019-02-14 23:02:32 INFO  SecurityManager:54 - SecurityManager: authentication disabled; ui acls disabled; users  with view permissions: Set(root); groups with view permissions: Set(); users  with modify permissions: Set(root); groups with modify permissions: Set()
2019-02-14 23:02:32 WARN  Utils:66 - Service 'sparkDriver' could not bind on port 7....
.
.
2019-02-14 23:02:32 ERROR SparkContext:91 - Error initializing SparkContext.
java.net.BindException: Address not available: Service 'sparkDriver' failed after 32 retries (starting from 7380)! Consider explicitly setting the appropriate port for the service 'sparkDriver' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries.
    at sun.nio.ch.Net.bind0(Native Method)

Журналв драйвере выглядит так:

2019-02-14 23:02:27 INFO  DAGScheduler:54 - Submitting 1 missing tasks from ResultStage 0 (MapPartitionsRDD[5] at start at InterpreterMainService.scala:80) (first 15 tasks are for partitions Vector(0))
2019-02-14 23:02:27 INFO  TaskSchedulerImpl:54 - Adding task set 0.0 with 1 tasks
2019-02-14 23:02:28 INFO  TaskSetManager:54 - Starting task 0.0 in stage 0.0 (TID 0, 192.168.82.130, executor 1, partition 0, PROCESS_LOCAL, 8803 bytes)
2019-02-14 23:02:30 INFO  BlockManagerInfo:54 - Added broadcast_0_piece0 in memory on 192.168.82.130:7178 (size: 7.3 KB, free: 997.8 MB)
2019-02-14 23:02:32 WARN  TaskSetManager:66 - Lost task 0.0 in stage 0.0 (TID 0, 192.168.82.130, executor 1): java.net.BindException: Address not available: Service 'sparkDriver' failed after 32 retries (starting from 7380)! Consider explicitly setting the appropriate port for the service 'sparkDriver' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries.
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128)
    at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:558)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1283)
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)
    at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:989)
    at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:254)
    at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:364)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)
 2019-02-14 23:02:32 INFO  TaskSetManager:54 - Starting task 0.1 in stage 0.0 (TID 1, 192.168.82.130, executor 1, partition 0, PROCESS_LOCAL, 8803 bytes)

Я попытался изменить различные порты, которые используют свечи, и поместил executor-pod и driver-pod в разные узлы kubernetes.Я также попробовал в пространстве имен по умолчанию kubernetes и в новом.Все эти изменения дают точно такой же результат.

Я также пробовал запускать примеры в документации оператора и документации спарк, и эти простые приложения Spark отлично работают.Но ни одно из них не является приложением для потоковой передачи искр.

В kubernetes модуль драйвера имеет следующую переменную Env:

SPARK_DRIVER_BIND_ADDRESS: (v1:status.podIP)

Исполнитель:

SPARK_DRIVER_URL: spark://CoarseGrainedScheduler@spark-pi-1550185196340-driver-svc.default.svc:7380

И пользовательский интерфейс приложения spark показывает следующую конфигурацию:

spark.blockManager.port         7178
spark.driver.bindAddress    192.168.125.76
spark.driver.blockManager.port  7279
spark.driver.host           spark-pi-1550185196340-driver-svc.default.svc
spark.driver.port           7380
spark.master                    k8s://https://10.100.0.1:443

В журналах исполнителя мы видим, что исполнитель общается с драйвером:

2019-02-14 23:02:28 INFO  Executor:54 - Fetching spark://spark-pi-1550185196340-driver-svc.default.svc:7380/jars/mammut-transducer-ktt.jar with timestamp 1550185238992
2019-02-14 23:02:28 INFO  TransportClientFactory:267 - Successfully created connection to spark-pi-1550185196340-driver-svc.default.svc/192.168.125.76:7380 after 1 ms (0 ms spent in bootstraps)

Любые мысли, почему исполнитель не может подключиться к «spark.driver.port»."когда процесс потоковой передачи фактически начинается?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...