news 2026/4/24 3:14:18

在CentOS 8上,我如何用一台机器搞定Spark伪分布式环境(附防火墙端口配置)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在CentOS 8上,我如何用一台机器搞定Spark伪分布式环境(附防火墙端口配置)

在CentOS 8上从零搭建Spark伪分布式环境的完整指南

作为一个长期在单机环境下折腾大数据技术栈的开发者,我深知在有限资源下搭建Spark环境的痛点。本文将分享我在CentOS 8系统上配置Spark伪分布式环境的完整过程,包括那些官方文档没提到的细节问题和实用技巧。

1. 环境准备与基础配置

在开始之前,我们需要确保系统环境干净且一致。我使用的是CentOS 8.5 minimal安装版本,这个版本去除了许多不必要的组件,特别适合作为开发环境的基础。

1.1 系统基础设置

首先更新系统并安装基础工具:

sudo dnf update -y sudo dnf install -y wget curl tar vim net-tools

然后设置主机名(这里以spark-master为例):

sudo hostnamectl set-hostname spark-master echo "127.0.0.1 spark-master" | sudo tee -a /etc/hosts

1.2 创建专用用户

为了避免权限问题,我建议创建一个专门用于运行Spark的用户:

sudo useradd -m sparkuser sudo passwd sparkuser

将用户添加到sudoers列表(仅限测试环境):

echo "sparkuser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

2. Java环境配置

Spark运行依赖Java环境,以下是详细的JDK安装步骤:

2.1 安装OpenJDK 8

虽然Oracle JDK也可以使用,但我更推荐OpenJDK:

sudo dnf install -y java-1.8.0-openjdk-devel

验证安装:

java -version javac -version

2.2 环境变量配置

编辑~/.bashrc文件,添加以下内容:

export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) export PATH=$PATH:$JAVA_HOME/bin

然后使配置生效:

source ~/.bashrc

提示:使用readlink -f可以自动定位Java安装路径,避免手动指定可能出现的路径错误

3. Hadoop伪分布式环境

虽然Spark可以独立运行,但配置Hadoop环境可以获得完整的HDFS支持。

3.1 下载与安装

下载Hadoop 3.3.6并解压:

wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz sudo tar -xzf hadoop-3.3.6.tar.gz -C /opt/ sudo ln -s /opt/hadoop-3.3.6 /opt/hadoop sudo chown -R sparkuser:sparkuser /opt/hadoop*

3.2 核心配置

编辑/opt/hadoop/etc/hadoop/core-site.xml:

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://spark-master:9000</value> </property> </configuration>

编辑/opt/hadoop/etc/hadoop/hdfs-site.xml:

<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>

3.3 初始化与启动

格式化HDFS:

hdfs namenode -format

启动HDFS服务:

start-dfs.sh

验证HDFS状态:

hdfs dfsadmin -report

4. Spark伪分布式安装

4.1 下载与解压

选择与Hadoop版本兼容的Spark版本:

wget https://archive.apache.org/dist/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz sudo tar -xzf spark-3.4.1-bin-hadoop3.tgz -C /opt/ sudo ln -s /opt/spark-3.4.1-bin-hadoop3 /opt/spark sudo chown -R sparkuser:sparkuser /opt/spark*

4.2 关键配置

编辑/opt/spark/conf/spark-env.sh:

cp /opt/spark/conf/spark-env.sh.template /opt/spark/conf/spark-env.sh echo "export SPARK_MASTER_HOST=spark-master" >> /opt/spark/conf/spark-env.sh echo "export SPARK_MASTER_PORT=7077" >> /opt/spark/conf/spark-env.sh echo "export SPARK_WORKER_CORES=2" >> /opt/spark/conf/spark-env.sh echo "export SPARK_WORKER_MEMORY=2g" >> /opt/spark/conf/spark-env.sh

配置workers文件:

echo "spark-master" > /opt/spark/conf/workers

4.3 环境变量设置

在~/.bashrc中添加:

export SPARK_HOME=/opt/spark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

5. 防火墙与端口配置

CentOS 8使用firewalld作为防火墙管理工具,需要开放以下关键端口:

端口号用途协议
7077Spark Master通信TCP
8080Spark Web UITCP
8081Worker Web UITCP
9000HDFS NameNodeTCP
9864HDFS DataNodeTCP

执行以下命令开放端口:

