文章目录
- **2021SC@SDUSC**
- 一、项目背景
- 二、Spark VS Hadoop
- 三、运行环境准备
- 1.安装JDK
- 2.安装Scala
- 3.安装Spark
- 4.运行spark-shell
- 5.准备源码阅读环境
- 6.Spark源码编译与调试
- 四、Spark框架结构分析
- 五、项目分工
- 六、总结
一、项目背景
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。因此,从本质上说,Spark是一个计算引擎;从应用场景上说,Spark专门应用于大数据处理场景。
基于开源的Spark源码,本项目旨在阅读并深入分析Spark源码,理解Spark的底层实现原理,了解性能优化和部署方案的相关知识,提升个人架构设计、程序设计等方面的能力。
二、Spark VS Hadoop
一,在大数据处理方面,相比于Spark,人们往往对Hadoop更加熟悉。两者的关系在于,Spark是Hadoop中的计算框架MapReduce的替代方案,而且兼容HDFS、Hive等分布式存储系统,可融入Hadoop生态。
二,Spark拥有Hadoop MapReduce所具有的优点。但不同于MapReduce的是,Spark 采用了内存分布数据集,其中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark可以优化迭代工作负载,能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
三,Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
四,尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。
三、运行环境准备
在64位Linux环境下,配置Spark的运行环境
1.安装JDK代码如下:
cd~ vim .bash_profile
添加如下配置:
export JAVA_HOME=/opt/java export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使用如下命令检查是否安装正常:
java-version2.安装Scala
下载最新的Scala版本:
wget http://downloads.typesafe.com/scala/3.0.2/scala-3.0.2.tgz
移动安装包到目标目录并进入安装目录:
mv scala-3.0.2.tgz ~/install/ chmod 755 scala-3.0.2.tgz tar -xzvf scala-3.0.2.tgz
配置环境:
cd~ vim.bash_profile
添加配置:
export SCALA_HOME=$HOME/install/scala-3.0.2 export PATH=$PATH:$SCALA_HOME/bin:$HOME/bin
使用如下命令检查是否安装正常:
scala3.安装Spark
下载最新的Spark版本:
wget http://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop1.tgz
移动安装包到目标目录并进入安装目录:
mv spark-3.1.2-bin-hadoop1.tgz~/install/ chmod 755 spark-3.1.2-bin-hadoop1.tgz tar -xzvf spark-3.1.2-bin-hadoop1.tgz
配置环境:
cd~ vim.bash_profile
添加配置:
export SPARK_HOME=$HOME/install/spark-3.1.2-bin-hadoop14.运行spark-shell
参照网上教程即可,在此不作赘述
5.准备源码阅读环境参照网上教程即可,在此不作赘述。其中常用的IDE有IntelliJ IDEA、Eclipse两种可供选择。
6.Spark源码编译与调试该过程耗时较长,需要耐心等待
四、Spark框架结构分析
- Spark core:spark的内核,主要包含:有向循环图、RDD、Lingage、Cache、broadcast等,并封装了底层通讯框架,是其他组件的基础。
- Spark Streaming:流式处理系统,可以对多种数据源进行类似于hadoop中的Map、Reduce和Join等复杂操作,将流式计算分解成一系列短小的批处理作业。
- Spark SQL:能够统一处理关系表和RDD(弹式分布数据集),使得开发人员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析。
- Spark GraphX:分布式图计算框架,用于Spark中的图和图并行计算。
- Spark MLlib:Spark提供的可扩展的机器学习库,包含了一些通用的学习算法和工具,如:分类、回归、聚类、协同过滤、降维等。
五、项目分工
经过小组内的讨论,我们初步确定了项目的分工。
项目分为四大核心模块,一是分析Spark core,二是分析Spark Streaming,三是分析Spark SQL,四是分析Spark GraphX。四部分中core模块内容较多,经组内讨论该部分由两个人完成,其余部分均为一人完成分析。项目成员按照实施计划与分工稳步推进,迭代开发,在一学期内完成预期成果。
在本次项目中,由我担任队长,并负责分析Spark core的部分内容,包括任务配置信息、jar包依赖、中间结果计算缓存、shuffle过程分析等板块。
六、总结
我希望能够借助此次软件工程应用与实践的机会,对Spark的基本框架有一个比较清晰的认识,对Spark的一些基本的底层实现原理形成比较深刻的理解,建立阅读源码、分析源码的兴趣,培养相应的能力。



