docker - 无法在 Docker 容器中启动 Spark 驱动程序
问题描述
我有一个 docker 容器,其中包含一个启动 spark 驱动程序的 java 应用程序。它连接到一个火花集群并提交一个结构化的流应用程序。
当我使用--network host
参数或参数在主机模式下运行 docker 时,--hostname 10.X.X.X
一切正常。但是,由于我使用弹性 beanstalk 来运行应用程序,我无法修改用于启动容器的 docker 命令。此外,没有选项可以使用弹性 beanstalk 更改网络模式或主机名。
当我在没有这些参数的情况下运行 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]
我尝试了以下方法:
- 更新 /etc/hosts
- 更新 /etc/hostname
- 设置 spark.driver.host
- 设置 spark.driver.port
- 设置 $HOSTNAME 环境变量
- 设置 $SPARK_LOCAL_IP 环境变量
- 设置 $SPARK_PUBLIC_DNS 环境变量
- 几乎所有上述组合。
不幸的是,我无法使用hostname
命令设置主机名,因为这需要 SYS_ADMIN 功能(docker 容器在没有该功能的情况下运行)。我无法添加该功能,因为我无法更改用于运行 docker 容器的命令(即使可以,我也不想这样做)。我意识到在弹性豆茎中运行火花驱动器有点愚蠢。但是,我想保持这一点,以最大限度地减少需要进行的更改(并尽快将其解决) - 我该怎么做才能使其正常工作?
解决方案
推荐阅读
- python-3.x - 更改 plotly dash_table 数据表数据值会导致空白单元格
- python - 用 dicts 制作相同的列表,但只有唯一的记录
- c# - 零件程序和零件程序选择的网络文件传输
- sql - IN 运算符的解释
- javascript - 如何在 displaySelectedUser 函数中使用数组 .forEach 函数迭代属性数组并在 UI 中显示属性
- css - 是否有一个简单的修复方法可以在路径上旋转 CSS 椭圆形阴影而不是中央锚点?
- apache-kafka - 在 Kafka 上获取 Storm runningo
- imagej - 在Imagej中将曲线分割成等长段
- ios - 如何在 SwiftUI 中使用 SFSafariViewController?
- google-apps-script - 使用 Google Apps 脚本获取工作表中包含特定列为空的数据的所有行