spark复习笔记(5):API分析
0.spark是基于hadoop的mr模型,扩展了MR,高效实用MR模型,内存型集群计算,提高了app处理速度。
1.特点:(1)在内存中存储中间结果
(2)支持多种语言:java scala python
(3)内置了80多种算子
2.sparkCore模块(通用执行引擎)
(1)通用的执行引擎,提供内存计算和对外部数据集的引用。
3.spark sql
(1)Spark SQL是Spark Core之上的组件,引入了新的数据抽象称为SchemaRDD,它为结构化和半结构化数据提供支持。
4.Spark Streaming
(1)Spark流利用Spark Core的快速调度功能来执行流分析。它以小批的形式获取数据,并对这些小批的数据执行RDD(弹性分布式数据集)转换。
5.MLlib(Machoine Learning Library)
(1)MLib是一个分布式内存的Spark架构的分布式机器学习框架。根据基准测试,这是由MLlib开发人员针对交替最小而成法(ALS)实现所做的。
一、RDD弹性分布式数据集
(1)弹性分布式数据集RDD是Spark的一个基本数据结构
(2)是对象的不可变数据集
(3)在RDD中的每个数据集都被分成一个个逻辑分区,这使其能够在集群的不同节点上进行计算
(4)RDD能够包含任何类型的Python,Java,或者Scala对象,包括用户自定义类
(5)正常情况下,RDD是一个只读的记录分区集合。RDDs可以通过对稳定存储数据或其他RDDs进行确定性操作来创建。RDD是可以并行操作的元素的容错集合。
(6)有两种方式来创建RDD:在你的驱动程序里面并行化一个存在的集合,对现有集合进行并行处理;第二种方式是引用一个外部存储的数据集
(7)由于复制、序列化和磁盘io,MapReduce中的数据共享很慢。大多数Hadoop应用程序,它们花费90%以上的时间进行HDFS读写操作。认识到这个问题,研究人员开发了一个专门的框架,叫ApacheSequence。SMART的核心思想是弹性分布式数据集(RDD),它支持内存中的处理计算。这意味着,它将内存状态存储为跨作业的对象,并且该对象在这些作业之间是可共享的。内存中的数据共享速度是网络和磁盘的10至100倍。现在让我们来看看在SparkRDD中迭代和交互操作是如何发生的。
(8)在spark RDD上的迭代式操作
下图显示了一个一个在Spark RDD上的迭代式操作,它会将结果存储在分布式内存而不是本地稳定的存储系统并且使得系统更加快。如果分布式内存足够高效的存储中间结果,那么它将会这些结果存储在磁盘上

