Spark
不稳定记忆
静心则专,静思则通,静身则安,静默则熟。
展开
-
Spark 核心组件解析
1. BlockManager数据存储与管理机制BlockManager是整个Spark底层负责数据存储与管理的一个组件,Driver和Executor的所有数据都由对应的BlockManager进行管理。Driver上有BlockManagerMaster,负责对各个节点上的BlockManager内部管理的数据的元数据进行维护,比如block的增删改等操作,都会在这里维护好元数据的变更...原创 2019-11-13 23:55:48 · 140 阅读 · 0 评论 -
Spark 内存管理
在执行Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各个 Executor 进程间协调任务的调度,后者负责在工作节点上执行具体的计算任务,并将结果返回给 Driver,同时为需要持久化的 RDD 提供存储功能。由于 Dri...原创 2019-11-13 23:52:53 · 188 阅读 · 0 评论 -
Shuffle的核心要点
1 ShuffleMapStage与ResultStage在划分stage时,最后一个stage称为finalStage,它本质上是一个ResultStage对象,前面的所有stage被称为ShuffleMapStage。ShuffleMapStage的结束伴随着shuffle文件的写磁盘。ResultStage基本上对应代码中的action算子,即将一个函数应用在RDD的各个pa...原创 2019-11-13 23:49:20 · 342 阅读 · 0 评论 -
Spark 任务调度机制
在工厂环境下,Spark集群的部署方式一般为YARN-Cluster模式,之后的内核分析内容中我们默认集群的部署方式为YARN-Cluster模式。1.Spark任务提交流程在上一章中我们讲解了Spark YARN-Cluster模式下的任务提交流程,如下图所示:下面的时序图清晰地说明了一个Spark应用程序从提交到运行的完整流程:提交一个Spark应用程序,首先通过Cli...原创 2019-11-13 23:45:01 · 223 阅读 · 0 评论 -
Spark 通讯架构
1 Spark通信架构概述Spark2.x版本使用Netty通讯框架作为内部通讯组件。spark 基于netty新的rpc框架借鉴了Akka的中的设计,它是基于Actor模型,如下图所示:Spark通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信。具体各个组件之间的关系图如下:Endpoint(Client...原创 2019-11-13 23:38:05 · 172 阅读 · 0 评论 -
YARN模式运行机制
1. YARN Client模式在YARN Client模式下,Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster,随后ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的功能相当于一个E...原创 2019-11-13 23:36:20 · 289 阅读 · 0 评论 -
Standalone模式运行机制
Standalone集群有四个重要组成部分,分别是:Driver:是一个进程,我们编写的Spark应用程序就运行在Driver上,由Driver进程执行; Master(RM):是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责; Worker(NM):是一个进程,一个Worker运行在集群中的一台服务器上,主要负责两个职责,一个是用自己的内存存储RDD的某个或某些partiti...原创 2019-11-13 23:34:47 · 1298 阅读 · 0 评论 -
Spark 内核概述
1.Spark核心组件回顾1.1 DriverSpark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:将用户程序转化为作业(job); 在Executor之间调度任务(task); 跟踪Executor的执行情况; 通过UI展示查询运行情况;1.2 ExecutorSpark Executor节...原创 2019-11-13 23:31:55 · 152 阅读 · 0 评论 -
SparkStreaming_DStream转换
DStream上的原语与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的原语,如:updateStateByKey()、transform()以及各种Window相关的原语。1 无状态转化操作无状态转化操作就是把简单的RDD转化操作应用到每个批次上,也就是转化DStream中的每一个RDD。部分...原创 2019-11-12 23:42:52 · 501 阅读 · 1 评论 -
SparkStreaming_Dstream创建
Spark Streaming原生支持一些不同的数据源。一些“核心”数据源已经被打包到Spark Streaming 的 Maven 工件中,而其他的一些则可以通过 spark-streaming-kafka 等附加工件获取。每个接收器都以 Spark 执行器程序中一个长期运行的任务的形式运行,因此会占据分配给应用的 CPU 核心。此外,我们还需要有可用的 CPU 核心来处理数据。这意味着如果要运...原创 2019-11-12 17:02:14 · 314 阅读 · 0 评论 -
SparkStreaming_Dstream入门
1 WordCount案例实操1.需求:使用netcat工具向9999端口不断的发送数据,通过SparkStreaming读取端口数据并统计不同单词出现的次数2.添加依赖<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streamin...原创 2019-11-11 21:25:53 · 217 阅读 · 0 评论 -
Spark Streaming 概述
Spark Streaming概述1 Spark Streaming是什么Spark Streaming用于流式数据的处理。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HD...原创 2019-11-11 17:57:28 · 258 阅读 · 0 评论 -
SparkSQL数据源
一、通用加载/保存方法1.1手动指定选项Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDDs方式的操作,也可以被注册为临时表。把DataFrame注册为临时表之后,就可以对该DataFrame执行SQL查询。Spark SQL的默认数据源为Parquet格式。数据源为Parquet文件时,Spark SQL可以方便的执行所有的操作。修改...原创 2019-11-11 17:08:33 · 681 阅读 · 0 评论 -
自定义聚合函数(强类型)
强类型用户自定义聚合函数:通过继承Aggregator来实现强类型自定义聚合函数package sparksql01import org.apache.spark.SparkConfimport org.apache.spark.sql.{Encoder, Encoders, SparkSession}import org.apache.spark.sql.expressions.A...原创 2019-11-11 15:35:40 · 271 阅读 · 0 评论 -
自定义聚合函数(弱类型)
弱类型用户自定义聚合函数:通过继承UserDefinedAggregateFunction来实现用户自定义聚合函数。import org.apache.spark.SparkConfimport org.apache.spark.sql.{Row, SparkSession}import org.apache.spark.sql.expressions.{MutableAggregati...原创 2019-11-11 15:33:42 · 315 阅读 · 0 评论 -
编写SparkSQL的API
IDEA中程序的打包和运行方式都和SparkCore类似,Maven依赖中需要添加新的依赖项:<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.1....原创 2019-11-11 14:51:22 · 166 阅读 · 0 评论 -
RDD、DataFrame、DataSet
在SparkSQL中Spark为我们提供了两个新的抽象,分别是DataFrame和DataSet。他们和RDD有什么区别呢?首先从版本的产生上来看:RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6)如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。...原创 2019-11-10 15:53:33 · 95 阅读 · 0 评论 -
DataFrame与DataSet的互操作
1. DataFrame转换为DataSet1)创建一个DateFramescala> val df = spark.read.json("examples/src/main/resources/people.json")df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]2)创建一个样例类sca...原创 2019-11-10 15:43:32 · 530 阅读 · 0 评论 -
SparkSQL_DataSet
Dataset是具有强类型的数据集合,需要提供对应的类型信息。1 创建1)创建一个样例类scala> case class Person(name: String, age: Long)defined class Person2)创建DataSetscala> val caseClassDS = Seq(Person("Andy", 32)).toDS()...原创 2019-11-10 15:39:47 · 142 阅读 · 0 评论 -
SparkSQL_DataFrame
1 SparkSession新的起始点在老的版本中,SparkSQL提供两种SQL查询起始点:一个叫SQLContext,用于Spark自己提供的SQL查询;一个叫HiveContext,用于连接Hive的查询。SparkSession是Spark最新的SQL查询起始点,实质上是SQLContext和HiveContext的组合,所以在SQLContext和HiveContext上可用的A...原创 2019-11-10 14:49:29 · 235 阅读 · 0 评论 -
Spark SQL概述
一 什么是Spark SQLSpark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用。我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark S...原创 2019-11-10 10:54:46 · 165 阅读 · 0 评论 -
SparkCore之RDD编程进阶
1 累加器累加器用来对信息进行聚合,通常在向 Spark传递函数时,比如使用 map() 函数或者用 filter() 传条件时,可以使用驱动器程序中定义的变量,但是集群中运行的每个任务都会得到这些变量的一份新的副本,更新这些副本的值也不会影响驱动器中的对应变量。如果我们想实现所有分片处理时更新共享变量的功能,那么累加器可以实现我们想要的效果。1.1 系统累加器针对一个输入的日志...原创 2019-11-09 20:19:17 · 208 阅读 · 0 评论 -
SparkCore之数据读取(Text、Json、Sequence、对象)与保存(HDFS、Mysql、HBase)
一 数据读取1.1 Text文件1)数据读取:textFile(String)scala> val hdfsFile = sc.textFile("hdfs://hadoop102:9000/fruit.txt")hdfsFile: org.apache.spark.rdd.RDD[String] = hdfs://hadoop102:9000/fruit.txt MapP...原创 2019-11-09 18:54:28 · 438 阅读 · 0 评论 -
SparkCore之键值对RDD数据分区器
Spark目前支持Hash分区和Range分区,用户也可以自定义分区,Hash分区为当前的默认分区,Spark中分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle过程属于哪个分区和Reduce的个数注意:(1)只有Key-Value类型的RDD才有分区器的,非Key-Value类型的RDD分区器的值是None(2)每个RDD的分区ID范围:0~numPartition...原创 2019-11-09 18:49:04 · 164 阅读 · 0 评论 -
SparkCore之RDD依赖关系_RDD缓存_RDD CheckPoint
一 RDD依赖关系1 LineageRDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。(1)读取一个HDFS文件并将其中内容映射成一个个元组scala> va...原创 2019-11-09 15:12:57 · 356 阅读 · 0 评论 -
SparkCore之RDD中的函数传递
在实际开发中我们往往需要自己定义一些对于RDD的操作,那么此时需要主要的是,初始化工作是在Driver端进行的,而实际运行程序是在Executor端进行的,这就涉及到了跨进程通信,是需要序列化的。下面我们看几个例子:1 传递一个方法1.创建一个类class Search(query:String){//过滤出包含字符串的数据 def isMatch(s: String)...原创 2019-11-09 11:13:22 · 243 阅读 · 0 评论 -
SparkCore之Action(行动算子)
1 reduce(func)案例1. 作用:通过func函数聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。2. 需求:创建一个RDD,将所有元素聚合得到结果。(1)创建一个RDD[Int]scala> val rdd1 = sc.makeRDD(1 to 10,2)rdd1: org.apache.spark.rdd.RDD[Int] = ParallelC...原创 2019-11-09 10:23:23 · 133 阅读 · 0 评论 -
SparkCore之 RDD的转换(面试开发重点)
RDD的转换(面试开发重点)RDD整体上分为Value类型和Key-Value类型1 Value类型1.1 map(func)案例1. 作用:返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成2. 需求:创建一个1-10数组的RDD,将所有元素*2形成新的RDD(1)创建scala> var source = sc.parallelize(1...原创 2019-11-08 21:32:47 · 403 阅读 · 0 评论 -
SparkCore之RDD的创建
在Spark中创建RDD的创建方式可以分为三种:从集合中创建RDD;从外部存储创建RDD;从其他RDD创建。1 从集合中创建从集合中创建RDD,Spark主要提供了两种函数:parallelize和makeRDD1)使用parallelize()从集合创建scala> val rdd = sc.parallelize(Array(1,2,3,4,5,6,7,8))rdd:...原创 2019-11-05 00:42:23 · 212 阅读 · 0 评论 -
SparkCore之RDD变成模型
在Spark中,RDD被表示为对象,通过对象上的方法调用来对RDD进行转换。经过一系列的transformations定义RDD之后,就可以调用actions触发RDD的计算,action可以是向应用程序返回结果(count, collect等),或者是向存储系统保存数据(saveAsTextFile等)。在Spark中,只有遇到action,才会执行RDD的计算(即延迟计算),这样在运行...原创 2019-11-05 00:36:44 · 105 阅读 · 0 评论 -
SparkCore之RDD概述
1 什么是RDDRDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象。代码中是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合。2 RDD的属性一组分区(Partition),即数据集的基本组成单位; 一个计算每个分区的函数; RDD之间的依赖关系; 一个Partitioner,即RDD的分...原创 2019-11-04 13:07:13 · 172 阅读 · 0 评论 -
Spark运行模式 Local、Standalone、Yarn
1 Spark安装地址1.官网地址http://spark.apache.org/2.文档查看地址https://spark.apache.org/docs/2.1.1/3.下载地址https://spark.apache.org/downloads.html2 重要角色2.1 Driver(驱动器)Spark的驱动器是执行开发程序中的main方法的进程。...原创 2019-11-03 14:36:32 · 709 阅读 · 0 评论 -
Spark概述
1.什么是Spark官网:http://spark.apache.orgSpark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是用Scala进行编写。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQ...原创 2019-11-02 17:14:33 · 188 阅读 · 0 评论