[spark]standalone伪分布式集群环境(搭建1)

211 阅读5分钟

在一台电脑上搭建一个可运行的Spark“集群”是完全可行的,这通常被称为伪分布式集群单机集群模式

它可以在单个节点上模拟出Master和多个Worker的分布式集群环境,非常适合进行本地开发、测试和学习,包括机器学习的模型训练。

方案对比:如何选择?

你可以根据自己的学习目标和技术背景,选择以下任一方案:

特性Spark本地模式 (Local Mode)Spark独立模式 (单机集群)基于Docker的集群
核心概念最简单的单进程模式,无集群概念。在单机上启动独立的Master和Worker守护进程,模拟真实集群架构。使用容器技术,在一台机器上运行多个独立容器,模拟多节点集群。
搭建复杂度★☆☆☆☆ (极低)★★☆☆☆ (低)★★★☆☆ (中)
最像真实集群★☆☆☆☆★★★☆☆★★★★★
适合场景快速验证代码、小数据量测试。学习和理解Spark集群架构、资源调度,进行中等规模数据实验。最接近生产环境的本地体验,方便环境隔离与多版本管理。
资源隔离弱(进程隔离)强(容器隔离)

方案一:Spark独立模式(单机集群)搭建步骤

这是最符合你“搭建集群”需求的方案,能让你直观地理解Spark的Master/Worker架构。

第一步:基础环境准备

  1. 安装Java:Spark运行需要Java。建议安装OpenJDK 8或11,并正确设置JAVA_HOME环境变量。
  2. 配置SSH免密登录:Spark脚本需要通过SSH管理本机上的Worker,配置本机到自身的免密登录可以简化启动过程。
    • 在终端执行 ssh-keygen -t rsa 生成密钥(连续回车)。
    • 执行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    • 执行 ssh localhost 测试是否无需密码即可登录。

第二步:下载与安装Spark

  1. 前往 Apache Spark官网 下载预编译版本(例如 spark-3.5.x-bin-hadoop3.tgz)。
  2. 解压到指定目录,如 /opt/spark~/spark
  3. (可选)将Spark的bin目录添加到系统的PATH环境变量中。

第三步:配置伪分布式集群

  1. 配置slaves文件:进入Spark的conf目录,将 slaves.template 复制为 slaves
    cd /opt/spark/conf
    cp slaves.template slaves
    
  2. 编辑 slaves 文件,在末尾添加一行 localhost,表示Worker将运行在本机。
  3. (可选)配置环境变量:将 spark-env.sh.template 复制为 spark-env.sh。可以在此文件中设置集群参数,例如:
    cp spark-env.sh.template spark-env.sh
    
    # 在spark-env.sh中添加或修改,例如:
    export SPARK_MASTER_HOST=localhost
    export SPARK_WORKER_MEMORY=4g # 为机器学习任务分配足够内存
    export SPARK_WORKER_CORES=2   # 指定Worker使用的CPU核心数
    

第四步:启动与验证集群

  1. 使用Spark自带的脚本启动全部服务(Master和Worker):
    cd /opt/spark
    ./sbin/start-all.sh
    
  2. 验证集群状态
    • Web UI:打开浏览器,访问 http://localhost:8080。你应该能看到一个Master节点和一个或多个Worker节点。
    • 运行测试任务:提交一个示例任务来验证集群工作是否正常。
      ./bin/spark-submit \
        --class org.apache.spark.examples.SparkPi \
        --master spark://localhost:7077 \
        ./examples/jars/spark-examples_*.jar 100
      
      如果看到输出包含 Pi is roughly 3.14 字样,则说明集群运行成功。

方案二:基于Docker搭建更“真实”的集群

如果你希望获得更贴近生产环境的体验(例如,需要与HDFS等组件配合),使用Docker是更好的选择。

核心思路:使用Docker Compose在一个配置文件中定义多个服务(如一个Spark Master容器、多个Spark Worker容器、一个HDFS容器),然后一键启动整个“集群”。

基本步骤

  1. 在你的电脑上安装Docker和Docker Compose。
  2. 编写一个 docker-compose.yml 文件,在其中定义spark-masterspark-worker服务。你可以从GitHub上搜索例如“spark-standalone-cluster-on-docker”之类的项目获取成熟的模板。
  3. 在终端中运行 docker-compose up -d,Docker会自动拉取镜像并创建网络,启动多个容器。
  4. 同样可以通过 http://localhost:8080 访问Master Web UI,并提交作业。

为机器学习模型训练优化配置

搭建好集群后,进行机器学习训练时需要注意以下几点:

  • 分配足够资源:在spark-env.sh中,确保为每个Worker(SPARK_WORKER_MEMORY)和每个Executor(通过spark-submit提交任务时指定 --executor-memory)分配足够的内存,因为MLlib中的迭代计算和模型数据可能比较消耗内存。
  • 使用集群模式提交任务:使用spark-submit向Master URL(如spark://localhost:7077)提交你的PySpark或Scala ML训练程序。
  • 管理依赖:确保所有Worker节点(在本机集群中就是你的电脑)都安装了机器学习任务所需的Python库(如numpy, pandas)。在集群环境下,通常推荐在提交作业时通过 --py-files 参数打包分发依赖。

重要提醒

  • 性能限制:伪集群的所有进程共享同一台机器的CPU、内存和磁盘I/O,因此其“分布式”计算能力的上限就是你这台电脑的硬件上限。
  • 主要用于学习:这种模式的主要目的是学习和开发,让你熟悉Spark的分布式编程模型和作业提交流程,为将来在真正的多服务器集群上运行任务做好准备。
  • Windows系统注意事项:如果你使用的是Windows系统,除了安装Java和Spark,可能还需要额外的步骤,例如下载winutils.exe并设置HADOOP_HOME环境变量,以解决与本地文件系统相关的问题。Spark的集群启动脚本(start-all.sh)在Windows上不支持,你需要手动启动Master和Worker进程。

总结来说,对于你的需求,建议从“方案一:Spark独立模式”开始,它能最直接地满足你“搭建集群”并进行模型训练的学习目标。如果想更深入地研究,可以后续尝试Docker方案。

你目前使用的是Windows、macOS还是Linux系统?了解你的操作系统后,我可以提供一些更具体的环境配置建议。