默认情况下,每次在其上运行操作时,都可能重新计算每个转换后的RDD。但是,您也可以在内存中持久化一个RDD,在这种情况下,Spark会在下一次查询时将集群上的元素保持在周围,以获得更快的访问速度。还支持在磁盘上持久化RDD,或跨多个节点进行复制。
(9)RDD内部包含了5个主要的属性
分区列表
应用给每个切片的计算函数
到其他RDD的依赖列表 //决定依赖关系
(可选的)针对key-value类型的RDD的分区类
(可选的)首选块位置列表
(10)MapPartitionsRDD:针对父RDD的每个分区提供了函数构成的新类型的RDD
(11)ShuffleRDD:从混洗中产生结果的RDD(如数据的再分区)
(12)[DAGScheduler]高级调度器层面,实现按照阶段进行调度(stage),按照shuffle进行判断,实现了面向阶段的调度,对RDD作业的各个阶段计算有向无环图,并且跟踪RDD和每个阶段的输出,找出最小的调度来运行作业,将stage对象以任务集的方式提交给底层的调度器,底层调度器要实现任务调度器,进而在集群上来运行作业。TaskSet已经包含了全部的单独的task,这些task都能基于cluster的数据进行正确的运行
stage通过在需要shuffle的边界处将RDD打碎来创建Stage对象。具有宅依赖RDD的操作,比如map(),filter(),是被管线化一起形成一个任务集。在每个stage中形成一个RDD任务集,被管道化到一个任务集中去了。而具有shuffle依赖的操作则包含多个阶段,一个stage用于输出,另外一个stage用于输入。最后每个阶段只有shuffle依赖。
(13)DAG调度器检测首选位置来运行rask,通过基于当前的缓存状态,并传递给底层的任务调度器来实现
二、术语介绍
[job]
提交给调度的顶层的工作项目,由ActiveJob来进行表示
[Stage]
是task的集合,计算job中的中间结果。同一个RDD上的每个任务都会计算同一个函数
[RDD]
分区的集合,关联一个计算函数,在每个分区上关联一个计算函数,阶段=被分开。stage在shuffle边界处进行分离,这会引进一个隔离,需要上一个stage完成后才能得到一个输出结果
[Task]任务是单独的工作单元。每个发送给一台主机
[cache tracking]缓存跟踪。DAG调度器会找出哪些RDD被缓存。避免不必要的重复计算。同样的,也会记住哪个shufflemap已经输出了结果。可以避免map端shuffle的重复处理。
[Preferred locations]
dag调度器根据rdd的中首选位置属性在哪里运行
[Cleanup]所依赖的作业完成的时候,数据会被清理,为了防止内存泄露。主要针对耗时计算为了容错,统一阶段可能会运行多次,我们称之为attempt
[ActiveJob]在DAG调度器中运行的作业,称为Active Job。作业分为两种类型,
[sparkContext]
/**
* Default min number of partitions for Hadoop RDDs when not given by user
* Notice that we use math.min so the "defaultMinPartitions" cannot be higher than 2.默认的最小分区数不能超过2
* The reasons for this are discussed in https://github.com/mesos/spark/pull/718
*/
def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
spark复习笔记(5):API分析的更多相关文章
- spark复习笔记(4):spark脚本分析
1.[start-all.sh] #!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one ...
- Spark 学习笔记 —— 常见API
一.RDD 的创建 1)通过 RDD 的集合数据结构,创建 RDD sc.parallelize(List(1,2,3),2) 其中第二个参数代表的是整个数据,分为 2 个 partition,默认情 ...
- spark复习笔记(7):sparkstreaming
一.介绍 1.sparkStreaming是核心模块Spark API的扩展,具有可伸缩,高吞吐量以及容错的实时数据流处理等.数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字 ...
- spark复习笔记(7):sparkSQL
一.saprkSQL模块,使用类sql的方式访问Hadoop,实现mr计算,底层使用的是rdd 1.hive //hadoop mr sql 2.phenoix //hbase上构建sql的交互过 ...
- spark复习笔记(3)
在windows上实现wordcount单词统计 一.编写scala程序,引入spark类库,完成wordcount 1.sparkcontextAPI sparkcontext是spark功能的主要 ...
- spark复习笔记(2)
之前工作的时候经常用,隔了段时间,现在学校要用学的东西也忘了,翻翻书谢谢博客吧. 1.什么是spark? Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPL ...
- Spark记录-org.apache.spark.sql.hive.HiveContext与org.apache.spark.sql.SQLContext包api分析
HiveContext/SQLContext val hiveContext=new HiveContext(new SparkContext(new SparkConf().setAppName(& ...
- spark复习笔记(1)
使用spark实现work count ---------------------------------------------------- (1)用sc.textFile(" &quo ...
- spark复习笔记(6):RDD持久化
在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...
随机推荐
- 解决Intellij IDEA中项目不能识别yml配置文件
问题:能读取资源路径下的properties配置文件但是不能读yml配置文件 因为无法读取配置yml配置文件,所以不能配置bean,导致项目启动报错. 解决方法: 在VM options中设置虚拟机加 ...
- SQL Server死锁问题:事务(进程 ID x)与另一个进程被死锁在 锁 | 通信缓冲区资源上并且已被选作死锁牺牲品。请重新运行该事务。
### The error occurred while setting parameters### SQL: update ERP_SCjh_zzc_pl set IF_TONGBU=1 where ...
- PHP高手干货分享:不能不看的50个细节!【PHP培训教程】
兄弟连分享PHP高手干货:不能不看的50个细节 1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以 ...
- php大文件下载+断点续传
如果我们的网站提供文件下载的服务,那么通常我们都希望下载可以断点续传(Resumable Download),也就是说用户可以暂停下载,并在未来的某个时间从暂停处继续下载,而不必重新下载整个文件. 通 ...
- Angular项目 Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed.报错
在angular的项目里,一不小心就会出现这个错误[ngRepeat:dupes] ,这个问题是因为内容有重复引起的解决起来挺简单 在对应的ng-repeat指令中增加track by $index, ...
- flex几种多列布局
基本的等分三列布局 .container{ display: flex; width: 500px; height: 200px; } .left{ flex:1; background: red; ...
- vue 通过绑定事件获取当前行的id
<div @click="router(items.productId)" style="float: left;" :key='items.produc ...
- 我的"开发工具箱"
我使用的IDEA插件 Free Mybatis plugin Alibaba Java Coding Guidelines 我的IDEA开发配置 配置Maven Runner -DarchetypeC ...
- C# 防火墙操作之特定端口
针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙.其大概思路是: /// <summary> /// 添加防火墙例外端口 /// </summary> ...
- sorted排序为什么不是我想要的结果?
数据源: a=['7465', '7514', '8053', '8267', '8507', '8782', '9091', '9292', '9917', '10000', '10009'] 我以 ...