大数据开发工程师-第十周 第1章 初识spark


第十周 第1章 初识spark

快速了解Spark

什么是Spark

1
2
3
4
5
6
7
Spark是一个用于大规模数据处理的统一计算引擎
注意:Spark不仅仅可以做类似于MapReduce的离线数据计算,还可以做实时数据计算,并且它还可以实现类似于Hive的SQL计算,等等,所以说它是一个统一的计算引擎

既然说到了Spark,那就不得不提一下Spark里面最重要的一个特性:内存计算
Spark中一个最重要的特性就是基于内存进行计算,从而让它的计算速度可以达到MapReduce的几十倍甚至上百倍

所以说在这大家要知道,Spark是一个基于内存的计算引擎

Spark的特点

Speed:速度快

1
2
3
4
由于Spark是基于内存进行计算的,所以它的计算性能理论上可以比MapReduce快100倍
Spark使用最先进的DAG调度器、查询优化器和物理执行引擎,实现了高性能的批处理和流处理。

注意:批处理其实就是离线计算,流处理就是实时计算,只是说法不一样罢了,意思是一样的

Easy of Use:易用性

image-20230323162622565

1
2
3
4
Spark的易用性主要体现在两个方面
1. 可以使用多种编程语言快速编写应用程序,例如Java、Scala、Python、R和SQL
2. Spark提供了80多个高阶函数,可以轻松构建Spark任务。
看这个图中的代码,spark可以直接读取json文件,使用where进行过滤,然后使用select查询指定字段中的值

Generality:通用性

image-20230323162707090

1
2
3
Spark提供了Core、SQL、Streaming、MLlib、GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、SQL交互式查询、流式实时计算,机器学习、图计算等常见的任务

从这可以看出来Spark也是一个具备完整生态圈的技术框架,它不是一个人在战斗。

Runs Everywhere:到处运行

1
2
你可以在Hadoop YARN、Mesos或Kubernetes上使用Spark集群。
并且可以访问HDFS、Alluxio、Apache Cassandra、Apache HBase、Apache Hive和数百个其它数据源中的数据

Spark vs Hadoop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
那接下来我们拿Spark和Hadoop做一个对比
在这里我们通过三个层面进行对比分析
1. 综合能力
Spark是一个综合性质的计算引擎
Hadoop既包含MapReduce(计算引擎),还包含HDFS(分布式存储)和Yarn(资源管理)
所以说他们两个的定位是不一样的。
从综合能力上来说,hadoop是完胜spark的
2. 计算模型
Spark任务可以包含多个计算操作,轻松实现复杂迭代计算
而Hadoop中的MapReduce任务只包含Map和Reduce阶段,不够灵活
从计算模型上来说,spark是完胜hadoop的
3. 处理速度
Spark任务的数据是基于内存的,计算速度很快
而Hadoop中MapReduce任务是基于磁盘的,速度较慢
从处理速度上来说,spark也是完胜hadoop的
1
2
3
4
5
之前有一种说法,说Spark将会替代Hadoop,这个说法是错误的,其实它们两个的定位是不一样的,Spark是一个通用的计算引擎,而Hadoop是一个包含HDFS、MapRedcue和YARN的框架,所以说Spark就算替代也只是替代Hadoop中的MapReduce,也不会整个替代Hadoop,因为Spark还需要依赖于Hadoop中的HDFS和YARN。

所以在实际工作中Hadoop会作为一个提供分布式存储和分布式资源管理的角色存在Spark会在它之上去执行。

所以在工作中就会把spark和hadoop结合到一块来使用

Spark+Hadoop

1
2
那下面我们来看一下Spark和Hadoop是如何结合
看这个图

b3lMHf.png

1
2
3
4
5
6
底层是Hadoop的HDFS和YARN
Spark core指的是Spark的离线批处理
Spark Streaming指的是Spark的实时流计算
Spark SQL指的是Spark中的SQL计算
Spark Mlib指的是Spark中的机器学习库,这里面集成了很多机器学习算法
最后这个Spark GraphX是指图计算
1
2
3
4
5
6
7
8
9
10
其实这里面这么多模块,针对大数据开发岗位主要需要掌握的是Spark core、streaming、sql这几个模块,其中Mlib主要是搞算法的岗位使用的,GraphX这个要看是否有图计算相关的需求,所以这两个不是必须要掌握的。

所以在本套体系课程中我们会学习Spark core、Spark SQL、还有Spark streaming这三块内容
不过由于现在我们主要是学习离线批处理相关的内容,所以会先学习Spark core和Spark SQL,而Spark streaming等到后面我们讲到实时计算的时候再去学习。

1.5:Spark的应用场景
Spark主要应用在以下这些应用场景中
1. 低延时的海量数据计算需求,这个说的就是针对Spark core的应用
2. 低延时SQL交互查询需求,这个说的就是针对Spark SQL的应用
3. 准实时(秒级)海量数据计算需求,这个说的就是Spark Streaming的应用

Spark集群安装部署

1
前面我们对Spark有一个整体概念之后,下面我们来安装部署一下Spark,spark也是支持集群模式的
1
2
3
4
5
6
7
8
Spark集群有多种部署方式,比较常见的有Standalone模式和ON YARN模式

Standalone模式就是说部署一套独立的Spark集群,后期开发的Spark任务就在这个独立的Spark集群中执行
ON YARN模式是说使用现有的Hadoop集群,后期开发的Spark任务会在这个Hadoop集群中执行,此时这个Hadoop集群就是一个公共的了,不仅可以运行MapReduce任务,还可以运行Spark任务,这样集群的资源就可以共享了,并且也不需要再维护一套集群了,减少了运维成本和运维压力,一举两得。

