大数据技术之Spark(一)——Spark概述

大数据技术之Spark(一)——Spark概述


文章目录

  • 前言
  • 一、Spark基础
    • 1.1 Spark是什么
    • 1.2 Spark VS Hadoop
    • 1.3 Spark优势及特点
      • 1.3.1 优秀的数据模型和丰富计算抽象
      • 1.3.3 spark的特点
    • 1.4 Spark 运行环境
    • 1.5 Spark运行架构
      • 1.5.1 Driver
      • 1.5.2 Executor
      • 1.5.3 Master & Worker
      • 1.5.4 ApplicationMaster
    • 1.6 核心概念
      • 1.6.1 Executor与Core
      • 1.6.2 并行度(Parallelism)
      • 1.6.3 有向无环图(DAG)
        • 工作原理
        • 宽依赖与窄依赖
  • 二、安装方式
    • WordCount方法实现
  • 三、Spark核心编程
    • 3.1 RDD
      • 3.1.1 RDD创建:parallelize和makeRDD
        • 1)从集合(内存)中创建RDD
        • 2)从外部存储(文件)创建RDD
        • 3)从其他RDD创建
        • 4)直接创建RDD(new)
      • 3.1.2 RDD并行度与分区
      • 3.1.3 RDD算子
    • 3.2 累加器
    • 3.3 广播变量


前言

Apache Spark是一个开源的、强大的分布式查询和处理引擎,它提供MapReduce的灵活性和可扩展性,但速度明显要快上很多;拿数据存储在内存中的时候来说,它比Apache Hadoop 快100倍,访问磁盘时也要快上10倍。

一、Spark基础

1.1 Spark是什么

Spark 是一种由 Scala 语言开发的快速、通用、可扩展的大数据分析引擎

在这里插入图片描述

Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core;

Spark SQL:兼容HIVE数据,提供比Hive更快的查询速度(10~100x)的分布式SQL引擎,开发者可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;

Spark Streaming:流式计算分解成一系列小的批处理作业利用spark轻量级低时延的框架来支持流数据处理,目前已经支持Kafka,Flume等;

MLilb:提供基于Spark的机器学习算法库,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;
GraphX:提供图形计算框架,与Pregel/GraphLab兼容。

1.2 Spark VS Hadoop

尽管 Spark 相对于 Hadoop 而言具有较大优势,但 Spark 并不能完全替代 Hadoop,Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。

HadopSpark
类型分布式基础平台, 包含计算, 存储, 调度分布式计算工具
场景大规模数据集上的批处理迭代计算, 交互式计算, 流计算
价格对机器要求低, 便宜对内存有要求, 相对较贵
编程范式Map+Reduce, API 较为底层, 算法适应性差RDD 组成 DAG 有向无环图, API 较为顶层, 方便使用
数据存储结构MapReduce 中间计算结果存在 HDFS 磁盘上, 延迟大RDD 中间运算结果存在内存中 , 延迟小
运行方式Task 以进程方式维护, 任务启动慢Task 以线程方式维护, 任务启动快

SparkHadoop 的根本差异是多个作业之间的数据通信问题 ;Spark 多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘。
实际上,Spark 已经很好地融入了 Hadoop 生态圈,并成为其中的重要一员,它可以借助于 YARN 实现资源调度管理,借助于 HDFS 实现分布式存储。

此外,Hadoop 可以使用廉价的、异构的机器来做分布式存储与计算,但是,Spark 对硬件的要求稍高一些,对内存与 CPU 有一定的要求。

1.3 Spark优势及特点

1.3.1 优秀的数据模型和丰富计算抽象

首先看看MapReduce它提供了对数据访问和计算的抽象,但是对于数据的复用就是简单的将中间数据写到一个稳定的文件系统中(例如 HDFS),所以会产生数据的复制备份,磁盘的I/O以及数据的序列化,所以在遇到需要在多个计算之间复用中间结果的操作时效率就会非常的低。而这类操作是非常常见的,例如迭代式计算,交互式数据挖掘,图计算等。

