docker - 如何使用 Docker 创建分布式 Spark 集群
问题描述
我正在尝试使用这个 docker-compose 创建一个只有一个工作人员的分布式火花集群
master:
image: gettyimages/spark:2.0.0-hadoop-2.7
command: bin/spark-class org.apache.spark.deploy.master.Master -h master
hostname: master
container_name: spark-master
environment:
SPARK_CONF_DIR: /conf
SPARK_PUBLIC_DNS: <MASTER IP>
expose:
- 7001
- 7002
- 7003
- 7004
- 7005
- 7077
- 6066
ports:
- 4040:4040
- 6066:6066
- 7077:7077
- 8080:8080
volumes:
- ./conf/master:/conf
- ./data:/tmp/data
- ~/spark/data/:/spark/data/
worker:
image: gettyimages/spark:2.0.0-hadoop-2.7
command: bin/spark-class org.apache.spark.deploy.worker.Worker spark://master:7077
hostname: worker
container_name: spark-worker
environment:
SPARK_CONF_DIR: /conf
SPARK_WORKER_CORES: 2
SPARK_WORKER_MEMORY: 1g
SPARK_WORKER_PORT: 8881
SPARK_WORKER_WEBUI_PORT: 8081
SPARK_PUBLIC_DNS: <WORKER IP>
links:
- master
expose:
- 7012
- 7013
- 7014
- 7015
- 8881
ports:
- 8081:8081
volumes:
- ./conf/worker:/conf
- ./data:/tmp/data
- ~/apps/sparkapp/worker/data:/spark/data/
但问题是 docker 守护进程正在同一台机器上创建容器。这消除了分布式网络的全部意义。如何使用 docker 创建分布式 Spark 集群
解决方案
如果 Spark 工作人员的相同端口出现问题,实际上您有两种选择:
- 根本不要暴露工人的端口 - 你不需要它们让工人连接到主人和工作。但这可能不方便,因为您无法访问工作人员的 WebUI
- 使用像“8081-8999:8081”这样的特殊语法,这样下一个开始的工作人员
docker-compose up --scale worker=2
将使用不同的端口。
推荐阅读
- r - 如何调整绘图大小以便在 R Markdown 中使用?
- apache - 用于基本 URL 的 htaccess RewriteRule
- json - 来自 jq 尝试使用变量修改 JSON 的“无效数字文字”错误
- java - 如何等待反射线程完成
- javascript - 使用 react-router v4 添加或更新查询参数,无需重新渲染主要组件
- python - 回归模型 statsmodel python
- php - 在 wordpress 上操作 slug 和 url
- scala - 在 Spark 2+ 中通过 SparkSession 向 Kryo 注册类
- c# - 将 datagridview 值转换为 int
- python - Tensorflow Keras Python3 期望输出形状 (1,) 但得到形状 (3,)