
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。因此,从本质上说,Spark是一个计算引擎;从应用场景上说,Spark专门应用于大数据处理场景。
基于开源的Spark源码,本项目旨在阅读并深入分析Spark源码,理解Spark的底层实现原理,了解性能优化和部署方案的相关知识,提升个人架构设计、程序设计等方面的能力。
一,在大数据处理方面,相比于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 core,二是分析Spark Streaming,三是分析Spark SQL,四是分析Spark GraphX。四部分中core模块内容较多,经组内讨论该部分由两个人完成,其余部分均为一人完成分析。项目成员按照实施计划与分工稳步推进,迭代开发,在一学期内完成预期成果。
在本次项目中,由我担任队长,并负责分析Spark core的部分内容,包括任务配置信息、jar包依赖、中间结果计算缓存、shuffle过程分析等板块。
我希望能够借助此次软件工程应用与实践的机会,对Spark的基本框架有一个比较清晰的认识,对Spark的一些基本的底层实现原理形成比较深刻的理解,建立阅读源码、分析源码的兴趣,培养相应的能力。