写点什么

大数据 -81 Spark 手把手搭建 分布式计算环境:从下载配置到多节点部署

作者:武子康
  • 2025-08-29
    山东
  • 本文字数:3571 字

    阅读完需:约 12 分钟

大数据-81 Spark 手把手搭建 分布式计算环境:从下载配置到多节点部署

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI 篇持续更新中!(长期更新)

AI 炼丹日志-31- 千呼万唤始出来 GPT-5 发布!“快的模型 + 深度思考模型 + 实时路由”,持续打造实用 AI 工具指南!📐🤖

💻 Java 篇正式开启!(300 篇)

目前 2025 年 08 月 18 日更新到:Java-100 深入浅出 MySQL 事务隔离级别:读未提交、已提交、可重复读与串行化 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解


章节内容

上节我们完成了:


  • Spark 简单介绍

  • Spark 的特点

  • Spark 与 Hadoop MapReduce 框架对比

  • Spark 的系统架构

  • Spark 的部署模式


Spark 简介

上节我们已经介绍过了,这里为了保持完整性,简单的再扩展介绍一下。Spark(Apache Spark)是一个快速、通用的分布式数据处理框架,旨在以高效的方式进行大规模数据的处理和分析。它最初由加利福尼亚大学伯克利分校 AMPLab 开发,并在 2010 年开源。如今,Spark 已经成为大数据处理领域的重要工具之一,广泛应用于许多行业。Spark 凭借其速度、通用性和易用性,成为大数据处理领域的一项关键技术。无论是处理批量数据还是实时数据,亦或是进行机器学习和图计算,Spark 都提供了强大的支持。如果你在寻找一个高效的大数据处理框架,Spark 无疑是一个值得考虑的选择。

核心特性

速度优势

  • 内存计算引擎:Spark 采用基于内存的分布式计算框架,通过在集群内存中缓存中间计算结果,显著减少磁盘 I/O 操作。典型场景下,迭代算法(如机器学习)性能提升尤为明显,相比 Hadoop MapReduce 可实现 10-100 倍的加速。

  • 智能缓存机制:支持 MEMORY_ONLY、MEMORY_AND_DISK 等多种存储级别策略,当内存不足时自动将部分数据溢出到磁盘,例如在 Spark SQL 查询中,常用表可被持久化缓存以加速后续查询。

  • 执行优化:通过 DAG 调度器将任务分解为有向无环图,配合 Tungsten 引擎的二进制内存管理,减少 JVM 对象开销。例如,在 TPC-DS 基准测试中,Spark 3.0 比早期版本性能提升 2 倍以上。

通用计算平台

  • 多语言支持:提供 Java/Scala 原生 API(核心实现)、Python(PySpark)和 R(SparkR)接口。如在 Jupyter Notebook 中可直接使用 PySpark 进行数据分析。

  • 统一计算引擎

  • 批处理:通过 RDD/DataFrame 处理 PB 级数据

  • 流处理:Structured Streaming 支持微批和持续处理模式

  • 机器学习:MLlib 库包含常见算法实现(如随机森林、K-means)

  • 图计算:GraphX 支持 Pregel API,适用于社交网络分析等场景

  • 生态系统集成:可与 HDFS、Hive、Kafka 等大数据组件无缝对接,例如通过 Spark Streaming 消费 Kafka 实时数据流。

开发者友好性

  • 抽象层次

  • 基础 RDD API 提供分布式集合操作(map/reduce/filter 等)

  • DataFrame API 引入 schema 概念,支持 SQL 式操作

  • 最新 Dataset API 结合类型安全与优化优势

  • 交互式工具

  • 自带 spark-shell(Scala)和 pyspark(Python)REPL 环境

  • 支持 Zeppelin、Jupyter 等笔记本工具

  • Spark SQL CLI 提供类 Hive 的查询体验

  • 学习资源:保持与 Hadoop 相似的 MapReduce 编程范式,但提供更简洁的 lambda 表达式写法,例如 WordCount 示例代码量减少 60%。

弹性扩展能力

  • 集群部署

  • 支持 Standalone 模式快速搭建测试集群

  • 原生集成 YARN,可复用 Hadoop 集群资源

  • 通过 K8s Operator 实现容器化部署

  • 资源调度

  • 动态资源分配(DRA)根据负载自动调整 executor 数量

  • 支持公平调度(Fair Scheduler)满足多租户需求

  • 规模验证:实际生产环境中已验证可处理 EB 级数据,如在某互联网公司的推荐系统每天处理超过 5PB 的用户行为数据。

Spark 的组件

Spark Core

作为 Spark 的核心基础模块,Spark Core 提供了分布式计算的基本功能。它实现了以下关键机制:


  1. 内存管理:采用弹性分布式数据集(RDD)的内存缓存机制,通过内存计算显著提升计算速度

  2. 任务调度:基于 DAG(有向无环图)的任务调度系统,支持任务依赖关系管理和优化执行

  3. 容错机制:通过 RDD 的 Lineage(血统)信息实现数据恢复,无需数据复制即可保证容错

  4. 存储系统交互:支持 HDFS、HBase、Cassandra 等多种存储系统,提供统一的访问接口


典型应用场景:ETL 处理、迭代算法(如 PageRank)、交互式数据分析等

Spark SQL

