(一)完成Spark的安装,熟悉Spark Shell

①完成Spark的安装需要安装包,压缩格式的文件spark-2.4.0-bin-without-hadoop.tgz文件已经下载到本地电脑,保存在“/home/hadoop/下载/”目录下。

cdh spark 安装路径 spark安装详细教程_cdh spark 安装路径


②前序实验已经完成了

Hadoop

的单机/伪分布式配置和

JAVA JDK

的安装,因此在单台机器上可以按照“

Hadoop

(伪分布式)+

Spark

Local

模式)”这种方式进行

Hadoop

Spark

组合环境的搭建。


cdh spark 安装路径 spark安装详细教程_大数据_02


③安装后,进行

Spark

的配置文件

spark-env.sh

的修改。


cdh spark 安装路径 spark安装详细教程_cdh spark 安装路径_03


cdh spark 安装路径 spark安装详细教程_spark_04


③配置完成后就可以直接使用,不需要像

Hadoop

运行启动命令。通过运行

Spark

自带的示例,验证

Spark

是否安装成功。


cdh spark 安装路径 spark安装详细教程_大数据_05


执行时会输出非常多的运行信息,输出结果不容易找到,可以通过

grep

命令进行过滤(命令中的

2>&1

可以将所有的信息都输出到

stdout

中,否则由于输出日志的性质,还是会输出到屏幕中)。过滤后的运行结果如下图示,可以得到π 的 5 位小数近似值。


cdh spark 安装路径 spark安装详细教程_应用程序_06

(二)使用Spark程序编写wordcount程序。

①启动

Spark Shell

,会自动创建

名为

sc

SparkContext

对象和名为spark

SparkSession

对象。


cdh spark 安装路径 spark安装详细教程_大数据_07


spark

创建

sc

,可以加载本地文件和

HDFS

文件创建

RDD

。这里用

Spark

自带的本地文件

README.md

文件测试。


cdh spark 安装路径 spark安装详细教程_hadoop_08


③通过组合

RDD

操作进行组合,可以实现简易

MapReduce

操作。


cdh spark 安装路径 spark安装详细教程_大数据_09


④输入:

quit

,即可退出

spark shell

退出

Spark Shell


cdh spark 安装路径 spark安装详细教程_应用程序_10

(三)使用scala编写Spark程序。

(1)使用sbtScala独立应用程序进行编译打包

①使用

Scala

语言编写的

Spark

程序,需要使用

sbt

进行编译打包。

Spark

中没有自带

sbt

,需要单独安装。压缩格式的文件

sbt-1.3.8.tgz

文件已经下载到本地电脑,保存在“

/home/hadoop/下载/

”目录下。


cdh spark 安装路径 spark安装详细教程_hadoop_11


②把

sbt

安装到“

/usr/local/sbt

”目录下,使用

hadoop

用户登录

Linux

系统。


cdh spark 安装路径 spark安装详细教程_大数据_12


cdh spark 安装路径 spark安装详细教程_应用程序_13


③在安装目录中创建一个

Shell

脚本文件,用于启动

sbt


cdh spark 安装路径 spark安装详细教程_cdh spark 安装路径_14


cdh spark 安装路径 spark安装详细教程_hadoop_15


④保存后,需要为该

Shell

脚本文件增加可执行权限。


cdh spark 安装路径 spark安装详细教程_hadoop_16


⑤查看

sbt

版本信息。


cdh spark 安装路径 spark安装详细教程_应用程序_17


第一次运行

sbt

编译打包命令速度很慢,是因为这个过程需要到国外网站下载很多的依赖包,而国外网站下载速度很慢。最终能够返回上述信息,就说明安装成功了。

(2) 编写Scala应用程序代码

①在终端中执行命令创建一个文件夹

sparkapp

,作为应用程序根目录。


cdh spark 安装路径 spark安装详细教程_大数据_18


②在

./sparkapp/src/main/scala

下建立一个名为

SimpleApp.scala

的文件(

vim ./sparkapp/src/main/scala/SimpleApp.scala

)。


cdh spark 安装路径 spark安装详细教程_spark_19


该程序计算

/usr/local/spark/README

文件中包含 “

a

” 的行数 和包含 “

b

” 的行数。不同于

Spark shell

,独立应用程序需要通过

val sc = new SparkContext

(

conf

) 初始化

SparkContext

SparkContext

的参数

SparkConf

包含了应用程序的信息。


③该程序依赖

Spark API

,因此需要通过

sbt

进行编译打包。 在

~/sparkapp

这个目录中新建文件

simple.sbt


cdh spark 安装路径 spark安装详细教程_大数据_20


cdh spark 安装路径 spark安装详细教程_hadoop_21


