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)

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.mzph.cn/bicheng/58800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各类素材网站下载主题源码 CeoDocs v3.6 开心版

WordPress付费办公素材下载主题 – 各类素材网站下载主题 CeoDocs_v3.6_开心版CeoDocs主题是一款轻量级、 且简洁大气、付费素材下载类型主题&#xff0c;定位于办公素材行业&#xff0c;当然也适用于办公文档、PPT模板、设计素材、 图片素材、音效素材、视频素材各类素材网站…

【H2O2|全栈】JS进阶知识(三)jQuery(3)

目录 前言 开篇语 准备工作 $ 拷贝 浅拷贝和深拷贝 节点拷贝 $ 正则表达式 概念 创建 正则校验 匹配条件 边界符 范围匹配 量词 值类型 字符串正则匹配替换 $ 遍历 结束语 前言 开篇语 本系列博客主要分享JavaScript的进阶语法知识&#xff0c;本期为第三期…

flask+celery处理异步任务

celery是一个强大的分布式任务队列&#xff0c;在这里我们介绍一下它最基本的处理异步任务的功能&#xff0c;包含以下几个&#xff1a; 创建Celery实例 创建一个异步任务 查询异步任务的信息 取消异步任务 使用的环境是flask3.0Celery5.4 1. 创建Celery实例 celery通过…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…

Redis-发布/订阅交互模式

文章目录 一、消息代理介绍二、Redis中客户端、服务器之间的交互模式介绍三、Redis发布/订阅交互模式的操作 一、消息代理介绍 “消息代理”&#xff08;Message Broker&#xff09;是一种软件组件&#xff0c;它在不同的应用程序之间传递消息。在Redis的上下文中&#xff0c;…

利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布

部分借鉴地址: https://support.huaweicloud.com/intl/zh-cn/bestpractice-cce/cce_bestpractice_10002.html 1.原理介绍 用户通常使用无状态负载 Deployment、有状态负载 StatefulSet等Kubernetes对象来部署业务&#xff0c;每个工作负载管理一组Pod。以Deployment为例&#x…

SpringBoot集成Shiro+Jwt+Redis

概述 首先需要知道为什么使用 ShiroJwtRedis 进行登录认证和权限控制。 1. 为什么用Shiro&#xff1f; 主要用的是 shiro 里面的登录认证和权限控制功能。 2. 为什么用Jwt&#xff1f; Shiro 默认的 Session 机制来帮助实现权限管理&#xff0c;用于维护用户的状态信息。而 …

Docker Compose --- 管理多容器应用

用于定义和运行多容器 Docker 应用程序。通过 Compose&#xff0c;用户可以使用 YAML 文件来配置应用程序的服务、网络和卷等资源 简化多容器的管理和部署过程 以下compose.yaml示例展示如何部署两个服务WordPress 和 MySQL的环境 version: 3.8 # 指定 Docker Compose 文件的…

18.04Ubuntu遇到Unable to locate package

解决办法&#xff1a; 要先升级你的apt Sudo apt-get update

Django ORM详解:外键使用(外键逻辑关联)与查询优化

Django数据库迁移 # 创建迁移 python manage.py makemigrations your_app_name # 应用迁移 python manage.py migrate # 查看迁移状态 python manage.py showmigrations # 回滚迁移 python manage.py migrate your_app_name 0001 # 修改表后,删除迁移记录和表删除迁移记录后重…

redis做缓存,mysql的数据怎么与redis进行同步(双写一致性)

基于业务做选择,强一致性和允许延迟再加消息队列 强一致性:当修改了数据库的数据同时更新缓存的数据,缓存和数据库的数据保持一致 读操作:缓存命中,直接返回数据,缓存没有命中,查询数据库,写入缓存,设定过期时间 写操作:延迟双删 :先删除缓存,修改数据库,等待延迟(数据库主从节…

《安全基石:等保测评的全方位解读》

在数字化转型的浪潮中&#xff0c;网络安全已成为企业生存与发展的核心议题。等保测评&#xff0c;作为我国网络安全等级保护制度的重要组成部分&#xff0c;不仅是企业安全的基石&#xff0c;更是推动企业高质量发展的关键。本文将全面解读等保测评的内涵、作用及其对企业的深…

(五)Spark大数据开发实战:灵活运用PySpark常用DataFrame API

目录 一、PySpark 二、数据介绍 三、PySpark大数据开发实战 1、数据文件上传HDFS 2、导入模块及数据 3、数据统计与分析 ①、计算演员参演电影数 ②、依次罗列电影番位前十的演员 ③、按照番位计算演员参演电影数 ④、求每位演员所有参演电影中的最早、最晚上映时间及…

一些CSS的基础知识点

写在前面 Cascading Style Sheets&#xff08;CSS&#xff09;是用于描述网页样式和布局的标记语言。它允许开发者将内容与表示分离&#xff0c;从而使得网页的设计和结构更加清晰和易于维护。本文将详细介绍CSS的基础知识点&#xff0c;帮助初学者快速掌握CSS的核心概念和应用…

SpringFactoriesLoader

1.什么是SPI (面试题) SPI全名Service Provider interface&#xff0c;翻译过来就是“服务提供接口”&#xff0c;再说简单就是提供某一个服务的接口&#xff0c; 提供给服务开发者或者服务生产商来进行实现。 Java SPI 是JDK内置的一种动态加载扩展点的实现。 这个机制在一…

Apifox 10月更新|测试步骤支持添加脚本和数据库操作、测试场景支持回收站、变量支持「秘密」类型

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; 自动化测试模块能力持续升级 测试步骤支持添加「脚本」和「数据库操作」 测试场景和定时任务支持回收站内恢复 定时任务支持设置以分钟频率运行 导入…

「C/C++」C++标准库之#include<fstream>文件流

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

liunx网络套接字 | 实现基于tcp协议的echo服务

前言&#xff1a;本节讲述linux网络下的tcp协议套接字相关内容。博主以实现tcp服务为主线&#xff0c;穿插一些小知识点。以先粗略实现&#xff0c;后精雕细琢为思路讲述实现服务的过程。下面开始我们的学习吧。 ps&#xff1a;本节内容建议了解网络端口号的友友们观看哦。 目录…

第十六课 Vue中的组件

Vue中的组件 Vue中可以自定义模板组件&#xff0c;组件的写法有很多种 组件写法 1&#xff09;在components上拓展组件 <div id"app"><test></test></div><script>new Vue({el:#app,components: {test: {template: <h1>这是一…

nmcli、ip、ifcfg配置网络区分方法

文章目录 一、检查NetworkManager状态使用nmcli命令&#xff1a;检查NetworkManager服务状态&#xff1a; 二、检查ip命令的使用三、检查ifcfg文件查看/etc/sysconfig/network-scripts/目录&#xff1a;查看/etc/network/interfaces文件&#xff08;针对Debian系&#xff09;&a…