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分析的更多相关文章

  1. spark复习笔记(4):spark脚本分析

    1.[start-all.sh] #!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one ...

  2. Spark 学习笔记 —— 常见API

    一.RDD 的创建 1)通过 RDD 的集合数据结构,创建 RDD sc.parallelize(List(1,2,3),2) 其中第二个参数代表的是整个数据,分为 2 个 partition,默认情 ...

  3. spark复习笔记(7):sparkstreaming

    一.介绍 1.sparkStreaming是核心模块Spark API的扩展,具有可伸缩,高吞吐量以及容错的实时数据流处理等.数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字 ...

  4. spark复习笔记(7):sparkSQL

    一.saprkSQL模块,使用类sql的方式访问Hadoop,实现mr计算,底层使用的是rdd 1.hive //hadoop  mr  sql 2.phenoix //hbase上构建sql的交互过 ...

  5. spark复习笔记(3)

    在windows上实现wordcount单词统计 一.编写scala程序,引入spark类库,完成wordcount 1.sparkcontextAPI sparkcontext是spark功能的主要 ...

  6. spark复习笔记(2)

    之前工作的时候经常用,隔了段时间,现在学校要用学的东西也忘了,翻翻书谢谢博客吧. 1.什么是spark? Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPL ...

  7. Spark记录-org.apache.spark.sql.hive.HiveContext与org.apache.spark.sql.SQLContext包api分析

    HiveContext/SQLContext val hiveContext=new HiveContext(new SparkContext(new SparkConf().setAppName(& ...

  8. spark复习笔记(1)

    使用spark实现work count ---------------------------------------------------- (1)用sc.textFile(" &quo ...

  9. spark复习笔记(6):RDD持久化

    在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...

随机推荐

  1. spring,配置文件applictionContext.xml,Mybatis mybatis.xml,springMVC spring整合springMVC mybatis

  2. Java中日期

    package com.shiro.springbootshiro; import java.text.SimpleDateFormat; import java.util.Date; /** * 作 ...

  3. 数位dp进阶(hdu2089,3652)

    之前的文章已经讲过如何求1—r中的特殊数,这篇博客就来讲些进阶操作: 直接看例题(hdu2089): (题目是中文的我就不写大意了) 这题与hdu3555最大的区别就是规定了l,不再以1开始: 解决这 ...

  4. ARC093 F - Dark Horse

    https://atcoder.jp/contests/arc093/tasks/arc093_d 题解 先钦定\(1\)号站在第一个位置上,那么他第一轮要和\((2)\)打,第二轮要和\((3,4) ...

  5. Solr集群环境搭建

    一.准备工作 首先保证已经安装JDK工具包: [root@localhost opt]# java -version java version "1.8.0_144" Java(T ...

  6. React-Native 之 GD (二十一)APP 打包

    1.生成一个签名密钥: 在 /android/app 下运行 说明:keytool -genkey -v -keystore my-release-key.keystore -alias my-key ...

  7. 高清摄像头MIPI接口与ARM连接【转】

    本文转载自:http://www.cnblogs.com/whw19818/p/5811299.html MIPI摄像头常见于手机.平板中,支持500万像素以上高清分辨率.它的全称为“Mobile I ...

  8. jsonify返回中文乱码的问题

    参考博客: 解决flask中文乱码的问题 返回内容如图: 实际填写的内容: 从网上找答案,结果很多都是说配置app.config,如下: app.config['JSON_AS_ASCII'] 但我试 ...

  9. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_1_泛型的概念

    ArrayList的源码,.在定义的时候用到了E这个E就是一个未知类型 ArrayList里面的add方法,参数也是E 包括我们之前常用的get方法 返回值也是E 类型什么时候可以确定呢?创建集合对象 ...

  10. 测开之路一百零八:bootstrap表格

    引入bootstrap和jquery 普通表格 html自带的边框线 bootstrap表格属性 bootstrap表格 边框线 鼠标经过变色 压缩表格,减小密度 自适应屏幕 隔行突出(变色) 表格里 ...