文件

simple.sbt

需要指明

Spark

Scala

的版本。在以上的配置信息中,

scalaVersion

用来指定

scala

的版本,

sparkcore

用来指定

spark

的版本,这两个版本信息都可以在之前的启动

Spark shell

的过程中,从屏幕的显示信息中找到。


cdh spark 安装路径 spark安装详细教程_大数据_22

(3) 使用 sbt 打包 Scala 程序。

①为保证

sbt

能正常运行,先检查整个应用程序的文件结构。


cdh spark 安装路径 spark安装详细教程_cdh spark 安装路径_23


②将整个应用程序打包成

JAR

(首次运行同样需要下载依赖包 ):


cdh spark 安装路径 spark安装详细教程_hadoop_24


生成的

jar

包的位置为

~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar


cdh spark 安装路径 spark安装详细教程_大数据_25


(4) 通过

spark-submit

运行程序


①将生成的

jar

包通过

spark-submit

提交到

Spark

中运行。


cdh spark 安装路径 spark安装详细教程_hadoop_26


②最终得到的结果如下。


cdh spark 安装路径 spark安装详细教程_cdh spark 安装路径_27

(四)使用java编写Spark程序,熟悉maven打包过程。

(1) 安装Maven

Ubuntu

中没有自带安装

maven

,需要手动安装

maven

。压缩格式的文件

apache-maven-3.6.3-bin.zip

文件已经下载到本地电脑,保存在“

/home/hadoop/下载/

”目录下,这里选择安装在

/usr/local/maven

目录中。


cdh spark 安装路径 spark安装详细教程_hadoop_28


cdh spark 安装路径 spark安装详细教程_应用程序_29


cdh spark 安装路径 spark安装详细教程_spark_30

(2) Java应用程序代码

①在终端执行命令创建一个文件夹sparkapp2作为应用程序根目录。

cdh spark 安装路径 spark安装详细教程_大数据_31


②在 ./sparkapp2/src/main/java 下建立一个名为 SimpleApp.java 的文件(vim ./sparkapp2/src/main/java/SimpleApp.java)。

cdh spark 安装路径 spark安装详细教程_hadoop_32


cdh spark 安装路径 spark安装详细教程_spark_33


③该程序依赖Spark Java API,因此需要通过Maven进行编译打包。在./sparkapp2目录中新建文件pom.xml

cdh spark 安装路径 spark安装详细教程_spark_34


cdh spark 安装路径 spark安装详细教程_应用程序_35

关于Spark dependency的依赖关系,可以访问The Central Repository。搜索spark-core可以找到相关依赖关系信息。

(3) 使用MavenJava程序

①为了保证maven能够正常运行,先执行如下命令检查整个应用程序的文件结构。

cdh spark 安装路径 spark安装详细教程_hadoop_36


②通过如下代码将这整个应用程序打包成

Jar

(注意:电脑需要保持连接网络的状态,而且首次运行同样下载依赖包,同样消耗几分钟的时间)。


cdh spark 安装路径 spark安装详细教程_spark_37


生成

Jar

包成功。


cdh spark 安装路径 spark安装详细教程_大数据_38

(4)通过spark-submit 运行程序

通过将生成的

jar

包通过

spark-submit

提交到

Spark

中运行。


cdh spark 安装路径 spark安装详细教程_spark_39


cdh spark 安装路径 spark安装详细教程_应用程序_40

(五)HadoopSpark直接的区别在哪里?谁的性能更好?

(1)直接区别
①应用场景不同
HadoopSpark两者都是大数据框架,但是各自应用场景是不同的。Hadoop是一个分布式数据存储架构,它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,降低了硬件的成本。Spark是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它要借助hdfs的数据存储。
②处理速度不同
hadoopMapReduce是分步对数据进行处理的,从磁盘中读取数据,进行一次处理,将结果写到磁盘,然后在从磁盘中读取更新后的数据,再次进行的处理,最后再将结果存入磁盘,这存取磁盘的过程会影响处理速度。spark从磁盘中读取数据,把中间数据放到内存中,完成所有必须的分析处理,将结果写回集群,所以spark更快。
③容错性不同
Hadoop将每次处理后的数据都写入到磁盘上,基本谈不上断电或者出错数据丢失的情况。Spark的数据对象存储在弹性分布式数据集 RDDRDD是分布在一组节点中的只读对象集合,如果数据集一部分丢失,则可以根据于数据衍生过程对它们进行重建。而且RDD 计算时可以通过 CheckPoint 来实现容错。
(2) Hadoop使用磁盘进行存储并取决于磁盘读写速度, 性能较慢。Spark拥有快速的内存性能,可以减少磁盘读写操作。