1. 首页
  2. 技术知识

Docker-Compose搭建Spark集群的实现方法

目录

    一、前言二、docker-compose.yml三、启动集群四、结合hdfs使用

一、前言

在前文中,我们使用Docker-Compose完成了hdfs集群的构建。本文将继续使用Docker-Compose,实现Spark集群的搭建。

二、docker-compose.yml

对于Spark集群,我们采用一个mater节点和两个worker节点进行构建。其中,所有的work节点均分配1一个core和 1GB的内存。

Docker镜像选择了bitnami/spark的开源镜像,选择的spark版本为2.4.3,docker-compose配置如下:

  1.   master:
  2.     image: bitnami/spark:2.4.3
  3.     container_name: master
  4.     user: root
  5.     environment:
  6.       – SPARK_MODE=master
  7.       – SPARK_RPC_AUTHENTICATION_ENABLED=no
  8.       – SPARK_RPC_ENCRYPTION_ENABLED=no
  9.       – SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  10.       – SPARK_SSL_ENABLED=no
  11.     ports:
  12.       – ‘8080:8080’
  13.       – ‘7077:7077’
  14.     volumes:
  15.       – ./python:/python
  16.   worker1:
  17.     image: bitnami/spark:2.4.3
  18.     container_name: worker1
  19.     user: root
  20.     environment:
  21.       – SPARK_MODE=worker
  22.       – SPARK_MASTER_URL=spark://master:7077
  23.       – SPARK_WORKER_MEMORY=1G
  24.       – SPARK_WORKER_CORES=1
  25.       – SPARK_RPC_AUTHENTICATION_ENABLED=no
  26.       – SPARK_RPC_ENCRYPTION_ENABLED=no
  27.       – SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  28.       – SPARK_SSL_ENABLED=no
  29.   worker2:
  30.     image: bitnami/spark:2.4.3
  31.     container_name: worker2
  32.     user: root
  33.     environment:
  34.       – SPARK_MODE=worker
  35.       – SPARK_MASTER_URL=spark://master:7077
  36.       – SPARK_WORKER_MEMORY=1G
  37.       – SPARK_WORKER_CORES=1
  38.       – SPARK_RPC_AUTHENTICATION_ENABLED=no
  39.       – SPARK_RPC_ENCRYPTION_ENABLED=no
  40.       – SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  41.       – SPARK_SSL_ENABLED=no

复制代码 在master节点中,也映射了一个/python目录,用于存放pyspark代码,方便运行。

对于master节点,暴露出7077端口和8080端口分别用于连接spark以及浏览器查看spark UI,在spark UI中,集群状态如下图(启动后):

如果有需要,可以自行添加worker节点,其中可以修改SPARK_WORKER_MEMORY与SPARK_WORKER_CORES对节点分配的资源进行修改。

对于该镜像而言,默认exec进去是无用户的,会导致一些安装命令权限的不足,无法安装。例如需要运行pyspark,可能需要安装numpy、pandas等库,就无法使用pip完成安装。而通过user: root就能设置默认用户为root用户,避免上述问题。

三、启动集群

同上文一样,在docker-compose.yml的目录下执行docker-compose up -d命令,就能一键构建集群(但是如果需要用到numpy等库,还是需要自己到各节点内进行安装)。

进入master节点执行spark-shell,成功进入:

四、结合hdfs使用

将上文的Hadoop的docker-compose.yml与本次的结合,得到新的docker-compose.yml:

  1. version: “1.0”
  2. services:
  3.   namenode:
  4.     image: bde2022/hadoop-namenode:2.0.0-hadoop3.2.1-java8
  5.     container_name: namenode
  6.     ports:
  7.       – 9870:9870
  8.       – 9000:9000
  9.     volumes:
  10.       – ./hadoop/dfs/name:/hadoop/dfs/name
  11.       – ./input:/input
  12.     environment:
  13.       – CLUSTER_NAME=test
  14.     env_file:
  15.       – ./hadoop.env
  16.   datanode:
  17.     image: bde2022/hadoop-datanode:2.0.0-hadoop3.2.1-java8
  18.     container_name: datanode
  19.     depends_on:
  20.       – namenode
  21.     volumes:
  22.       – ./hadoop/dfs/data:/hadoop/dfs/data
  23.     environment:
  24.       SERVICE_PRECONDITION: “namenode:9870”
  25.     env_file:
  26.       – ./hadoop.env
  27.   resourcemanager:
  28.     image: bde2022/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8
  29.     container_name: resourcemanager
  30.     environment:
  31.       SERVICE_PRECONDITION: “namenode:9000 namenode:9870 datanode:9864”
  32.     env_file:
  33.       – ./hadoop.env
  34.   nodemanager1:
  35.     image: bde2022/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
  36.     container_name: nodemanager
  37.     environment:
  38.       SERVICE_PRECONDITION: “namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088”
  39.     env_file:
  40.       – ./hadoop.env
  41.   historyserver:
  42.     image: bde2022/hadoop-historyserver:2.0.0-hadoop3.2.1-java8
  43.     container_name: historyserver
  44.     environment:
  45.       SERVICE_PRECONDITION: “namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088”
  46.     volumes:
  47.       – ./hadoop/yarn/timeline:/hadoop/yarn/timeline
  48.     env_file:
  49.       – ./hadoop.env
  50.   master:
  51.     image: bitnami/spark:2.4.3-debian-9-r81
  52.     container_name: master
  53.     user: root
  54.     environment:
  55.       – SPARK_MODE=master
  56.       – SPARK_RPC_AUTHENTICATION_ENABLED=no
  57.       – SPARK_RPC_ENCRYPTION_ENABLED=no
  58.       – SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  59.       – SPARK_SSL_ENABLED=no
  60.     ports:
  61.       – ‘8080:8080’
  62.       – ‘7077:7077’
  63.     volumes:
  64.       – ./python:/python
  65.   worker1:
  66.     image: bitnami/spark:2.4.3-debian-9-r81
  67.     container_name: worker1
  68.     user: root
  69.     environment:
  70.       – SPARK_MODE=worker
  71.       – SPARK_MASTER_URL=spark://master:7077
  72.       – SPARK_WORKER_MEMORY=1G
  73.       – SPARK_WORKER_CORES=1
  74.       – SPARK_RPC_AUTHENTICATION_ENABLED=no
  75.       – SPARK_RPC_ENCRYPTION_ENABLED=no
  76.       – SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  77.       – SPARK_SSL_ENABLED=no
  78.   worker2:
  79.     image: bitnami/spark:2.4.3-debian-9-r81
  80.     container_name: worker2
  81.     user: root
  82.     environment:
  83.       – SPARK_MODE=worker
  84.       – SPARK_MASTER_URL=spark://master:7077
  85.       – SPARK_WORKER_MEMORY=1G
  86.       – SPARK_WORKER_CORES=1
  87.       – SPARK_RPC_AUTHENTICATION_ENABLED=no
  88.       – SPARK_RPC_ENCRYPTION_ENABLED=no
  89.       – SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  90.       – SPARK_SSL_ENABLED=no

复制代码 运行集群(还需要一个hadoop.env文件见上文)长这样:

通过Docker容器的映射功能,将本地文件与spark集群的master节点的/python进行了文件映射,编写的pyspark通过映射可与容器中进行同步,并通过docker exec指令,完成代码执行:

运行了一个回归程序,集群功能正常:

到此这篇关于Docker-Compose搭建Spark集群的实现方法的文章就介绍到这了,更多相关Docker-Compose搭建Spark集群内容请搜索软件技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件技术网!

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/109134.html

联系我们