(一)完成
Spark
的安装,熟悉Spark Shell
。①完成Spark
的安装需要安装包,压缩格式的文件spark-2.4.0-bin-without-hadoop.tgz
文件已经下载到本地电脑,保存在“/home/hadoop/下载/
”目录下。②前序实验已经完成了
Hadoop
的单机/伪分布式配置和
JAVA JDK
的安装,因此在单台机器上可以按照“
Hadoop
(伪分布式)+
Spark
(
Local
模式)”这种方式进行
Hadoop
和
Spark
组合环境的搭建。
③安装后,进行
Spark
的配置文件
spark-env.sh
的修改。
③配置完成后就可以直接使用,不需要像
Hadoop
运行启动命令。通过运行
Spark
自带的示例,验证
Spark
是否安装成功。
执行时会输出非常多的运行信息,输出结果不容易找到,可以通过
grep
命令进行过滤(命令中的
2>&1
可以将所有的信息都输出到
stdout
中,否则由于输出日志的性质,还是会输出到屏幕中)。过滤后的运行结果如下图示,可以得到π 的 5 位小数近似值。
(二)使用
Spark
程序编写wordcount
程序。①启动
Spark Shell
,会自动创建
名为
sc
的
SparkContext
对象和名为spark
的
SparkSession
对象。
②
spark
创建
sc
,可以加载本地文件和
HDFS
文件创建
RDD
。这里用
Spark
自带的本地文件
README.md
文件测试。
③通过组合
RDD
操作进行组合,可以实现简易
MapReduce
操作。
④输入:
quit
,即可退出
spark shell
退出
Spark Shell
。
(三)使用
scala
编写Spark
程序。(1)使用
sbt
对Scala
独立应用程序进行编译打包①使用
Scala
语言编写的
Spark
程序,需要使用
sbt
进行编译打包。
Spark
中没有自带
sbt
,需要单独安装。压缩格式的文件
sbt-1.3.8.tgz
文件已经下载到本地电脑,保存在“
/home/hadoop/下载/
”目录下。
②把
sbt
安装到“
/usr/local/sbt
”目录下,使用
hadoop
用户登录
Linux
系统。
③在安装目录中创建一个
Shell
脚本文件,用于启动
sbt
。
④保存后,需要为该
Shell
脚本文件增加可执行权限。
⑤查看
sbt
版本信息。
第一次运行
sbt
编译打包命令速度很慢,是因为这个过程需要到国外网站下载很多的依赖包,而国外网站下载速度很慢。最终能够返回上述信息,就说明安装成功了。
(2) 编写
Scala
应用程序代码①在终端中执行命令创建一个文件夹
sparkapp
,作为应用程序根目录。
②在
./sparkapp/src/main/scala
下建立一个名为
SimpleApp.scala
的文件(
vim ./sparkapp/src/main/scala/SimpleApp.scala
)。
该程序计算
/usr/local/spark/README
文件中包含 “
a
” 的行数 和包含 “
b
” 的行数。不同于
Spark shell
,独立应用程序需要通过
val sc = new SparkContext
(
conf
) 初始化
SparkContext
,
SparkContext
的参数
SparkConf
包含了应用程序的信息。
③该程序依赖
Spark API
,因此需要通过
sbt
进行编译打包。 在
~/sparkapp
这个目录中新建文件
simple.sbt
。
文件
simple.sbt
需要指明
Spark
和
Scala
的版本。在以上的配置信息中,
scalaVersion
用来指定
scala
的版本,
sparkcore
用来指定
spark
的版本,这两个版本信息都可以在之前的启动
Spark shell
的过程中,从屏幕的显示信息中找到。
(3) 使用
sbt
打包Scala
程序。①为保证
sbt
能正常运行,先检查整个应用程序的文件结构。
②将整个应用程序打包成
JAR
(首次运行同样需要下载依赖包 ):
生成的
jar
包的位置为
~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
。
(4) 通过
spark-submit
运行程序
①将生成的
jar
包通过
spark-submit
提交到
Spark
中运行。
②最终得到的结果如下。
(四)使用
java
编写Spark
程序,熟悉maven
打包过程。(1) 安装
Maven
①
Ubuntu
中没有自带安装
maven
,需要手动安装
maven
。压缩格式的文件
apache-maven-3.6.3-bin.zip
文件已经下载到本地电脑,保存在“
/home/hadoop/下载/
”目录下,这里选择安装在
/usr/local/maven
目录中。
(2)
Java
应用程序代码
①在终端执行命令创建一个文件夹sparkapp2
作为应用程序根目录。
②在 ./sparkapp2/src/main/java
下建立一个名为 SimpleApp.java
的文件(vim ./sparkapp2/src/main/java/SimpleApp.java
)。
③该程序依赖Spark Java API
,因此需要通过Maven
进行编译打包。在./sparkapp2
目录中新建文件pom.xml
。
关于
Spark dependency
的依赖关系,可以访问The Central Repository
。搜索spark-core
可以找到相关依赖关系信息。(3) 使用
Maven
打Java
程序①为了保证
maven
能够正常运行,先执行如下命令检查整个应用程序的文件结构。
②通过如下代码将这整个应用程序打包成
Jar
(注意:电脑需要保持连接网络的状态,而且首次运行同样下载依赖包,同样消耗几分钟的时间)。
生成
Jar
包成功。
(4)通过
spark-submit
运行程序通过将生成的
jar
包通过
spark-submit
提交到
Spark
中运行。
(五)
Hadoop
和Spark
直接的区别在哪里?谁的性能更好?(1)直接区别
①应用场景不同Hadoop
和Spark
两者都是大数据框架,但是各自应用场景是不同的。Hadoop
是一个分布式数据存储架构,它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,降低了硬件的成本。Spark
是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它要借助hdfs
的数据存储。
②处理速度不同hadoop
的MapReduce
是分步对数据进行处理的,从磁盘中读取数据,进行一次处理,将结果写到磁盘,然后在从磁盘中读取更新后的数据,再次进行的处理,最后再将结果存入磁盘,这存取磁盘的过程会影响处理速度。spark
从磁盘中读取数据,把中间数据放到内存中,完成所有必须的分析处理,将结果写回集群,所以spark
更快。
③容错性不同Hadoop
将每次处理后的数据都写入到磁盘上,基本谈不上断电或者出错数据丢失的情况。Spark
的数据对象存储在弹性分布式数据集RDD
,RDD
是分布在一组节点中的只读对象集合,如果数据集一部分丢失,则可以根据于数据衍生过程对它们进行重建。而且RDD
计算时可以通过CheckPoint
来实现容错。
(2)Hadoop
使用磁盘进行存储并取决于磁盘读写速度, 性能较慢。Spark
拥有快速的内存性能,可以减少磁盘读写操作。