因此 AMPLab 提出了一个新的模型,叫做 RDD

  • RDD 是一个可以容错且并行的数据结构(其实可以理解成分布式的集合,操作起来和操作本地集合一样简单),它可以让用户显式的将中间结果数据集保存在 内存 中,并且通过控制数据集的分区来达到数据存放处理最优化。同时 RDD 也提供了丰富的 API (map、reduce、filter、foreach、redeceByKey...)来操作数据集。

后来 RDDAMPLab 在一个叫做 Spark 的框架中提供并开源。

1.3.3 spark的特点

:与 Hadoop 的 MapReduce 相比,Spark 基于内存的运算要快 100 倍以上,基于硬盘的运算也要快 10 倍以上。Spark 实现了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流。

易用:Spark 支持 Java、Python、R 和 Scala 的 API,还支持超过 80 种高级算法,使用户可以快速构建不同的应用。而且 Spark 支持交互式的 Python 和 Scala 的 shell,可以非常方便地在这些 shell 中使用 Spark 集群来验证解决问题的方法。

通用:Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX),这些不同类型的处理都可以在同一个应用中无缝使用。

兼容性:Spark 可以非常方便地与其他的开源产品进行融合。比如,Spark 可以使用 Hadoop 的 YARN 和 Apache Mesos 作为它的资源管理和调度器,并且可以处理所有 Hadoop 支持的数据,包括 HDFS、HBase 和 Cassandra 等。这对于已经部署 Hadoop 集群的用户特别重要,因为不需要做任何数据迁移就可以使用 Spark 的强大处理能力。

1.4 Spark 运行环境

local 本地模式(单机) - 不需要其他任何节点资源就可以在本地执行Spark代码的环境

  • 学习测试使用。
  • 分为 local 单线程和 local-cluster 多线程。

standalone 独立集群模式

  • 学习测试使用。
  • 典型的 Mater/slave 模式。

standalone-HA 高可用模式

  • 生产环境使用
  • 基于 standalone 模式,使用 zk 搭建高可用,避免 Master 是有单点故障的。

on yarn 集群模式

  • 生产环境使用
  • 运行在 yarn 集群之上,由 yarn 负责资源管理,Spark 负责任务调度和计算。
  • 好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。

⑤ on mesos 集群模式

  • 国内使用较少
  • 运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算。

⑥ on cloud 集群模式

  • 中小公司未来会更多的使用云服务
  • 比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon 的 S3。

1.5 Spark运行架构

Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。
如下图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。
在这里插入图片描述

1.5.1 Driver

Spark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。DriverSpark作业执行时主要负责:

  • 将用户程序转化为作业(job)
  • 在Executor之间调度任务(task)
  • 跟踪Executor的执行情况
  • 通过UI展示查询运行情况

1.5.2 Executor

Spark Executor是集群中工作节点(Worker)中的一个JVM进程,负责在Spark 作业中运行具体任务(Task),任务彼此之间相互独时启动,并且始终伴随着整个Spark 应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。
Executor有两个核心功能:

  • 负责运行组成Spark应用的任务,并将结果返回给驱动器进程
  • 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD 提供内存式存储。RDD 是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

1.5.3 Master & Worker

Spark集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:MasterWorker,这里的Master是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于Yarn环境中的RM, 而Worker呢,也是进程,一个Worker运行在集群中的一台服务器上,由Master分配资源对数据进行并行的处理和计算,类似于Yarn环境中NM

1.5.4 ApplicationMaster

Hadoop用户向YARN集群提交应用程序时,提交程序中应该包含ApplicationMaster,用于向资源调度器申请执行任务的资源容器Container,运行用户自己的程序任务job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。
说的简单点就是,ResourceManager(资源)和Driver(计算)之间的解耦合靠的就是ApplicationMaster。

1.6 核心概念

1.6.1 Executor与Core

Spark Executor是集群中运行在工作节点(Worker)中的一个JVM进程,是整个集群中的专门用于计算的节点。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。这里的资源一般指的是工作节点Executor的内存大小和使用的虚拟CPU(Core)数量。
应用程序相关启动参数如下:

名称说明
–num-executors配置Executor的数量
–executor-memory配置每个Executor的内存大小
–executor-cores配置每个Executor的虚拟CPU core数量

1.6.2 并行度(Parallelism)