sudo firewall-cmd --permanent --add-port=7077/tcp sudo firewall-cmd --permanent --add-port=8080-8081/tcp sudo firewall-cmd --permanent --add-port=9000/tcp sudo firewall-cmd --permanent --add-port=9864/tcp sudo firewall-cmd --reload

验证端口开放状态:

sudo firewall-cmd --list-ports

6. 启动与验证

6.1 启动Spark集群

start-master.sh start-workers.sh

检查进程是否正常运行:

jps

应该能看到以下进程:

  • Master
  • Worker
  • NameNode
  • DataNode

6.2 Web UI访问

Spark Master Web UI默认在8080端口:

http://<your-server-ip>:8080

Spark Worker Web UI默认在8081端口:

http://<your-server-ip>:8081

6.3 运行测试任务

提交一个简单的Pi计算任务:

spark-submit --class org.apache.spark.examples.SparkPi \ --master spark://spark-master:7077 \ /opt/spark/examples/jars/spark-examples_2.12-3.4.1.jar 100

7. 常见问题解决

在实际搭建过程中,我遇到了几个典型问题:

  1. 端口冲突问题

    • 如果8080端口被占用,可以在spark-env.sh中设置:
      export SPARK_MASTER_WEBUI_PORT=8088
  2. 内存不足问题

    • 调整worker内存设置:
      export SPARK_WORKER_MEMORY=1g
  3. SSH免密登录问题

    • 虽然是单节点,但Spark仍然需要SSH本地登录:
      ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
  4. HDFS权限问题

    • 在core-site.xml中添加:
      <property> <name>hadoop.http.staticuser.user</name> <value>sparkuser</value> </property>

8. 性能优化建议

即使是伪分布式环境,适当的优化也能提升开发体验:

  1. 资源配置调整

    • 根据机器配置调整executor内存和核心数
    • 在spark-defaults.conf中设置:
      spark.executor.memory 2g spark.executor.cores 2
  2. 日志级别调整

    • 编辑log4j.properties:
      log4j.rootCategory=WARN, console
  3. 本地磁盘缓存

    • 启用Spark的本地磁盘缓存:
      export SPARK_LOCAL_DIRS=/tmp/spark
  4. JVM调优

    • 在spark-env.sh中添加:
      export SPARK_DAEMON_JAVA_OPTS="-XX:+UseG1GC"

在实际项目中,我发现伪分布式环境足够应对大多数开发测试场景。通过Web UI监控任务执行情况,配合适当的日志级别设置,可以快速定位问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 3:13:20

买推客系统,认准这几点不踩雷

私域裂变、门店拓客、电商带货、短剧分销&#xff0c;现在几乎所有商家&#xff0c;都离不开推客分销模式。市面上推客系统五花八门&#xff0c;低价模板、盗版源码、贴牌套壳、阉割功能版本遍地都是&#xff0c;很多商家盲目入手后&#xff0c;漏单丢客、佣金错乱、风控封号、…

作者头像 李华
网站建设 2026/4/24 3:12:38

AI 永远不会因为留了隐患被叫去解释

工匠精神这个词在行业里被提得不少&#xff0c;但实际上说的是什么&#xff1f;不是说把代码写得漂亮&#xff0c;而是对自己、对团队、对客户的全面负责。你设计的模块要能跑通仿真&#xff0c;要能过形式验证&#xff0c;要能在硅上正常工作。你写的文档要让下一个接手的人看…

作者头像 李华
网站建设 2026/4/24 3:12:26

地瓜机器人RDKx5部署YOLOv8

地瓜机器人RDKX5开发工具的安装 Sunrise5芯片是地平线公司开发的一款人工智能芯片。RDKX5是地瓜机器人基于其的开发套件。 整个开发工具链和环境需要再PC端和开发板边缘端两个部分。 PC环境安装 安装虚拟机或linux原生环境 这里网上有很多教程,自行安装。博主用的是甲骨文的…

作者头像 李华
网站建设 2026/4/24 3:08:34

VTJ 低代码 DSL 开发实战指南

① 环境搭建与 VTJ 平台快速接入 开始使用 VTJ 进行低代码开发&#xff0c;第一步是构建一个稳定且高效的本地开发环境。VTJ 作为一个基于 Vue 3 的企业级应用开发平台&#xff0c;其核心优势在于将可视化编排与标准代码无缝衔接。在正式动手之前&#xff0c;我们需要确保本地安…

作者头像 李华