У меня есть приложение для структурированной потоковой передачи, использующее сообщения из кафки.Это приложение отлично работает в локальном режиме (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»."когда процесс потоковой передачи фактически начинается?