、初始Spark
1、产生背景
由于mapreduce只适用于离线数据处理(批处理),而不能支持对迭代式,交互式,流式数据的处理,因此,spark就诞生了
hive的产生就是为了解决mapreduce的编程复杂的问题
spark的产生就是为了解决mapreduce的计算缓慢的问题
Spark和MapReduce的对比之后的优势:
1、减少磁盘IO
MapReduce:基于磁盘 Spark:基于内存 (尽量把临时数据缓存在内存中)
2、增加并行度
MapReduce: MapTask ReduceTask JVM 一个进程一个Task 默认情况下
Spark : ShuffleMapTask ResultTask 使用的是一个线程执行
3、避免重复计算
可以把数据强制的持久化到内存中,以供其他的task使用
4、可选的shuffle和排序
可选的shuffle : MapReduce:提供的是一种通用的shuffle combiner partitioner sorter
Spark:提供四种shuffle策略,分别有对应不同的需求场景 HashShuffle SortShuffle
可选的排序 : mapreducer如果有Reduce阶段的话,那么sorter的数据排序一定会执行
5、灵活的内存管理策略
要多少给多少。可以合理的分配到底哪个阶段,哪个组件,使用多少
2、Spark的概念 (一栈式的通用计算框架)
官网:http://spark.apache.org/
Spark是一快速、通用、可扩展的大数据分析引擎
2009年诞生于加州大学伯克利分校
3、Hadoop生态和Spark生态的区别
Hadoop生态:
hdfs+zookeeper+mapreduce/hive+hbase+storm+mahout+其他工具
Spark生态体系:
hdfs+zookeeper+spark+hbase+storm+mahout+其他工具
spark的产生就是为了替代Mapreduce
4、特点
1)Speed:快速高效
2)Ease of Use:简单易用
3)Generality:全栈式数据处理
支持批处理(Spark Core):Spark Core 是 Spark 的核心功能实现,包括:SparkContext 的初始化(DriverApplication 通过 SparkContext 提交)、部署模式、存储体系、任务提交与执行、计算引擎等
支持交互式查询(Spark SQL)。Spark SQL 是 Spark 来操作结构化数据的程序包,可以让我们使用 SQL 语句的方式来查询数据,Spark 支持多种数据源,包含 Hive 表,parquet 以及 JSON等内容
支持流式计算(Spark Streaming)。与 MapReduce 只能处理离线数据相比,Spark 还支持实时的流计算。Spark 依赖 Spark Streaming 对数据进行实时的处理。
支持机器学习(Spark MLlib)。提供机器学习相关的统计、分类、回归等领域的多种算法实现。其一致的 API 接口大大降低了用户的学习成本
支持图计算(Spark GraghX)。提供图计算处理能力,支持分布式, Pregel 提供的 API 可以解决图计算中的常见
4)Run EveryWhere:兼容
二、Spark集群的安装
1、集群规划
server Master Worker
qyl01 √ √
qyl02 √ √
qyl03 √
2、具体步骤
1、上传下载好的 Spark 到集群中的一个节点,比如是 qyl01
put c:/spark-2.3.0-bin-hadoop2.7.tgz
2、使用之前安装 hadoop 集群相同的 hadoop 用户安装 spark 集群,现在规划安装目录/home/qyl/apps/,解压缩进行安装
tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -apps /home/qyl/apps/
3、修改配置文件 spark-env.sh
进入 SPARK_HOME 的 conf 目录中,进行如下更改:
cd /home/qyl/apps/spark-2.3.0-bin-hadoop2.7/conf
mv spark-env.sh.template spark-env.sh
然后修改 spark-env.sh:
export JAVA_HOME=/usr/local/java/jdk1.8.0_73
export SPARK_MASTER_HOST=qyl01
export SPARK_MASTER_PORT=7077
4、修改配置文件 slave
修改配置文件 slave
进入 SPARK_HOME 的 conf 目录中,进行如下更改:
cd /home/qyl/apps/spark-2.3.0-bin-hadoop2.7/conf
mv slaves.template slaves
在 slaves 的最后添加所有 worker 节点的主机名
qyl01
qyl02
qyl03
5、将spark安装包copy到所有安装节点
scp -r spark-2.3.0-bin-hadoop2.7 qyl02:/home/qyl/apps/
scp -r spark-2.3.0-bin-hadoop2.7 qyl03:/home/qyl/apps/
6、修改配置文件
vim /etc/profile
export SPARK_HOME=/home/qyl/apps/spark-2.3.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile
7、配置zookeeper集群,并且启动zookeeper集群
8、修改SPARK_HOME/conf目录中的spark-env.sh配置文件
删掉:
export SPARK_MASTER_HOST=qyk01
增加一行:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -
Dspark.deploy.zookeeper.url=qyl01,qyl02,qyl03 -
Dspark.deploy.zookeeper.dir=/spark"
9、把core-site.xml和hdfs-site.xml放置在$SPARK_HOME/conf目录下,然后所有节点要同步
10、同步配置文件
scp -r spark-env.sh qyl02:$PWD
scp -r spark-env.sh qyl03:$PWD
11、启动集群
[hadoop@qyl01 spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh
三、核心概念
1、Master
就如同名字一样,是spark集群的管理者,或者管理节点
在Spark基于Yarn的方式运行过程中,master就是resourcemanager,基于自身的standalone模式运行就是集群中查看到的master节点
2、Work
是spark集群的工作节点,在spark基于Yarn的方式运行过程中,work就是nodemanager,基于自身的standalone模式运行就是集群中查看到的work节点
作用:调动本台机器上面的资源
3、Application
提交到spark集群中取运行的完整应用就是一个Application,当然一个Application由多个job组成
4、Job
每提交到比较会提交一个Spark的job作业,或者说,每触发一次action操作,就会提交一次spark作业job,从这个角度而言,一个application又多个Job组成,这里的job,就可以理解MapReduce中的Job
5、SparkContext
整个一个Application的应用上下文对象
一个spark应用的入口就是sparkcontext,是spark作业最要的概念
6、Driver
驱动,简单理解,就是用来提交代码,提交job作业
再换句话说,jobs是在集群中运行的,而这些dirver是在本地提交这些job作业的
7、RDD:弹性分布式数据集(resilient distributed dataset)
RDD就能够被并行计算的,被分区存储在集群中各个节点的数据集
RDD其实不存储真是的数据,只存储数据的获取的方法,以及分区的方法,还有就是数据的类型。
分布式:数据存储在rdd对应的各个partition分区中
弹性:spark的数据在内存中存储或者计算,当内存存储不了的时候,对应的数据外溢到磁盘进行存储和计算
RDD的创建方式:可以hdfs文件创建,还可以通过并行对scala的集合创建,在编码过程中还可以通过转化,将一个rdd转化为其他的rdd
四、SparkRDD运行架构图
以wordcount为例:
在spark-shell中执行
sc.textFile("hdfs://myha01/spark/word.txt")flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).foreach(println)
五、创建Spark作业
1、maven项目
2、导入依赖 在pom.xml中添加
<properties>
<scala.version>2.11.8<scala.version>
<spark.version>2.3.2<spark.version>
<hadoop.version>2.7.6<hadoop.version>
<properties>
<dependency>
<groupid>org.apache.spark</groupid>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupid>org.apache.hadoop</groupid>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
Spark基础理论及安装
最新推荐文章于 2023-03-27 13:49:42 发布
本文介绍了Spark的产生背景,对比MapReduce的优势,包括减少磁盘IO、增加并行度等,并阐述了Spark作为一栈式通用计算框架的特点。接着详细讲述了Spark集群的安装步骤,包括集群规划、配置文件修改、安装与启动过程。文章还提到了Spark的核心概念,如Master、Worker、Application、Job、SparkContext和RDD等。
摘要由CSDN通过智能技术生成