一、Spark是什么?
- spark网址: http://spark.apachecn.org/docs/cn/2.2.0/index.html
- Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。
- Hadoop 之父 Doug Cutting 指出:Use of MapReduce engine for Big Data projects will decline, replaced by Apache Spark (大数据项目的 MapReduce 引擎的使用将下降,由 Apache Spark 取代)。
二、了解Spark的特点
作为新一代轻量级大数据处理平台,Spark具有如下特点:
1、快速
Spark是基于内存运行的而MapReduce是基于磁盘
Spark的运行速度是Hadoop MapReduce运行速度的100多倍,Spark在磁盘上的运行速度是Hadoop MapReduce运行速度的10多倍。
2、易用
Spark支持使用Scala、Python、Java、R语言快速编写应用。此外,Spark提供超过80个高阶算子,使得编写并行应用程序变得容易,并且可以在Scala、Python和R的交互模式下使用Spark。
3、****通用
Spark框架包含多个紧密集成的组件,包括Spark SQL(即席查询)、Spark Streaming(流计算)、Spark MLlib(机器学习库)、Spark GraphX(图计算),并且支持在一个应用中同时使用这些组件。
4、****随处运行
用户可以使用Spark的独立集群模式运行Spark,也可以在EC2(亚马逊弹性计算云)、Hadoop YARN或者Apache Mesos上运行Spark。并且可以从HDFS、Cassandra、HBase、Hive、Tachyon和任何分布式文件系统读取数据
5、****代码简洁
Spark使用Scala语言实现只需要一行
三、 Spark VS Hadoop
尽管 Spark 相对于 Hadoop 而言具有较大优势,但 Spark 并不能完全替代 Hadoop,Spark 主要用于替代Hadoop中的 MapReduce两个节点中的Map 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。
**1.**提高了效率
Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率
**2.**容错性高
Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,需要进行重建。
相比来说spark更加通用,spark提供了更多的数据集操作类型,处理节点之间通信模型不是向hadoop只采用Shuffle模式,而是采用用户可命名,控制中间结果的存储,分区。
四、Spark的生态圈
Spark有完善的生态圈,如下:
Spark Core:实现了 Spark 的基本功能,包含 RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。
Spark SQL:Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 操作数据。
Spark Streaming:Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API。
Spark MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。
**GraphX(图计算)**:Spark 中用于图计算的 API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。
集群管理器:Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。
Structured Streaming:处理结构化流,统一了离线和实时的 API
五、.spark****的运行模式
Spark有三种运行模式:local模式、standalone模式和集群模式。
1)local模式:在本地机器上运行Spark应用程序,不需要启动集群。这种模式适用于开发和调试小规模的应用程序。
2)standalone模式:在一个独立的Spark集群上运行应用程序。在这种模式下,一个节点被指定为主节点,负责协调任务的分配和调度。其他节点作为工作节点,执行任务。这种模式适用于中小规模的集群环境。
3)集群模式:在大规模的分布式集群上运行Spark应用程序。Spark可以与各种资源管理器(如YARN、Mesos)集成,通过它们来管理集群资源。在这种模式下,Spark应用程序被分解为多个任务,并在集群中的多个节点上并行执行。这种模式适用于大规模数据处理和分析任务。
六、了解Spark核心数据集****RDD
6.1RDD****定义
MapReduce 框架采用非循环式的数据流模型,把中间结果写入到 HDFS 中,带来了大量的数据复制、磁盘 IO 和序列化开销。且这些框架只能支持一些特定的计算模式(map/reduce),并没有提供一种通用的数据抽象。因此出现了RDD这个概念。
**RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark **中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。
6.2****两种类型
转换算子:将原始数据集加载为RDD数据或将一个RDD转换为另一个RDD的操作。
行动算子:将RDD存储至硬盘中或触发转换操作执行的操作。
6.3****两种依赖
RDD
有两种依赖,分别为宽依赖(
**wide dependency/shuffle dependency**
)和窄依赖****(
**narrow dependency**
)
父RDD的一个分区只被一个子RDD的一个分区所使用就是窄依赖,否则就是宽依赖
七、Scala基础
Scala是Spark编程常用的语言之一,因此,在学习Spark之前,需要先了解Scala语言、Scala安装过程和基础编程操作。
7.1了解Scala特性
面向对象,函数式编程,静态类型,可扩展
7.2安装Scala
在Windows系统上安装Scala
- 从Scala官网下载Scala安装包,安装包名称为“scala.msi”。
- 双击scala.msi安装包,开始安装软件。
- 进入欢迎界面,单击右下角的“Next”按钮后出现许可协议选择提示框,选择接受许可协议中的条款并单击右下角的“Next”按钮。
- 选择安装路径,本文Scala的安装路径选择在非系统盘的“D:\Program Files (x86)\spark\scala\” ,单击“OK”按钮进入安装界面。
- 在安装界面中单击右下角的“Install”按钮进行安装,安装完成时单击“Finish”按钮完成安装。
- 右键单击“此电脑”图标,选择“属性”选项,在弹出的窗口中选择“高级系统设置”选项。在弹出的对话框中选择“高级”选项卡,并单击“环境变量”按钮,在环境变量对话框中,选择“Path”变量并单击“编辑”按钮,在Path变量中添加Scala安装目录的bin文件夹所在路径,如“D:\Program Files (x86)\spark\scala\bin”。
Scala部署安装步骤
(1)上传并解压安装scala安装包
tar -zxvf scala-2.2.12.12.tgz
tar -zxvf / export/ software/ spark-3.0.3-bin-hadoop2.7.tgz
(2)设置环境变量
vim /etc/profile
#SPARK
export SPARK_HOME=/usr/local/soft/spark-3.0.3
export PATH=$PATH:${SPARK_HOME}/bin
export PATH=$PATH:${SPARK_HOME}/sbin
使环境变量生效
source /etc/profile
(3)修改配置文件.
cd spark/ conf/
先备份文件
cp spark env.sh.template spark env.sh
cp slaves. template slaves
vim spark-env.sh
加一些环境变量:
修改spark- env.sh文件,加以下内容:
export SCALA_HOME=/usr/local/soft/scala-2.12.12
export JAVA_HOME=/usr/local/soft/jdk1.8.0_202
export SPARK_MASTER_IP=master
export SPARK_WOKER_CORES=2
export SPARK_WOKER_MEMORY=2g
export HADOOP_CONF_DIR=/usr/local/soft/hadoop-3.1.3/etc/hadoop
#export SPARK_MASTER_WEBUI_PORT=8080
#export SPARK_MASTER_PORT=7070
修改从节点ip
vi slaves 修改内容为slave1 slave2(我的子机分别为是slave1 slave2)
(4)分发文件
scp -r /usr/local/soft/spark-3.0.3/ slave1:/usr/local/soft/
scp -r /usr/local/soft/spark-3.0.3/ slave2:/usr/local/soft/
(5)分别在slave1 slave2上设置环境变量
vim /etc/profile
#SPARK
export SPARK_HOME=/usr/local/soft/spark-3.0.3
export PATH=$PATH:${SPARK_HOME}/bin
export PATH=$PATH:${SPARK_HOME}/sbin
source /etc/profile使环境变量生效
(6)启动集群:spark目录下:./start-all.sh
查看节点:
Master:
Slave1:
Scala2:
在主节点master上出现Master 在s1上出现Worker在s2上出现Worker
Spark-shell
浏览器查看192.168.10.100:8080
版权归原作者 小智张 所有, 如有侵权,请联系我们删除。