当前位置: 首页 > article >正文

基于Docker的Spark分布式集群

目录

1. 说明

2. 服务器规划

3. 步骤

3.1 要点

3.2 配置文件

3.2 访问Spark Master

4. 使用测试

5. 参考


1. 说明

  • 以docker容器方式实现apache spark计算集群,能灵活的增减配置与worker数目。

2. 服务器规划

服务器

(1master, 3workers)

ip开放端口备注
center01.dev.sb172.16.20.208080,7077

硬件配置:32核64G

软件配置:ubuntu22.04 + 宝塔面板

host001.dev.sb172.16.20.608081,70778核16G
host002.dev.sb172.16.20.618081,7077...
BEN-ZX-GZ-MH172.16.1.106应用服务,发任务机器

3. 步骤

3.1 要点
  • worker节点的网络模式用host,不然spark ui页面中获取的路径会是容器ip,里面的链接变得不可访问
  • 测试前需保证任务发布机与Worker机的运行语言版本一致(如: 同是python10 / python12),否则会报错 "Python in worker has different version (3, 12) than that in driver 3.10"。
  • 确保发任务机器能被Worker节点访问,否则会出现诸如: 
    "WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources"
    等莫名其妙的错误,观察工作机错误日志:
    "Caused by: java.io.IOException: Failed to connect to BEN-ZX-GZ-MH/<unresolved>:10027"
    由于访问不了发任务机器而导致的,目前采取的解决方法是在配置里写死映射IP
3.2 配置文件

docker-compose.spark-master.yml

services:
  spark:
    image: docker.io/bitnami/spark:latest
    container_name: spark-master
    restart: always
    environment:
      - SPARK_MODE=master
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
      - SPARK_USER=spark
    ports:
      - '8080:8080'
      - '7077:7077'

docker-compose.spark-worker.yml

services:
  spark-worker:
    image: docker.io/bitnami/spark:latest
    container_name: spark-worker
    restart: always
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://spark-master:7077
      - SPARK_WORKER_MEMORY=2G
      - SPARK_WORKER_CORES=2
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
      - SPARK_USER=spark
    ports:
      - '8081:8081'
      - '7077:7077'
    extra_hosts:
      - "spark-master:172.16.20.20"
      - "BEN-ZX-GZ-MH:172.16.1.106"
    network_mode: host
3.2 访问Spark Master

访问Spark Master,可见已有两台worker机可供驱使

4. 使用测试

t3.py

from pyspark.sql import SparkSession


def main():
    # Initialize SparkSession
    spark = (
        SparkSession.builder.appName("HelloSpark")  # type: ignore
        .master("spark://center01.dev.sb:7077")
        .config("spark.executor.memory", "512m")
        .config("spark.cores.max", "1")
        # .config("spark.driver.bindAddress", "center01.dev.sb")
        .getOrCreate()
    )

    # Create an RDD containing numbers from 1 to 10
    numbers_rdd = spark.sparkContext.parallelize(range(1, 11))

    # Count the elements in the RDD
    count = numbers_rdd.count()

    print(f"Count of numbers from 1 to 10 is: {count}")

    # Stop the SparkSession
    spark.stop()


if __name__ == "__main__":
    main()

运行监控 

 结果

5. 参考

- containers/bitnami/spark at main · bitnami/containers · GitHub


http://www.kler.cn/a/518950.html

相关文章:

  • 代码随想录算法训练营day31(补0124)
  • tmux 介绍与使用
  • 国产编辑器EverEdit - 输出窗口
  • 【2024年华为OD机试】(A卷,200分)- 查找树中元素 (JavaScriptJava PythonC/C++)
  • Word 中实现方框内点击自动打 √ ☑
  • Stable Diffusion 3.5 介绍
  • 深度学习-97-大语言模型LLM之基于langchain的实体记忆和知识图谱记忆
  • 2024年AI多极竞争:技术创新与商业突破
  • 深入理解 JavaScript 对象字面量:创建对象的简洁方法
  • 如何使用 pytest-html 创建自定义 HTML 测试报告
  • 百度“秒哒”能开始内测了?李彦宏:假!
  • [JavaScript] 面向对象编程
  • mysql之group by语句
  • [RoarCTF 2019]Easy Calc1
  • 【例51.3】 平移数据
  • 头歌实训作业 算法设计与分析-动态规划(第1关:0/1背包问题)
  • 【Python】第四弹---深入理解Python控制流:从顺序到循环的全面解析
  • 论文速读|Beit: Bert pre training of image transformers.ICLR22
  • BGP分解实验·12——配置路由反射器
  • ML基础2-python中的可视化1:matplotlib
  • 汽车定速巡航
  • 2025数学建模美赛|E题成品论文
  • Mono里运行C#脚本35—加载C#语言基类的过程
  • 高阶C语言|数组名的深度解析(数组名结合sizeof与strlen的详解)
  • impact 影响分析学习笔记(一)
  • 【后端面试总结】mysql的join,left join,right join,full join分别是什么意思