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

PySpark Standalone 集群部署教程

目录

1. 环境准备

1.1 配置免密登录

2. 下载并配置Spark

3. 配置Spark集群

3.1 配置spark-env.sh

3.2 配置spark-defaults.conf

3.3 设置Master和Worker节点

 3.4 设配置log4j.properties

3.5 同步到所有Worker节点

4. 启动Spark Standalone集群

4.1 启动Master节点

4.2 启动Worker节点

4.3 启动日志服务

5. 测试Spark集群

5.1 提交测试任务

6. 管理Spark集群

6.1 停止Spark集群

7. 常见问题

7.1 防火墙问题

7.2 Java版本不兼容


1. 环境准备

在开始之前,请确保集群中所有节点满足以下要求:

  • 操作系统:建议使用Linux(CentOS或Ubuntu)
  • Java:JDK 1.8或以上版本
  • Python:若使用PySpark,请安装Python 3.6以上版本
  • 网络配置:确保各节点之间的SSH无密码登录已配置

在本教程中,将采用以下的集群结构:

  • Master节点:负责管理资源分配和任务调度
  • Worker节点:实际执行任务

1.1 配置免密登录

在Master节点上配置SSH免密登录,方便自动化管理和任务分发。

ssh-keygen -t rsa # 生成密钥对
ssh-copy-id user@worker1 # 将公钥复制到worker1节点
ssh-copy-id user@worker2 # 将公钥复制到worker2节点

确认免密登录配置成功后,可以继续下一步。

2. 下载并配置Spark

PySpark单机模式安装教程

(按照PySpark单机模式安装教程将其他Work节点也安装Anaconda)

# 解压安装
cd /opt/modules
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs
# 重命名
cd /opt/installs
mv spark-3.1.2-bin-hadoop3.2 spark-standalone
# 重新构建软连接
rm -rf spark
ln -s spark-standalone spark

3. 配置Spark集群

3.1 配置spark-env.sh

$SPARK_HOME/conf目录下:

  1. 复制模板文件spark-env.sh.template并重命名为spark-env.sh:

    cd /opt/installs/spark/conf
    mv spark-env.sh.template spark-env.sh
    
  2. spark-env.sh文件中添加以下内容:

    # 22行:申明JVM环境路径以及Hadoop的配置文件路径
    export JAVA_HOME=/opt/installs/jdk
    export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
    # 60行左右
    export SPARK_MASTER_HOST=bigdata01 # 主节点所在的地址
    export SPARK_MASTER_PORT=7077 #主节点内部通讯端口,用于接收客户端请求
    export SPARK_MASTER_WEBUI_PORT=8080 #主节点用于供外部提供浏览器web访问的端口
    export SPARK_WORKER_CORES=1     # 指定这个集群总每一个从节点能够使用多少核CPU
    export SPARK_WORKER_MEMORY=1g   #指定这个集群总每一个从节点能够使用多少内存
    export SPARK_WORKER_PORT=7078
    export SPARK_WORKER_WEBUI_PORT=8081
    export SPARK_DAEMON_MEMORY=1g  # 进程自己本身使用的内存
    export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://bigdata01:9820/spark/eventLogs/ -Dspark.history.fs.cleaner.enabled=true"
    # Spark中提供了一个类似于jobHistoryServer的进程,就叫做HistoryServer, 用于查看所有运行过的spark程序
  3. 在HDFS上创建程序日志存储目录(首先如果没有启动hdfs,需要启动一下)

    # 第一台机器启动HDFS
    start-dfs.sh
    # 创建程序运行日志的存储目录
    hdfs dfs -mkdir -p /spark/eventLogs/

3.2 配置spark-defaults.conf

 在$SPARK_HOME/conf目录下:

  1. 复制模板文件spark-defaults.conf并重命名为spark-defaults.conf:

    mv spark-defaults.conf.template spark-defaults.conf
    vim spark-defaults.conf
  2. spark-env.sh文件中添加以下内容:

    # 末尾
    spark.eventLog.enabled           true
    spark.eventLog.dir              hdfs://bigdata01:9820/spark/eventLogs
    spark.eventLog.compress              true

3.3 设置Master和Worker节点

$SPARK_HOME/conf目录下:

  1. 复制模板文件workers.template并重命名为workers

    mv workers.template workers
  2. workers文件中添加所有Worker节点的IP或主机名,例如:

    # 删掉localhost,添加以下内容
    bigdata01
    bigdata02
    bigdata03

 3.4 设配置log4j.properties

$SPARK_HOME/conf目录下:

  1. 复制模板文件log4j.properties.template并重命名为log4j.properties:

    mv log4j.properties.template log4j.properties
  2. 在log4j.properties文件中添修改以下内容:

    # 19行:修改日志级别为WARN
    log4j.rootCategory=WARN, consolelog4j的5种 级别  debug --> info --> warn --error -->fatal

