无法在Docker容器中启动Spark驱动程序

时间:2018-08-15 00:25:54

标签: docker apache-spark elastic-beanstalk

我有一个Docker容器,其中包含一个启动Spark驱动程序的Java应用程序。它连接到Spark集群并提交结构化的流应用程序。

当我在主机模式下使用--network host参数或--hostname 10.X.X.X参数运行docker时,一切正常。但是,由于我使用弹性beantalk来运行应用程序,因此无法修改用于启动容器的docker命令。此外,无法通过弹性beantalk更改网络模式或主机名。

当我不使用任何一个参数运行docker时,docker无法启动,但出现以下异常:

Caused by: java.net.BindException: Cannot assign requested address: Service 'sparkDriver' failed after 16 retries (starting from 37878)! 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) ~[na:1.8.0_172]
at sun.nio.ch.Net.bind(Unknown Source) ~[na:1.8.0_172]
at sun.nio.ch.Net.bind(Unknown Source) ~[na:1.8.0_172]
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source) ~[na:1.8.0_172]
at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:558) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1283) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:989) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:254) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:364) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) ~[news-ml-IT-148-2.jar:IT-148-2]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138) ~[news-ml-IT-148-2.jar:IT-148-2]
at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_172]

我尝试了以下方法:

  1. 更新/ etc / hosts
  2. 更新/ etc / hostname
  3. 设置spark.driver.host
  4. 设置spark.driver.port
  5. 设置$ HOSTNAME环境变量
  6. 设置$ SPARK_LOCAL_IP环境变量
  7. 设置$ SPARK_PUBLIC_DNS环境变量
  8. 几乎所有上述组合。

不幸的是,我无法使用hostname命令设置主机名,因为这需要SYS_ADMIN功能(docker容器不运行该功能)。我无法添加该功能,因为我无法更改用于运行docker容器的命令(即使可以,我也不想这样做)。我意识到在弹性beantalk中运行火花驱动程序有点愚蠢。但是,我想保持此状态,以最大程度地减少需要进行的更改(并尽快将其删除)-我该怎么做才能使它正常工作?

0 个答案:

没有答案