结构化数据处理模块,主要功能包括:


  1. DataFrame API:提供类似 R/Pandas 的 DataFrame 抽象,支持结构化操作

  2. SQL 支持:完整兼容 ANSI SQL 标准,支持常见 SQL 操作

  3. 数据源集成:

  4. 内置支持 Parquet、JSON、JDBC 等格式

  5. 通过 Hive 兼容层可访问 Hive 元数据和表数据

  6. 支持自定义数据源扩展

  7. 优化器:基于 Catalyst 的查询优化器,自动优化执行计划


应用示例:数据仓库分析、报表生成、交互式查询等

Spark Streaming

实时流处理解决方案,特点包括:


  1. 微批处理架构:将流数据划分为小批次(如 2 秒)进行处理

  2. 精确一次语义:保证每个记录只被处理一次

  3. 窗口操作:支持滑动窗口、统计窗口等时间窗口操作

  4. 与批处理集成:可与 Spark SQL、MLlib 等无缝结合


典型应用场景:实时监控、日志分析、实时推荐系统等

MLlib

分布式机器学习库,主要提供:


  1. 算法实现:

  2. 分类:逻辑回归、决策树、随机森林等

  3. 回归:线性回归、保序回归等

  4. 聚类:K-means、LDA 等

  5. 协同过滤:ALS(交替最小二乘)

  6. 工具链:

  7. 特征工程:TF-IDF、Word2Vec、标准化等

  8. 流水线:提供类似 scikit-learn 的 Pipeline API

  9. 模型评估:交叉验证、多种评估指标

  10. 模型持久化:支持模型保存和加载


应用场景:用户画像、推荐系统、风险预测等

GraphX

图计算框架,主要功能:


  1. 图抽象:提供属性图(带属性的顶点和边)表示

  2. 图操作:

  3. 基础操作:子图筛选、顶点/边映射等

  4. 图算法:PageRank、连通组件、三角形计数等

  5. 图并行计算:基于 Pregel API 实现大规模图计算

  6. 与 RDD 互操作:可与普通 RDD 相互转换


典型应用:社交网络分析、交通网络分析、推荐系统等

使用场景

Spark 广泛应用于各种需要大规模数据处理的场景,包括但不限于:


  • 批处理:处理大量历史数据,如日志分析、ETL 操作。

  • 流处理:实时数据分析和处理,如网络监控、实时推荐系统。

  • 机器学习:大规模数据上的机器学习任务,如推荐系统、文本分类。

  • 交互式查询:通过 Spark SQL 对大数据集进行快速查询和分析。

  • 图计算:处理社交网络、推荐系统中的复杂图结构数据。

下载文件

我们到官方地址下载:


https://archive.apache.org/dist/spark/
复制代码


页面如下,为了保证稳定和学习的方便,我用了比较老的版本:2.4.5



我们选择:without-hadoop-scala 这种版本,可以不用安装配置 Scala:


https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-without-hadoop-scala-2.12.tgz
复制代码


解压配置

我们可以使用 wget 或者其他工具来完成文件的下载,我这里是传到服务器上:


cd /opt/software/wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-without-hadoop-scala-2.12.tgz
复制代码



下载完成后,我们进行解压并移动到指定位置:


cd /opt/software/tar zxvf spark-2.4.5-bin-without-hadoop-scala-2.12.tgz
复制代码



移动目录到 servers 下(之前的规范):


mv spark-2.4.5-bin-without-hadoop-scala-2.12 ../servers
复制代码


环境变量

vim /etc/profile# sparkexport SPARK_HOME=/opt/servers/spark-2.4.5-bin-without-hadoop-scala-2.12export PATH=$PATH:$SPARK_HOME/bin
复制代码


配置完的结果,记得刷新环境变量


修改配置

cd $SPARK_HOME/conf
复制代码

slaves

mv slaves.template slavesvim slaves
# 集群地址h121.wzk.icuh122.wzk.icuh123.wzk.icu
复制代码


配置完的样子大概如下:


spark-defaults

mv spark-defaults.conf.template spark-defaults.confvim spark-defaults.conf
# 修改配置的信息spark.master spark://h121.wzk.icu:7077spark.eventLog.enabled truespark.eventLog.dir hdfs://h121.wzk.icu:9000/spark-eventLogspark.serializer org.apache.spark.serializer.KryoSerializerspark.driver.memory 512m
复制代码


配置完的结果如下图:


创建 HDFS 目录

hdfs dfs -mkdir /spark-eventLog
复制代码

spark-env

mv spark-env.sh.template spark-env.shvim spark-env.sh
# 修改如下的配置内容export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export HADOOP_HOME=/opt/servers/hadoop-2.9.2export HADOOP_CONF_DIR==/opt/servers/hadoop-2.9.2/etc/hadoopexport SPARK_DIST_CLASSPATH=$(/opt/servers/hadoop-2.9.2/bin/hadoop classpath)export SPARK_MASTER_HOST=h121.wzk.icuexport SPARK_MASTER_PORT=7077
复制代码


配置完成截图如下:


分发软件

传输文件

使用我们之前编写的 rsync-script 工具。当然你也可以每台都配置一次也行,只要保证环境一致即可。(之前 Hadoop 等都使用过,如果你没有,你可以用复制或者别的方式)


rsync-script /opt/servers/spark-2.4.5-bin-without-hadoop-scala-2.12
复制代码


过程会很漫长,请耐心等待:



文件传输分发完毕:


环境变量

每天机器都需要配置环境变量!!!


/etc/profile
复制代码

h122 服务器

h123 服务器


发布于: 56 分钟前阅读数: 2
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-81 Spark 手把手搭建 分布式计算环境:从下载配置到多节点部署_Java_武子康_InfoQ写作社区