3.5 同步到所有Worker节点

将Master的spark同步到其他Worker节点

scp $SPARK_HOME user@worker1:$SPARK_HOME
scp $SPARK_HOME user@worker2:$SPARK_HOME

(也可以使用文件分发脚本xsync.sh将整个spark文件同步给其他节点)

同时,在其他节点创建软链接(命令同步执行脚本xcall.sh):

cd /opt/installs/
ln -s spark-standalone spark换个思路,是否可以同步软链接:
xsync.sh /opt/installs/spark

4. 启动Spark Standalone集群

4.1 启动Master节点

在Master节点上执行以下命令启动Master服务:

# 启动master:
cd /opt/installs/spark
sbin/start-master.sh

Master启动成功后,可以在http://<Master_IP>:8080查看集群的Web UI(8080为默认端口)。

4.2 启动Worker节点

在Master节点上,通过以下命令启动所有Worker节点:

# 启动所有worker:
sbin/start-workers.sh
# 如果你想启动某一个worker
sbin/start-worker.sh

4.3 启动日志服务

在Master节点上,通过以下命令启动日志服务:

# 启动日志服务:
sbin/start-history-server.sh

5. 测试Spark集群

5.1 提交测试任务

可以通过以下命令提交一个简单的Spark任务来测试集群是否配置成功:

$SPARK_HOME/bin/spark-submit --master spark://<Master_IP>:7077 \ --class org.apache.spark.examples.SparkPi \ $SPARK_HOME/examples/jars/spark-examples*.jar 10

运行后,观察任务的运行结果,若无错误信息,说明集群部署成功。

6. 管理Spark集群

6.1 停止Spark集群

可以在Master节点上执行以下命令停止集群:

$SPARK_HOME/sbin/stop-all.sh# 要想关闭某个服务,将start换为stop

也可以分别在Master和Worker节点上使用stop-master.shstop-worker.sh命令来单独停止服务。

7. 常见问题

7.1 防火墙问题

如果无法访问Web UI,请检查是否需要开放8080端口,或使用防火墙命令允许通信:

# 防火墙状态命令:
systemctl status firewalld
# 关闭防火墙命令:
systemctl stop firewalld(重启后防火墙还是会自动开启)
# 开启防火墙命令:
systemctl  start firewalld
# 重启防火墙命令:
systemctl  restart firewalld
# 开机启动防火墙命令:
systemctl enable firewalld
# 开机不启动防火墙命令:
systemctl disable firewalld

7.2 Java版本不兼容

确保所有节点上的Java版本一致,以避免运行时出现兼容性问题。


至此,您已成功部署了Spark Standalone集群,并验证了基本的任务提交。Standalone集群适用于中小规模数据处理需求,便于简单、高效地管理Spark资源。

http://www.lryc.cn/news/473826.html

相关文章:

  • 【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】
  • 9.排队模型-M/M/1
  • 【GO学习笔记 go基础】编译器下载安装+Go设置代理加速+项目调试+基础语法+go.mod项目配置+接口(interface)
  • 从0开始学习shell脚本
  • 官方工具重装Windows 11当前版本 /绕过硬件检查/免U盘
  • JavaEE初阶---网络原理/UDP服务器客户端程序
  • 每天10个vue面试题(六)
  • Qt:信号和槽
  • 可以免费商用的字体下载
  • centos7之LVS-TUNNEL模式
  • Linux驱动开发(3):字符设备驱动
  • 刘艳兵-DBA023-控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息:
  • Vue Scoped CSS深度解析:原理、误区与最佳实践
  • 744. 寻找比目标字母大的最小字母
  • 浅谈QT中Tab键的切换逻辑
  • 基于MoviNet检测视频中危险暴力行为
  • 《等保测评:抵御网络威胁的盾牌》
  • 前端必知必会-JavaScript 对象属性
  • 双11都有什么值得入手的好物?双十一最建议买的5样东西
  • Xcode 15.4 运行flutter项目,看不到报错信息详情?
  • AMD开始为基于RDNA的GPU开发自己的神经超采样和去噪技术
  • Python中的文件I/O操作
  • .net framework 3.5sp1开启错误进度条不动如何解决
  • 什么影响网站的SEO排名
  • css绘制s型(grid)
  • 【华为HCIP实战课程二十八】中间到中间系统协议IS-IS邻居关系排错,网络工程师
  • Word首行空格不显示空格符号问题
  • vue+element上传图片
  • 用ChatGPT提升工作效率:从理论到实际应用
  • 8、Node.js Express框架