在分布式计算框架中一般都是多个任务同时执行,由于任务分布在不同的计算节点进行计算,所以能够真正地实现多任务并行执行,记住,这里是并行,而不是并发。这里我们将整个集群并行执行任务的数量称之为并行度。那么一个作业到底并行度是多少呢?这个取决于框架的默认配置。应用程序也可以在运行过程中动态修改。

1.6.3 有向无环图(DAG)

在这里插入图片描述
这里所谓的有向无环图,并不是真正意义的图形,而是由Spark程序直接映射成的数据流的高级抽象模型。简单理解就是将整个程序计算的执行过程用图形表示出来,这样更直观,更便于理解,可以用于表示程序的拓扑结构。
DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。

sc.parallelize(1 to 10).map((_,1)).reduceByKey(_+_)

工作原理

  • 根据RDD之间的依赖关系,形成一个DAG DAG
  • Scheduler将DAG划分为多个Stage

划分依据:是否发生宽依赖(shuffle)
划分规则:从后往前,遇到宽依赖且各位新的stage
每个stage由一组并行的Task组成

宽依赖与窄依赖

二、安装方式

Spark安装方式

WordCount方法实现

// 1. 读取文件,获取一行一行的数据
// hello world
val lines = sc.textFile("datas")

// 2. 将一行数据进行拆分,形成一个一个的单词(分词)
// "hello world" => hello, world, hello, world
val words = lines.flatMap(_.split(" "))

// 3. 将数据根据单词进行分组,便于统计
// (hello, hello, hello), (world, world)
val wordGroup = words.groupBy(word => word)

// 4. 对分组后的数据进行转换
//  (hello, hello, hello), (world, world)
// (hello, 3), (world, 3)
val wordToCount = wordGroup.map {
	case(word, list) => {
		(word, list.size)
	}
}

// 5. 将转换结果采集到控制台打印出来
wordToCount.collect.foreach(println)

在这里插入图片描述

三、Spark核心编程

Spark计算框架为了能够进行 高并发高吞吐 的数据处理,封装了三大数据结构,用于处理不同的应用场景。三大数据结构分别是:

  • RDD : 弹性分布式数据集
  • 累加器:分布式共享 只写 变量
  • 广播变量:分布式共享 只读 变量

3.1 RDD

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的 数据处理模型 。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。

Resilient :它是弹性的,RDD 里面的中的数据可以保存在 内存 中或者 磁盘 里面。

存储的弹性:内存与磁盘的自动切换
容错的弹性:数据丢失可以自动回复
计算的弹性:计算出错重试机制
分片的弹性:可根据需要重新分片

Distributed : 它里面的元素是分布式存储的,可以用于分布式计算。数据存储在大数据集群不同节点上。

Dataset: 它是一个集合,封装了计算逻辑,并不保存数据

3.1.1 RDD创建:parallelize和makeRDD

spark中创建RDD的创建方式可以分为四种:

1)从集合(内存)中创建RDD

从集合中创建RDDSpark主要提供了两个方法:parallelizemakeRDD

parallelize:

scala> var rdd = sc.parallelize(1 to 4)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[168] at parallelize at <console>:24
scala> rdd.collect
res107: Array[Int] = Array(1, 2, 3, 4)

makeRDD:
从底层代码实现来讲,makeRDD方法其实就是parallelize方法

