文章
问答
冒泡
在本地使用docker模拟spark集群执行python任务

项目背景

  • 在本地开发spark但是没有集群环境又想测试集群

  • 模拟一个master节点两个worker节点的部署方式

1、文件目录结构

task 文件夹

存放一些py文件

run.py

需要向spark提交的python文件

docker-compose.yaml

容器编排配置文件

2、docker-compose.yaml文件

version: '3'

services:
  master:
    image: bitnami/spark
    hostname: master
    container_name: master
    environment:
      - SPARK_MODE=master
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
    volumes:
      - task_data:/opt/share
    ports:
      - '8080:8080'
      - '4040:4040'
      - '8088:8088'
      - '8042:8042'
      - '9870:9870'
      - '19888:19888'
      - '7077:7077'
  spark-worker-1:
    image: bitnami/spark
    hostname: worker1
    container_name: worker1
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://master:7077
      - SPARK_WORKER_MEMORY=1G
      - SPARK_WORKER_CORES=1
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
    volumes:
      - task_data:/opt/share
    ports:
      - '8081:8080'
  spark-worker-2:
    image: bitnami/spark
    hostname: worker2
    container_name: worker2
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://master:7077
      - SPARK_WORKER_MEMORY=1G
      - SPARK_WORKER_CORES=1
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
    volumes:
      - task_data:/opt/share
    ports:
      - '8082:8081'
  ## 本地装pyspark实在是太麻烦了,直接用容器跑spark任务,下面这个容器就是专门跑任务的
  ## 集群起来以后,单独启动这个容器就可以在容器里跑任务了
  ## 这样容器之间通信也会很方便
  spark-task:
    image: bitnami/spark
    working_dir: /opt/share
    hostname: task
    container_name: task
    command: >
      bash -c "spark-submit --master spark://master:7077 run.py"
    volumes:
      - ./:/opt/share

volumes:
  task_data:

3、启动"集群"

docker-compose up

4、启动任务容器

docker-compose up spark-task

run.py文件

from pyspark import SparkConf, SparkContext

conf = SparkConf().setAppName('My App')
sc = SparkContext(conf=conf)

count = sc.range(1, 1000 * 1000 * 100).filter(lambda x: x > 100).count()
print('count: ', count)

提交任务到spark集群

使用 spark-submit 命令提交 Python 脚本,指定 --master 参数提交到集群上。如果未指定该参数,则默认以本地模式运行。

spark-submit --master spark://master:7077 run.py

当指定为 spark://host:port 时,应用提交到 Spark 自带的独立集群管理器(Standalone)上运行,默认端口 7077;如果使用 Apache Mesos 集群管理器,需指定为 mesos://host:port,默认端口 5050;使用 Hadoop YARN 则需指定为 yarn。


应用运行时,SparkContext 实例会启动应用的 Web UI,默认端口 4040。你可以在此网址查看应用的作业(Job)、组成作业的所有步骤(Stage)、持久化的 RDD 以及执行器状态等信息,这对于应用性能评估有巨大帮助。运行结束后,SparkContext 实例消亡,同时会关闭此 Web UI。

spark

关于作者

小乙哥
学海无涯,回头是岸
获得点赞
文章被阅读