所以在实际工作中都会使用Spark ON YARN模式
不过为了考虑到大家可能会有一些特殊场景确实要使用standalone模式部署独立的spark集群,所以在这,针对这两种部署模式我们都讲一下。
那在具体安装部署之前,需要先下载Spark的安装包。
1
2
3
4
5
在这需要注意选择合适的安装包
因为我们使用Spark的时候一般都是需要和Hadoop交互的,所以需要下载带有Hadoop依赖的安装包
这个时候就需要选择Hadoop版本对应的Spark安装包,我们的Hadoop是3.2的,里面Hadoop的版本只有2.6和2.7的,那就退而求其次选择hadoop2.7对应的这个Spark安装包,其实也是没什么问题的,如果有强迫症的话,就需要下载Spark的源码包,自己编译配套版本的安装包了。
其实在Spark3.0的那个预览版本里面是有和Hadoop3.2配套的版本的,不过那个不是稳定版本,不建议
在生产环境下使用,所以就不考虑了

image-20230323163920957

1
2
目前spark有三大版本,1.x,2.x和3.x,其中3.x是一个预览版本,不能在生产环境中使用,所以目前使用最多的就是2.x的版本了
在这我们下载spark-2.4.3版本

image-20230323164058298

image-20230323164153226

stand alone

1
2
3
由于Spark集群也是支持主从的,在这我们使用三台机器,部署一套一主两从的集群
主节点: bigdata01
从节点: bigdata02,bigdata03
1
2
注意:需要确保这几台机器上的基础环境是OK的,防火墙、免密码登录、还有JDK
因为这几台机器我们之前已经使用过了,基础环境都是配置过的,所以说在这就直接使用了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
先在bigdata01上进行配置
1.解压
2.重名名spark-env.sh.template
3.配置spark-env.sh
在文件末尾增加这两行内容,指定JAVA_HOME和主节点的主机名
export JAVA_HOME=/data/soft/jdk1.8
export SPARK_MASTER_HOST=bigdata01

4.重命名slaves.template
5.修改slaves
将文件末尾的localhost去掉,增加bigdata02和bigdata03这两个从节点的主机名
bigdata02
bigdata03

6.将修改好配置的spark安装包,拷贝到bigdata02和bigdata03上
1
2
3
4
5
6
7
8
9
10
11
12
7启动Spark集群
[root@bigdata01 soft]# cd spark-2.4.3-bin-hadoop2.7
[root@bigdata01 spark-2.4.3-bin-hadoop2.7]# sbin/start-all.sh

8验证
[root@bigdata01 spark-2.4.3-bin-hadoop2.7]# jps
1731 Master

[root@bigdata02 ~]# jps
1714 Worker
[root@bigdata03 ~]# jps
1707 Worker
1
2
还可以访问主节点的8080端口来查看集群信息
http://bigdata01:8080/
1
2
3
4
10. 提交任务
那我们尝试向这个Spark独立集群提交一个spark任务
提交任务的命令该如何写呢?
来看一下Spark的官方文档

image-20230323164733387

image-20230323164846197

image-20230323165057068

1
2
3
4
5
6
需要使用bin目录下的spark-submit脚本提交任务
--class 指定需要指定的入口类
--master指定集群的地址
接着指定需要提交的任务jar包

bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata01:7077 examples/jars/spark-examples_2.11-2.4.3.jar 2
1
提交之后可以到Spark的8080 web界面查看任务信息

image-20230323165755276

1
2
3
停止Spark集群
在主节点 bigdata01上执行
[root@bigdata01 spark-2.4.3-bin-hadoop2.7]# sbin/stop-all.sh

ON YARN

1
ON YARN模式很简单,先保证有一个Hadoop集群,然后只需要部署一个Spark的客户端节点即可,不需要启动任何进程
1
2
3
4
5
注意:Spark的客户端节点同时也需要是Hadoop的客户端节点,因为Spark需要依赖于Hadoop

我们的Hadoop集群是 bigdata01、bigdata02、bigdata03
那我们可以选择把Spark部署在一个单独的节点上就可以了,其实就类似于我们之前部署Hadoop的客户端节点。
在这我们使用bigdata04来部署spark on yarn,因为这个节点同时也是Hadoop的客户端节点
1
2
3
4
5
6
7
8
9
10
11
12
1. 将spark-2.4.3-bin-hadoop2.7.tgz上传到bigdata04的/data/soft目录中
2. 解压
3. 重命名spark-env.sh.template
4. 修改spark-env.sh
在文件末尾增加这两行内容,指定JAVA_HOME和Hadoop的配置文件目录
export JAVA_HOME=/data/soft/jdk1.8
export HADOOP_CONF_DIR=/data/soft/hadoop-3.2.0/etc/hadoop

5. 提交任务
那我们通过这个spark客户点节点,向Hadoop集群上提交spark任务(具体提交方法,可到官网查看)

bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster examples/jars/spark-examples_2.11-2.4.3.jar 2

image-20230323170315032

1
6. 可以到YARN的8088界面查看提交上去的任务信息

本文标题:大数据开发工程师-第十周 第1章 初识spark

文章作者:TTYONG

发布时间:2022年03月02日 - 10:03

最后更新:2023年06月04日 - 11:06

原始链接:http://tianyong.fun/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88-%E7%AC%AC%E5%8D%81%E5%91%A8-%E7%AC%AC1%E7%AB%A0-%E5%88%9D%E8%AF%86spark.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%