scala> var rdd = sc.parallelize(1 to 4)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[168] at parallelize at <console>:24
scala> rdd.collect
res107: Array[Int] = Array(1, 2, 3, 4)
```

在这里插入图片描述

在这里插入图片描述

2)从外部存储(文件)创建RDD

由外部存储系统的数据集创建RDD包括:本地的文件系统,所有Hadoop支持的数据集,比如HDFSHBase等。

// 从文件中创建RDD,将文件中的数据作为处理的数据源
// 1. path路径默认以当前环境的根路径为基准。可以写绝对路径,也可以写相对路径。
// 2. path路径可以是文件的具体路径,也可以是目录名称
// 3. path路径还可以使用通配符 *
// 4. path路径可以是分布式存储系统路径HDFS
scala> val rdd = sc.textFile("hdfs://hadoop02:9000/tmp/wordcount.txt")
scala> val rdd = sc.textFile("file:///opt/stufile/words.txt")

textFile:以行为单位来读取数据。读取的数据都是字符串
wholeTextFiles:以文件为单位读取数据。读取的结果表示为元组。第一个元素表示文件路径,第二个元素表示文件内容

3)从其他RDD创建

通过一个RDD运算完后,再产生新的RDD

4)直接创建RDD(new)

使用new的方式直接构造RDD,一般由Spark框架自身使用。

3.1.2 RDD并行度与分区

默认情况下,Spark可以将一个作业切分多个任务后,发送给Executor节点并行计算,而能够并行计算的任务数量我们称之为并行度。
需要注意的是,并行执行的任务数量 ≠ 切分任务的数量。

// RDD的并行度 & 分区
// makeRDD方法可以传递第二个参数,用于表示分区的数量
// makeRDD第二个参数可以不传递,会使用默认值
val rdd = sc.makeRDD( List(1,2,3,4), 2 )

// 将处理的数据保存成分区文件
rdd.saveAsTextFile("hdfs://hadoop02:9000/tmp/rdd2_output")

在这里插入图片描述

3.1.3 RDD算子

我们放在下一篇里面详细介绍=>RDD算子

3.2 累加器

3.3 广播变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/4449.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式-4、适配器模式

适配器模式 在我们的应⽤程序中我们可能需要将两个不同接⼝的类来进⾏通信&#xff0c;在不 修改这两个的前提下我们可能会需要某个中间件来完成这个衔接的过程。 这个中间件就是适配器。所谓适配器模式就是将⼀个类的接⼝&#xff0c;转换成客 户期望的另⼀个接⼝。它可以让原…

【协议】03、深度解剖之HTTP协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的标准、约定或者规则的集合&#xff0c;超文本传输协议(HTTP)是一种通信协议&#xff0c;它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。使用的默认端口为80端口。浏览器的默认端口也是80端…

【操作系统】第二章:进程管理

第二章&#xff1a;进程管理 OVERVIEW第二章&#xff1a;进程管理一、进程与线程1.进程概述&#xff08;1&#xff09;进程PCB&#xff1a;&#xff08;2&#xff09;进程的组成&#xff1a;&#xff08;3&#xff09;进程的特征&#xff1a;2.进程的状态与转换&#xff08;1&a…

基于储能进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

算法练习随记(三)

1.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#x…

如何用AI玩转IG广告,打造高互动的引流营销?

如何用AI玩转IG广告&#xff0c;打造高互动的引流营销&#xff1f;相信做引流的卖家&#xff0c;都有接触过IG广告&#xff0c;然而流量引过来了&#xff0c;怎么处理客户的私信&#xff1f; 私信对话是你与粉丝培养深度关系的管道&#xff0c;好的互动不仅能养成高黏着度的铁粉…

5 个Python高级特性让你在不知不觉中成为Python高手

你已经使用 Python 编程了一段时间&#xff0c;编写脚本并解决各种问题。是你的水平出色吗&#xff1f;你可能只是在不知不觉中利用了Python的高级特性。 从闭包&#xff08;closure&#xff09;到上下文管理器&#xff08;context managers&#xff09;&#xff0c;本文给出一…

Linked List

链表在力扣上的介绍&#xff1a;链表&#xff08;Linked List&#xff09;是最简单的线性的、动态数据结构。理解它是理解树结构、图结构的基础。区别于数组&#xff0c;链表中的元素不是存储在内存中连续的一片区域&#xff0c;链表中的数据存储在每一个称之为「结点」复合区域…

五、传输层

&#xff08;一&#xff09;TCP传输控制协议 可靠的、面向连接的字节流服务&#xff0c;全双工&#xff0c;有端口寻址功能 1、TCP的三种机制 1.使用序号对分段的数据进行标记&#xff0c;便于调整数据包 2.TCP使用确认、校验和和定时器系统提供可靠性 3.TCP使用可变大小的…

ACK Net Exporter 与 sysAK 出击:一次深水区的网络疑难问题排查经历

作者&#xff1a;谢石、碎牙 不久前的一个周五的晚上&#xff0c;某客户A用户体验提升群正处在一片平静中&#xff0c;突然&#xff0c;一条简短的消息出现&#xff0c;打破了这种祥和&#xff1a; “我们在ACK上创建的集群&#xff0c;网络经常有几百毫秒的延迟。" 偶发…

C++模板基础(四)

函数模板&#xff08;四&#xff09; ● 函数模板的实例化控制 – 显式实例化定义&#xff1a; template void fun(int) / template void fun(int) //header.h template<typename T> void fun(T x) {std::cout << x << std::endl; }//main.cpp #include&quo…

Python(白银时代)——文件操作

文件的基本操作 概念 在计算机中&#xff0c;文件是以 二进制 的方式保存在磁盘上的 文本文件 和 二进制文件 文本文件&#xff08;用记事本打开能直接能看懂的&#xff09; 可以使用 文本编辑软件查看 本质上还是二进制的,比如 Python的源码文件 二进制文件&#xff08;用…

并发编程(六)-AbstractExecutorService源码分析

一、AbstractExecutorService简介AbstractExecutorService是一个抽象类&#xff0c;实现了ExecutorService接口&#xff0c;提供了线程池的基本实现。它是Java Executor框架的核心类&#xff0c;提供了线程池的基本操作&#xff0c;如提交任务、管理线程池、执行任务等。自定义…

阻塞队列(BlockingQueue)的实现和使用

阻塞队列&#xff08;BlockingQueue&#xff09; 文章目录阻塞队列&#xff08;BlockingQueue&#xff09;阻塞队列的梗概解耦合和削峰填谷java代码实现一个阻塞队列阻塞队列的梗概 众所周知&#xff0c;队列是一种数据结构&#xff0c;符合先进先出的结构&#xff0c;先进先出…

【动态绘图】python可视化--丝滑版

✅作者简介&#xff1a;在读博士&#xff0c;伪程序媛&#xff0c;人工智能领域学习者&#xff0c;深耕机器学习&#xff0c;交叉学科实践者&#xff0c;周更前沿文章解读&#xff0c;提供科研小工具&#xff0c;分享科研经验&#xff0c;欢迎交流&#xff01;&#x1f4cc;个人…

鼎桥通信,拥抱基础创新的“高灵活性”时代

作者 | 曾响铃 文 | 响铃说 伴随数智化转型成为时代变革大方向&#xff0c;一批走在时代前端的数智化转型企业应运而生&#xff0c;不断丰富5G、物联网等新兴技术的应用场景&#xff0c;构建万智互联的产业生态。作为国内通信领域的引领者&#xff0c;鼎桥通信技术有限公司&a…

AF染料试剂Alexa fluor 680 PEG Biotin,AF680 PEG Biotin,荧光强度稳定利于多种荧光标记

文章关键词&#xff1a;AF染料试剂&#xff0c;AF680&#xff0c;PE-Biotin衍生物Alexa fluor 680 PEG Biotin&#xff0c;AF680 PEG Biotin | Alexa fluor 680-PEG-生物素| CAS&#xff1a;N/A | 纯度&#xff1a;95%试剂参数信息&#xff1a; CAS&#xff1a;N/A 外观&am…

docker使用

dokcer 安装 # 1、yum 包更新到最新 yum update # 2、安装需要的软件包&#xff0c; yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3、 设置yum源 yum-config-manager …

精确性和准确性是两码事儿

准确性(Accuracy)是与正确答案的接近程度&#xff0c;精确性(Precision)是对这个答案的分辨率。 假设&#xff0c;你问我&#xff0c;”现在几点了?” 我抬头看看太阳&#xff0c;然后估算了一下&#xff0c;回答道 “现在是上午 10 点 35 分 22.131 秒” 我给出的是一个足…

Nacos配置中心优雅配置JSON数据格式

在我业务开发中&#xff0c;需要在配置中心配置Json数据&#xff0c;返回给前端。因Nacos默认不支持Json格式配置&#xff0c;需要搭配监听器获取配置中心Json数据&#xff0c;返回给客户端。二、搭配Nacos配置Josn数据1. bootstrap.ymlserver:port: 9000 spring:application:n…