经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Spark » 查看文章
Docker-Compose搭建Spark集群的实现方法
来源:jb51  时间:2022/5/30 9:33:50  对本文有异议

一、前言

在前文中,我们使用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.  
  17. worker1:
  18. image: bitnami/spark:2.4.3
  19. container_name: worker1
  20. user: root
  21. environment:
  22. - SPARK_MODE=worker
  23. - SPARK_MASTER_URL=spark://master:7077
  24. - SPARK_WORKER_MEMORY=1G
  25. - SPARK_WORKER_CORES=1
  26. - SPARK_RPC_AUTHENTICATION_ENABLED=no
  27. - SPARK_RPC_ENCRYPTION_ENABLED=no
  28. - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  29. - SPARK_SSL_ENABLED=no
  30. worker2:
  31. image: bitnami/spark:2.4.3
  32. container_name: worker2
  33. user: root
  34. environment:
  35. - SPARK_MODE=worker
  36. - SPARK_MASTER_URL=spark://master:7077
  37. - SPARK_WORKER_MEMORY=1G
  38. - SPARK_WORKER_CORES=1
  39. - SPARK_RPC_AUTHENTICATION_ENABLED=no
  40. - SPARK_RPC_ENCRYPTION_ENABLED=no
  41. - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  42. - SPARK_SSL_ENABLED=no

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

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

如果有需要,可以自行添加worker节点,其中可以修改SPARK_WORKER_MEMORYSPARK_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: bde2020/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.  
  17. datanode:
  18. image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
  19. container_name: datanode
  20. depends_on:
  21. - namenode
  22. volumes:
  23. - ./hadoop/dfs/data:/hadoop/dfs/data
  24. environment:
  25. SERVICE_PRECONDITION: "namenode:9870"
  26. env_file:
  27. - ./hadoop.env
  28. resourcemanager:
  29. image: bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8
  30. container_name: resourcemanager
  31. environment:
  32. SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864"
  33. env_file:
  34. - ./hadoop.env
  35.  
  36. nodemanager1:
  37. image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
  38. container_name: nodemanager
  39. environment:
  40. SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
  41. env_file:
  42. - ./hadoop.env
  43. historyserver:
  44. image: bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8
  45. container_name: historyserver
  46. environment:
  47. SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
  48. volumes:
  49. - ./hadoop/yarn/timeline:/hadoop/yarn/timeline
  50. env_file:
  51. - ./hadoop.env
  52. master:
  53. image: bitnami/spark:2.4.3-debian-9-r81
  54. container_name: master
  55. user: root
  56. environment:
  57. - SPARK_MODE=master
  58. - SPARK_RPC_AUTHENTICATION_ENABLED=no
  59. - SPARK_RPC_ENCRYPTION_ENABLED=no
  60. - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  61. - SPARK_SSL_ENABLED=no
  62. ports:
  63. - '8080:8080'
  64. - '7077:7077'
  65. volumes:
  66. - ./python:/python
  67.  
  68. worker1:
  69. image: bitnami/spark:2.4.3-debian-9-r81
  70. container_name: worker1
  71. user: root
  72. environment:
  73. - SPARK_MODE=worker
  74. - SPARK_MASTER_URL=spark://master:7077
  75. - SPARK_WORKER_MEMORY=1G
  76. - SPARK_WORKER_CORES=1
  77. - SPARK_RPC_AUTHENTICATION_ENABLED=no
  78. - SPARK_RPC_ENCRYPTION_ENABLED=no
  79. - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  80. - SPARK_SSL_ENABLED=no
  81. worker2:
  82. image: bitnami/spark:2.4.3-debian-9-r81
  83. container_name: worker2
  84. user: root
  85. environment:
  86. - SPARK_MODE=worker
  87. - SPARK_MASTER_URL=spark://master:7077
  88. - SPARK_WORKER_MEMORY=1G
  89. - SPARK_WORKER_CORES=1
  90. - SPARK_RPC_AUTHENTICATION_ENABLED=no
  91. - SPARK_RPC_ENCRYPTION_ENABLED=no
  92. - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
  93. - SPARK_SSL_ENABLED=no

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

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

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号