作者小头像 Lv.2
98 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

大数据
个人勋章
TA还没获得勋章~
成长雷达
50
48
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

大数据

达成规则

发布时间 2021/03/09 17:49:53 最后回复 yuhuashi 2021/04/18 00:30:17 版块 社区活动
7605 113 0
他的回复:
华为云ID:hw31371704第四周(第四章) SparkStreaming 概述1.1 Spark Streaming 是什么:Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多,例如:Kafka、 Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语 如:map、reduce、join、window 等进行运算。而结果也能保存在很多地方,如 HDFS,数据库等。和 Spark 基于 RDD 的概念很相似,Spark Streaming 使用离散化流(discretized stream)作为抽 象表示,叫作 DStream。DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收 到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此得名“离散化”)。所以 简单来将,DStream 就是对 RDD 在实时数据处理场景的一种封装。1.2 Spark Streaming 的特点:(1)易用;(2)容错;(3)易整合到Spark体系Dstream2.1 WordCount 解析:Discretized Stream 是 Spark Streaming 的基础抽象,代表持续性的数据流和经过各种 Spark 原语操作后的结果数据流。在内部实现上,DStream 是一系列连续的 RDD 来表示。每个 RDD 含有 一段时间间隔内的数据。对数据的操作也是按照 RDD 为单位来进行的;计算过程由 Spark Engine 来完成。2.2 DStream 创建:用法及说明:可以通过使用 ssc.queueStream(queueOfRDDs)来创建 DStream,每一个推送到 这个队列中的 RDD,都会作为一个 DStream 处理;自定义数据源:用法及说明:需要继承 Receiver,并实现 onStart、onStop 方法来自定义数据源采集。2.3 DStream 转换:DStream 上的操作与 RDD 的类似,分为 Transformations(转换)和 Output Operations(输 出)两种,此外转换操作中还有一些比较特殊的原语,如:updateStateByKey()、transform()以及 各种 Window 相关的原语。无状态转化操作:无状态转化操作就是把简单的 RDD 转化操作应用到每个批次上,也就是转化 DStream 中的每 一个 RDD。部分无状态转化操作列在了下表中。注意,针对键值对的 DStream 转化操作(比如 reduceByKey())要添加 import StreamingContext._才能在 Scala 中使用。(1)Transform:Transform 允许 DStream 上执行任意的 RDD-to-RDD 函数。即使这些函数并没有在 DStream 的 API 中暴露出来,通过该函数可以方便的扩展 Spark API。该函数每一批次调度一次。其实也 就是对 DStream 中的 RDD 应用转换。(2)join:两个流之间的 join 需要两个流的批次大小一致,这样才能做到同时触发计算。计算过程就是 对当前批次的两个流中各自的 RDD 进行 join,与两个 RDD 的 join 效果相同。2.4 DStream 输出:输出操作指定了对流数据经转化操作得到的数据所要执行的操作(例如把结果推入外部数据库 或输出到屏幕上)。与 RDD 中的惰性求值类似,如果一个 DStream 及其派生出的 DStream 都没 有被执行输出操作,那么这些 DStream 就都不会被求值。如果 StreamingContext 中没有设定输出 操作,整个 context 就都不会启动。(1)print():在运行流程序的驱动结点上打印 DStream 中每一批次数据的最开始 10 个元素。这 用于开发和调试。在 Python API 中,同样的操作叫 print()。(2)saveAsTextFiles(prefix, [suffix]):以 text 文件形式存储这个 DStream 的内容。每一批次的存 储文件名基于参数中的 prefix 和 suffix。”prefix-Time_IN_MS[.suffix]”。(3)saveAsObjectFiles(prefix, [suffix]):以 Java 对象序列化的方式将 Stream 中的数据保存为 SequenceFiles . 每一批次的存储文件名基于参数中的为"prefix-TIME_IN_MS[.suffix]". Python 中目前不可用。(4)saveAsHadoopFiles(prefix, [suffix]):将 Stream 中的数据保存为 Hadoop files. 每一批次的存 储文件名基于参数中的为"prefix-TIME_IN_MS[.suffix]"。Python API 中目前不可用。(5)foreachRDD(func):这是最通用的输出操作,即将函数 func 用于产生于 stream 的每一个 RDD。其中参数传入的函数 func 应该实现将每一个 RDD 中数据推送到外部系统,如将 RDD 存入文件或者通过网络将其写入数据库。通用的输出操作 foreachRDD(),它用来对 DStream 中的 RDD 运行任意计算。这和 transform() 有些类似,都可以让我们访问任意 RDD。在 foreachRDD()中,可以重用我们在 Spark 中实现的 所有行动操作。比如,常见的用例之一是把数据写到诸如 MySQL 的外部数据库中。注意: 1) 连接不能写在 driver 层面(序列化) 2) 如果写在 foreach 则每个 RDD 中的每一条数据都创建,得不偿失; 3) 增加 foreachPartition,在分区创建(获取)。2.5 DStream 关闭:流式任务需要 7*24 小时执行,但是有时涉及到升级代码需要主动停止程序,但是分 布式程序,没办法做到一个个进程去杀死,所有配置优雅的关闭就显得至关重要了。 使用外部文件系统来控制内部程序关闭。
发布时间 2021/03/09 17:49:53 最后回复 yuhuashi 2021/04/18 00:30:17 版块 社区活动
7605 113 0
他的回复:
华为云ID:hw31371704第三周(第三章)SparkSQL 概述:    1. SparkSQL 是什么    Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。    2. Hive and SparkSQL:     SparkSQL 的前身是 Shark,给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供快 速上手的工具。     Hive 是早期唯一运行在 Hadoop 上的 SQL-on-Hadoop 工具。但是 MapReduce 计算过程 中大量的中间磁盘落    地过程消耗了大量的 I/O,降低的运行效率,为了提高 SQL-on-Hadoop 的效率,大量的 SQL-on-Hadoop 工具    开始产生,其中表现较为突出的是:     ⚫ Drill     ⚫ Impala     ⚫ Shark     其中 Shark 是伯克利实验室 Spark 生态环境的组件之一,是基于 Hive 所开发的工具,它修 改了下图所示的右下角    的内存管理、物理计划、执行三个模块,并使之能运行在 Spark 引擎 上。SparkSQL 特点:     1. 易整合 :无缝的整合了 SQL 查询和 Spark 编程    2. 统一的数据访问 :使用相同的方式连接不同的数据源    3. 兼容 Hive :在已有的仓库上直接运行 SQL 或者 HiveQL    4. 标准数据连接:通过 JDBC 或者 ODBC 来连接DataFrame 是什么:     在 Spark 中,DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中 的二维表格。DataFrame     与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame 所表示的二维表数据集的每一列都带有名称    和类型。这使得 Spark SQL 得以洞察更多的结构 信息,从而对藏于 DataFrame 背后的数据源以及作用于 DataFra    me 之上的变换进行了针对性 的优化,最终达到大幅提升运行时效率的目标。反观 RDD,由于无从得知所存数据元    素的 具体内部结构,Spark Core 只能在 stage 层面进行简单、通用的流水线优化。     同时,与 Hive 类似,DataFrame 也支持嵌套数据类型(struct、array 和 map)。从 API 易用性的角度上看,Da    taFrame API 提供的是一套高层的关系操作,比函数式的 RDD API 要 更加友好,门槛更低。DataSet 是什么 :    DataSet 是分布式数据集合。DataSet 是 Spark 1.6 中添加的一个新抽象,是 DataFrame 的一个扩展。它提供了     RDD 的优势(强类型,使用强大的 lambda 函数的能力)以及 Spark SQL 优化执行引擎的优点。DataSet 也可以    使用功能性的转换(操作 map,flatMap,filter 等等)。     ➢ DataSet 是 DataFrame API 的一个扩展,是 SparkSQL 最新的数据抽象     ➢ 用户友好的 API 风格,既具有类型安全检查也具有 DataFrame 的查询优化特性;     ➢ 用样例类来对 DataSet 中定义数据的结构信息,样例类中每个属性的名称直接映射到 DataSet 中的字段名称;    ➢ DataSet 是强类型的。比如可以有 DataSet[Car],DataSet[Person]。     ➢ DataFrame 是 DataSet 的特列,DataFrame=DataSet[Row] ,所以可以通过 as 方法将 DataFrame 转换为 D    ataSet。Row 是一个类型,跟 Car、Person 这些的类型一样,所有的 表结构信息都用 Row 来表示。获取数据时    需要指定顺序
发布时间 2021/03/09 17:49:53 最后回复 yuhuashi 2021/04/18 00:30:17 版块 社区活动
7605 113 0
他的回复:
华为云ID:hw31371704第二周(第二章)Spark 运行架构 运行架构 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。 如下图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master, 负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。核心组件 由上图可以看出,对于 Spark 框架有两个核心组件: Driver Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。 Driver 在 Spark 作业执行时主要负责: ➢ 将用户程序转化为作业(job) ➢ 在 Executor 之间调度任务(task) ➢ 跟踪 Executor 的执行情况 ➢ 通过 UI 展示查询运行情况 实际上,我们无法准确地描述 Driver 的定义,因为在整个的编程过程中没有看到任何有关 Driver 的字眼。所以简单理解,所谓的 Driver 就是驱使整个应用运行起来的程序,也称之为 Driver 类。4.2.2 Executor Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业 中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了 故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点 上继续运行。Executor 有两个核心功能:➢ 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程➢ 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存 式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存 数据加速运算。Executor 与 Core Spark Executor 是集群中运行在工作节点(Worker)中的一个 JVM 进程,是整个集群中 的专门用于计算的节点。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资 源。这里的资源一般指的是工作节点 Executor 的内存大小和使用的虚拟 CPU 核(Core)数 量。Spark 核心编程:Spark 计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于 处理不同的应用场景。三大数据结构分别是:➢ RDD : 弹性分布式数据集 ➢ 累加器:分布式共享只写变量➢ 广播变量:分布式共享只读变量 接下来我们一起看看这三大数据结构是如何在数据处理中使用的。  RDD  什么是 RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据 处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行 计算的集合。➢ 弹性⚫ 存储的弹性:内存与磁盘的自动切换;⚫ 容错的弹性:数据丢失可以自动恢复;⚫ 计算的弹性:计算出错重试机制;⚫ 分片的弹性:可根据需要重新分片。➢ 分布式:数据存储在大数据集群不同节点上➢ 数据集:RDD 封装了计算逻辑,并不保存数据➢ 数据抽象:RDD 是一个抽象类,需要子类具体实现➢ 不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在 新的 RDD 里面封装计算逻辑➢ 可分区、并行计算执行原理从计算的角度来讲,数据处理过程中需要计算资源(内存 & CPU)和计算模型(逻辑)。 执行时,需要将计算资源和计算模型进行协调和整合。 Spark 框架在执行时,先申请资源,然后将应用程序的数据处理逻辑分解成一个一个的 计算任务。然后将任务发到已经分配资源的计算节点上, 按照指定的计算模型进行数据计 算。最后得到计算结果。RDD 是 Spark 框架中用于数据处理的核心模型,接下来我们看看,在 Yarn 环境中,RDD 的工作原理:1) 启动 Yarn 集群环境2) Spark 通过申请资源创建调度节点和计算节点3) Spark 框架根据需求将计算逻辑根据分区划分成不同的任务4) 调度节点将任务根据计算节点状态发送到对应的计算节点进行计算从以上流程可以看出 RDD 在整个流程中主要用于将逻辑进行封装,并生成 Task 发送给 Executor 节点执行计算,接下来我们就一起看看 Spark 框架中 RDD 是具体是如何进行数据 处理的。Spark 源码:环境准备(Yarn 集群) :Driver,Executor组件通信(Socket): Driver => Executor应用程序的执行:(1) RDD 依赖(2) 阶段的划分(3) 任务的切分(4) 任务的调度(5) 任务的执行Shuffle:(1) Shuffle 的原理和执行过程 :➢ shuffleWriterProcessor(写处理器)➢ ShuffleManager: Hash(早期) & Sort(当前)(2) Shuffle 写磁盘(3) Shuffle 读取磁盘内存的管理 :(1) 内存的分类(2) 内存的配置
发布时间 2021/03/09 17:49:53 最后回复 yuhuashi 2021/04/18 00:30:17 版块 社区活动
7605 113 0
他的回复:
华为云ID:hw31371704第一章Spark 概述 :1.1 Spark 是什么Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。1.2 Spark and HadoopHadoop 的 MapReduce 是大家广为熟知的计算框架,那为什么咱们还 要学习新的计算框架 Spark 呢,这里就不得不提到 Spark 和 Hadoop 的关系。➢ Hadoop ⚫ 2006 年 1 月,Doug Cutting 加入 Yahoo,领导 Hadoop 的开发 ⚫ 2008 年 1 月,Hadoop 成为 Apache 顶级项目 ⚫ 2011 年 1.0 正式发布 ⚫ 2012 年 3 月稳定版发布 ⚫ 2013 年 10 月发布 2.X (Yarn)版本 ➢ Spark ⚫ 2009 年,Spark 诞生于伯克利大学的 AMPLab 实验室 ⚫ 2010 年,伯克利大学正式开源了 Spark 项目 ⚫ 2013 年 6 月,Spark 成为了 Apache 基金会下的项目 ⚫ 2014 年 2 月,Spark 以飞快的速度成为了 Apache 的顶级项目 ⚫ 2015 年至今,Spark 变得愈发火爆,大量的国内公司开始重点部署或者使用 Spark1.3 Spark 核心模块➢ Spark Core Spark Core 中提供了 Spark 最基础与最核心的功能,Spark 其他的功能如:Spark SQL, Spark Streaming,GraphX, MLlib 都是在 Spark Core 的基础上进行扩展的 ➢ Spark SQL Spark SQL 是 Spark 用来操作结构化数据的组件。通过 Spark SQL,用户可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。 ➢ Spark Streaming Spark Streaming 是 Spark 平台上针对实时数据进行流式计算的组件,提供了丰富的处理 数据流的 API。 ➢ Spark MLlib MLlib 是 Spark 提供的一个机器学习算法库。MLlib 不仅提供了模型评估、数据导入等 额外的功能,还提供了一些更底层的机器学习原语。 ➢ Spark GraphX GraphX 是 Spark 面向图计算提供的框架与算法库。