Spark入门指南 超完整学习资源 (尾附资料)
1. Spark 概念
Spark是UC Berkeley AMP lab开发的一个丛集计算的框架,类似于Hadoop,但有很多的区别(详细见3.4)。最大的优化是让计算任务的中间结果可以储存在内存中,不需要每次都写入HDFS,更适用于需要迭代的MapReduce算法场景中,可以获得更好的效能提升。例如一次排序测试中,对100TB资料进行排序,Spark比Hadoop快三倍,并且只需要十分之一的机器。Spark丛集目前最大的可以达到8000节点,处理的资料达到PB级别,在互联网企业中应用非常广泛。
2. Spark大资料处理框架
相较于国内外较多的大资料处理框架,Spark以其低延时的出色表现,正在成为继Hadoop的MapReduce之后,新的、最具影响的大资料框架之一。以Spark为核心的整个生态圈,最底层为分散式储存系统HDFS、Amazon S3、Mesos,或者其他格式的储存系统(如HBase);资源管理采用Mesos、YARN等丛集资源管理模式,或者Spark自带的独立执行模式,以及本地执行模式。在Spark大资料处理框架中,Spark为上层多种应用提供服务。例如,Spark SQL提供SQL查询服务,效能比Hive快3~50倍;MLlib提供机器学习服务;GraphX提供图计算服务;Spark Streaming将流式计算分解成一系列短小的批处理计算,并且提供高可靠和吞吐量服务。值得说明的是,无论是Spark SQL、Spark Streaming、GraphX还是MLlib,都可以使用Spark核心API处理问题,它们的方法几乎是通用的,处理的资料也可以共享,不仅减少了学习成本,而且其资料无缝整合大大提高了灵活性。
后续我们会就几个主要应用,包括SQL,Streaming,机器学习,DataFrame, SparkR, GraphX进行详细教程讲解。基本掌握以上几部分的使用,就能体会到使用Spark的便利。
3. Spark的安装
3.1 安装前准备
安装Spark之前需要先安装Java,Scala及Python。
安装Java
实验楼环境中已经安装了JDK,这里开启桌面上的Xfce终端,执行检视Java版本:
image
可以看到实验楼的Java版本是1.8.0_60,满足Spark 1.5.1对Java版本的要求。
如果需要自己安装可以在Oracle的官网下载Java SE JDK,下载连结:http://www.oracle.com/technetwork/java/javase/downloads/index.html。
安装Scala
老版本的Spark安装前需要先装Scala,1.5.1版本可以无需这一步骤。但为了自己开发Scala程式除错的方便我们仍然安装一个最新版本2.11.7的Scala。
Scala官网下载地址:http://www.scala-lang.org/download/
image
由于官网速度很慢,我们预先上传到了实验楼内网,下载并解压到/opt/目录:
wget http://labfile.oss.aliyuncs.com/courses/456/scala-2.11.7.tgz
tar zxvf scala-2.11.7.tgz
sudo mv scala-2.11.7 /opt/
测试scala命令,并检视版本:
image
安装Python及IPython
安装执行命令:
sudo apt-get update
sudo apt-get install python ipython
实验楼中已经安装了Python及IPython,分别检视版本:
image
3.2 Spark下载
课程中使用目前最新稳定版:Spark 1.5.1,官网上下载已经预编译好的Spark binary,直接解压即可。
Spark官方下载连结:http://spark.apache.org/downloads.html
下载页面中我们如下图选择Pre-build for Hadoop 2.6 and later并点选下载:
image
为了节约时间,我们选择从阿里云的映象下载:
wget http://mirrors.aliyuncs.com/apache/spark/spark-1.5.1/spark-1.5.1-bin-hadoop2.6.tgz
大约268M大小,下载完成后解压并拷贝到/opt/目录:
tar zxvf spark-1.5.1-bin-hadoop2.6.tgz
sudo mv spark-1.5.1-bin-hadoop2.6 /opt/
进入到spark目录检视目录结构,本节实验中会用到bin/目录下的操作命令以及conf/目录下的配置档案。
3.3 配置路径与日志级别
为了避免每次都输入/opt/spark-1.5.1-bin-hadoop2.6这一串字首,我们将必要的路径放到PATH环境变数中(实验楼用的是zsh,所以配置档案为~/.zshrc):
# 新增配置到zshrc
echo "export PATH=$PATH:/opt/spark-1.5.1-bin-hadoop2.6/bin" >> ~/.zshrc
# 使zshrc起作用
source ~/.zshrc
# 测试下spark-shell的位置是否可以找到
which spark-shell
我们进入到spark的配置目录/opt/spark-1.5.1-bin-hadoop2.6/conf进行配置:
# 进入配置目录
cd /opt/spark-1.5.1-bin-hadoop2.6/conf
# 基于模板建立日志配置档案
cp log4j.properties.template log4j.properties
# 使用vim或gedit编辑档案log4j.properties
# 修改log4j.rootCategory为WARN, console,可避免测试中输出太多资讯
log4j.rootCategory=WARN, console
# 基于模板建立配置档案
sudo cp spark-env.sh.template spark-env.sh
# 使用vim或gedit编辑档案spark-env.sh
# 新增以下内容设定spark的环境变数
export SPARK_HOME=/opt/spark-1.5.1-bin-hadoop2.6
export SCALA_HOME=/opt/scala-2.11.7
spark-env.sh配置如图:
image
spark-env.sh指令码会在启动spark时载入,内容包含很多配置选项及说明,在以后的实验中会用到少部分,感兴趣可以仔细阅读这个档案的注释内容。
至此,Spark就已经安装好了,Spark安装很简单,依赖也很少。
4. Spark应用学习
下面是小编为大家汇总的Spark生态系统中使用频率最高的几个应用教程。每个教程中提供尽可能丰富的步骤说明和截图,详细的理论知识会附上相关文章连结。点选【教程名称】即可进入每一部分的学习。
【Spark 基础之 Streaming 快速上手】
Spark Streaming 是 Spark 引擎的一种扩充套件,适用于实时处理流式资料。本课程将带你学习 Spark Streaming 的工作机制,了解 Streaming 应用的基本结构,以及如何在 Streaming 应用中附加 SQL 查询。
【Spark 基础之 SQL 快速上手】
学习 Spark SQL 的基础概念,了解如何利用 SQL Context 及相关的 API 进行统计分析。最后还将通过一个分析股票价格与石油价格关系的例项,进一步学习如何利用 Spark SQL 分析资料。
【Spark 基础之使用机器学习库 MLlib】
学习 Spark 的机器学习库—— MLlib 的相关知识,了解 MLlib 与 ML 之间的区别和联络,掌握 MLlib 中的几个基本资料型别。
【Spark基础之 DataFrame 基本概念学习 】
针对飞行准点率资料集,通过一些简单的分析任务来学习 DataFrame 的由来、构建方式以及一些常用操作。在本课程中,你可以了解到 Spark 生态体系中,核心的 RDD 与 DataFrame 之间的区别和联络。同时,你还可以学习到在 Spark 中载入资料集的方式、如何配置和使用第三方库等等。
【Spark 基础之 SparkR 快速上手 】
讲解到如何在 SparkR 中建立和操作 DataFrame、如何执行 SQL 查询,以及如何利用机器学习相关的 API。通过一些简单的例项来学习如何在 SparkR 中进行时间序列分析。
【Spark 基础之 GraphX 图计算框架学习】
学习GraphX 框架的基本使用技巧、属性图的定义和操作符的种类,以及PageRank 、连通分量和三角形计数这三个经典的图计算算法。
5.最后的话
随着企业资料量的增长,对大资料的处理和分析已经成为企业的迫切需求。Spark作为Hadoop的替代者,引起学术界和工业界的普遍兴趣,大量应用在工业界落地,许多科研院校开始了对Spark的研究。当一门技术开始普遍应用于并真正做到优化了生产流程时,就是它商业价值实现的时刻。