spark的安装与应用

Spark 安装与应用指南

一、Spark 简介

Apache Spark 是一个快速、通用的集群计算系统,提供了高级 API(Java、Scala、Python 和 R)以及支持通用执行图的优化引擎。它支持丰富的高级工具集,包括用于 SQL 和结构化数据处理的 Spark SQL,用于机器学习的 MLlib,用于图形处理的 GraphX 以及用于增量计算和流处理的 Spark Streaming。

二、Spark 安装

1. 安装前准备

  • Java 环境:Spark 需要 Java 8 或更高版本

  • Python 环境(可选):如果使用 PySpark 需要 Python 3.6+

  • Scala 环境(可选):如果使用 Scala API

2. 下载 Spark

从官方下载页面获取最新版本:

复制

下载

https://spark.apache.org/downloads.html

选择适合的版本和包类型(Pre-built for Hadoop 版本或源代码)

3. 安装步骤

Linux/MacOS 安装

bash

复制

下载

# 下载(示例版本3.3.0,Hadoop3.3)
wget https://archive.apache.org/dist/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz

# 解压
tar -xzf spark-3.3.0-bin-hadoop3.tgz

# 移动到合适目录
mv spark-3.3.0-bin-hadoop3 /opt/spark

# 设置环境变量
echo 'export SPARK_HOME=/opt/spark' >> ~/.bashrc
echo 'export PATH=$PATH:$SPARK_HOME/bin' >> ~/.bashrc
source ~/.bashrc
Windows 安装
  1. 下载并解压 Spark 到指定目录(如 C:\spark)

  2. 设置环境变量:

    • SPARK_HOME = C:\spark

    • 将 %SPARK_HOME%\bin 添加到 PATH

4. 验证安装

bash

复制

下载

spark-shell  # 启动Scala交互式shell
pyspark      # 启动Python交互式shell

三、Spark 核心概念

1. RDD (弹性分布式数据集)

  • 不可变的分布式对象集合

  • 可分区、可并行操作

  • 支持容错

2. DataFrame 和 Dataset

  • 结构化数据抽象

  • 提供更丰富的优化和执行计划

3. Spark 运行架构

  • Driver 程序:运行应用的 main() 函数

  • Executor:在工作节点上运行任务

  • Cluster Manager:分配资源(Standalone、YARN、Mesos)

四、Spark 应用开发

1. 使用 PySpark 示例

python

复制

下载

from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder \
    .appName("Python Spark Example") \
    .getOrCreate()

# 创建DataFrame
data = [("Alice", 34), ("Bob", 45), ("Charlie", 28)]
df = spark.createDataFrame(data, ["Name", "Age"])

# 显示数据
df.show()

# 执行SQL查询
df.createOrReplaceTempView("people")
result = spark.sql("SELECT * FROM people WHERE age >= 30")
result.show()

# 停止SparkSession
spark.stop()

2. 使用 Scala 示例

scala

复制

下载

import org.apache.spark.sql.SparkSession

object SimpleApp {
  def main(args: Array[String]) {
    val spark = SparkSession.builder
      .appName("Simple Application")
      .getOrCreate()
    
    val logData = spark.read.textFile("README.md").cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    
    println(s"Lines with a: $numAs, Lines with b: $numBs")
    
    spark.stop()
  }
}

五、Spark 集群部署

1. Standalone 模式

bash

复制

下载

# 启动master
$SPARK_HOME/sbin/start-master.sh

# 启动worker
$SPARK_HOME/sbin/start-worker.sh spark://<master-ip>:7077

# 提交应用
spark-submit --master spark://<master-ip>:7077 your_application.py

2. YARN 模式

bash

复制

下载

# 提交应用到YARN集群
spark-submit --master yarn --deploy-mode cluster your_application.py

3. 配置参数

常见配置参数:

  • --executor-memory: 每个executor的内存

  • --num-executors: executor数量

  • --executor-cores: 每个executor的CPU核心数

六、Spark 高级应用

1. Spark SQL

python

复制

下载

# 读取JSON文件创建DataFrame
df = spark.read.json("people.json")

# 注册为临时表
df.createOrReplaceTempView("people")

# SQL查询
teenagers = spark.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")
teenagers.show()

2. Spark Streaming

python

复制

下载

from pyspark.streaming import StreamingContext

# 创建StreamingContext,批次间隔1秒
ssc = StreamingContext(spark.sparkContext, 1)

# 创建DStream监听本地9999端口
lines = ssc.socketTextStream("localhost", 9999)

# 分割每行单词
words = lines.flatMap(lambda line: line.split(" "))

# 计算单词计数
pairs = words.map(lambda word: (word, 1))
wordCounts = pairs.reduceByKey(lambda x, y: x + y)

# 打印结果
wordCounts.pprint()

# 启动流计算
ssc.start()
ssc.awaitTermination()

3. MLlib 机器学习

python

复制

下载

from pyspark.ml.classification import LogisticRegression

# 加载训练数据
training = spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")

# 创建逻辑回归模型
lr = LogisticRegression(maxIter=10, regParam=0.3, elasticNetParam=0.8)

# 拟合模型
lrModel = lr.fit(training)

# 打印模型参数
print("Coefficients: " + str(lrModel.coefficients))
print("Intercept: " + str(lrModel.intercept))

七、性能优化技巧

  1. 数据序列化:使用Kryo序列化

    scala

    复制

    下载

    conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
  2. 内存管理:调整内存分配比例

    复制

    下载

    spark.memory.fraction
    spark.memory.storageFraction
  3. 数据本地性:尽量让计算靠近数据

  4. 分区优化

    • 合理设置分区数:repartition()

    • 避免数据倾斜

  5. 缓存策略:合理使用persist()cache()

八、常见问题解决

  1. 内存不足

    • 增加executor内存

    • 减少每个任务的数据量

    • 调整内存分配比例

  2. 任务失败

    • 检查日志中的错误信息

    • 增加任务重试次数

  3. 性能瓶颈

    • 使用Spark UI分析任务执行情况

    • 检查是否有数据倾斜

  4. 连接问题

    • 检查网络连接

    • 验证集群管理器配置

九、学习资源

  1. 官方文档:Overview - Spark 3.5.5 Documentation

  2. Spark源代码:GitHub - apache/spark: Apache Spark - A unified analytics engine for large-scale data processing

  3. 在线课程:Coursera, edX上的大数据课程

  4. 书籍:《Learning Spark》、《Spark权威指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值