spark

1. Spark的四大特性

  1. 速度快
  • spark比mapreduce快的两个原因

      1. 基于内存
    1. mapreduce任务后期在计算的是时候,每一个job的输出结果都会落地到磁盘,后续有其他的job要依赖于前面job的输出结果,这个时候就需要进行大量的磁盘io操作,性能较低
    
    2. spark任务后期在进行计算的时候,job的结果是可以保存在内存中的,后面有其他的job需要以言语前面job的输出结果,这个时候可以直接从内存中读取,避免了磁盘io操作,性能比较高
    
    spark程序和mapreduce程序都会产生shuffle阶段,在shuffle阶段中他们产生的数据都会保留在磁盘中
      1. 进程与线程
      1 mapreduce任务以进程的方式运行在yarn集群中,比如说有100个mapTask,一个task就需要一个进程,这些task要运行就需要开启100个进程
    
      2 spark任务以线程的方式运行在进程中,比如说有100个task,则一个task就对应一个线程
    1. 易用性
    2. 可以用java、scala、python、R等不同的语言来快速编写spark程序
    3. 通用性
    4. 兼容性
      1. spark程序有多种运行模式

        • standAlone

          • spark自带的独立运行模式,整个任务的资源分配由spark集群的的Master来负责
        • yarn
          • 可以把spark程序提交到yarn上运行,整个任务的资源分配由yarn中的ResourceManager负责
        • mesos
          • apache开源的一个类似于yarn的资源调度平台

2. spark集群架构

  • Driver

    • 他会执行客户端写好的main方法,构建一个SparkContext对象(该对象是所有spark程序的执行入口)
  • Application
    • 是一个spark的应用程序,包含了客户端的代码和任务运行的资源信息
  • ClusterManager
    • 给程序提供计算资源的外部服务

      • standAlone

        • spark自带的集群模式,整个任务的资源分配由spark集群的Master负责
      • yarn
        • 把spark程序提交到yarn中运行,整个任务的资源分配由yarn中的ResourceManager负责
      • mesos
        • apache开源的一个类似于yarn的资源调度平台
  • Master
    • Spark集群的主节点,负责任务资源的分配
  • Worker
    • Spark集群的从节点,负责任务计算的节点
  • Executor
    • 是一个在worker节点启动的进程
  • Task
    • spark任务的以task线程的方式运行在worker节点的executor进程中的

3. RDD是什么

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

    • Resilient 弹性的,表示RDD中的数据既可以保存在磁盘上也能保存在内存中
    • Distibuted 分布式的,表示RDD的数据是分布式存储的,方便后期的各种计算
    • Dataset 一个数据集合,可以存储很多数据

4. RDD的五大属性

  • A list of partitions

    • 一个分区列表,数据集的基本组成单位

      • 这里表示的是一个RDD可能会有多个分区,每个分区会存储该RDD的一部分数据,Spark中任务是以task线程的方式运行的,一个分区就对应一个task
  • A function of computing each split

    • 一个用来计算每个分区的函数

      • Spark中RDD的计算是以分区为单位的
  • A list of dependencies on other RDDs

    • 一个RDD会依赖于其他多个RDD

      这里是说RDD和RDD之间是有依赖关系的,spark任务的容错机制就是根据这个特性(血统)而来
  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)

    • 一个Patitioner,即RDD的分区函数(可选项)

      	spark中实现了两种类型的分区函数
      1 基于哈希的HashPartitioner,(key.hashcode % 分区数 = 分区号)
      2 基于范围的RangePartitioner 只有对于key-value的RDD,并且产生shuffle,才会有Partitioner
      非key-value的RDD的Partitioner的值是None
  • Optionally, a list of preferred locations to compute each split in (e.g. block locations for an HDFS file)

    • 一个列表,存储每个Partition的优先位置(可选项)

      spark任务在调度的时候会优先考虑存有数据的节点开启计算任务,以减少数据的网络传输,提成计算效率

5. RDD算子分类

  • transformation(转换)

    • 根据已经存在的RDD转换生成另外一个新的RDD,它是延迟加载,不会立即执行
      • map、flatMap、reduceByKey
  • action(动作)
    • 会触发任务的运行

      • 将RDD计算的结果数据返回给Driver端,或者保存到外部存储介质(磁盘、内存、HDFS)
      • collect、saveAsTextFile

6. RDD常见的算子操作

6.1 transformation算子

转换 含义
map(func) 返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成
filter(func) 返回一个新的RDD,该函数由经过func函数计算并且返回值为true的输入元素组成
flatMap(func) 类似于map,但每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一的元素)
mapPartitions(func) 类似于map,但独立地在RDD的每一个分片上运行,因此在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U]
mapPartitionsWithIndex(func) 类似于mapPartitions,但func带有一个整数参数表示分片的索引值,因此在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U]
union(otherDataset) 对源RDD和参数RDD求并集,并返回一个新的RDD
intersection(otherDataset) 对源RDD和参数RDD求交集,并返回一个新的RDD
distinct([numTasks])) 对源RDD进行去重之后返回一个新的RDD
groupByKey([numTasks]) 在一个(k,v)类型的RDD上调用,返回一个(k,v)的RDD
reduceByKey(func, [numTasks]) 在一个(k,v)类型的RDD上调用,返回一个(k,v)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,与groupByKey类似,reduce任务的个数可以通过第二个参数来设置
sortByKey([ascending], [numTasks]) 在一个(k,v)的RDD上调用,k必须实现Ordered接口,返回一个按照key进行排序的(k,v)RDD
sortBy(func,[ascending], [numTasks]) 与sortByKey类似,但是更灵活,可以自定义排序func
join(otherDataset, [numTasks]) 在类型为(k,v)和(k,w)的RDD上调用,返回一个相同 key对应的所有元素对在一起的(k,(v,w))的RDD
cogroup(otherDataset, [numTasks]) 在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable,Iterable))类型的RDD
coalesce(numPartitions) 减少RDD的分区数到指定值
repartition(numPartitions) 重新给RDD分区
repartitionAndSortWithinPartitions(partitioner) 重新给RDD分区,并且每个分区内以记录的key排序

6.2 action算子

动作 含义
reduce(func) reduce将RDD中元素前两个传给输入函数,产生一个新的return值,新产生的return值与RDD中下一个元素(第三个元素)组成两个元素,再被传给输入函数,直到最后只有一个值为止。
collect() 在驱动程序中,以数组的形式返回数据集的所有元素
count() 返回RDD的元素个数
first() 返回RDD的第一个元素(类似于take(1))
take(n) 返回一个由数据集的前n个元素组成的数组
takeOrdered(n, [ordering]) 返回自然顺序或者自定义顺序的前 n 个元素
saveAsTextFile(path) 将数据集中的元素以textFile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本
saveAsSequenceFile(path) 将数据集中的元素以Hadoop sequenceFile的格式保存到指定的目录,可以是HDFS或者其他Hadoop支持的文件系统
saveAsObjectFile(path) 将数据集的元素以Java序列化的方式保存到指定的目录下
countByKey() 针对(k,v)类型的RDD,返回一个(k,int)的map,表示每一个key对应的元素个数
foreach(func) 在数据集上每个元素上,运行函数func
foreachPartition(func) 在数据集的每个分区上,运行函数func

Spark基础和RDD的更多相关文章

  1. Spark 基础及RDD基本操作

    什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD具有数据 ...

  2. Spark基础:(二)Spark RDD编程

    1.RDD基础 Spark中的RDD就是一个不可变的分布式对象集合.每个RDD都被分为多个分区,这些分区运行在分区的不同节点上. 用户可以通过两种方式创建RDD: (1)读取外部数据集====> ...

  3. Spark基础入门(01)—RDD

    1,基本概念 RDD(Resilient Distributed Dataset) :弹性分布式数据集 它是Spark中最基本的数据抽象,是编写Spark程序的基础.简单的来讲,一个Spark程序可以 ...

  4. 【Spark基础】:RDD

    我的代码实践:https://github.com/wwcom614/Spark 1.RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式 ...

  5. Spark计算模型-RDD介绍

    在Spark集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed DataSet,RDD),它是逻辑集中的实体,在集群中的多台集群上进行数据分区.通 ...

  6. Spark 核心概念 RDD 详解

    RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建,为此,RDD支持 ...

  7. Spark学习之RDD编程总结

    Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称 RDD).RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外 ...

  8. Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)

    Spark的核心RDD (Resilient Distributed Datasets弹性分布式数据集)  原文链接:http://www.cnblogs.com/yjd_hycf_space/p/7 ...

  9. 【原创 Hadoop&Spark 动手实践 5】Spark 基础入门,集群搭建以及Spark Shell

    Spark 基础入门,集群搭建以及Spark Shell 主要借助Spark基础的PPT,再加上实际的动手操作来加强概念的理解和实践. Spark 安装部署 理论已经了解的差不多了,接下来是实际动手实 ...

随机推荐

  1. 1、python3.x安装(windows)

    现在大部分自动化测试已经使用python3.x版本,与Python2的区别这里就不多说了,如有兴趣可以自行百度. 一.下载 官网:https://www.python.org/downloads/,下 ...

  2. [校内训练20_01_20]ABC

    1.问有多少个大小为N的无标号无根树,直径恰好为L.$N,L \leq 200$ 2.问一个竞赛图中有多少个长度为3.4.5的环.$N \leq 2000$ 3.给出一些直线和单个点A,问这些直线的交 ...

  3. Linux下安装nvidia显卡驱动

    部署环境 操作系统:Centos 7.4 在线源:Centos 7.4镜像源 安装操作 1.安装系统插件 [root@localhost ~]# yum -y install gcc kernel-d ...

  4. 【WPF学习】第三十章 元素绑定——绑定到非元素对象

    前面章节一直都在讨论如何添加链接两个各元素的绑定.但在数据驱动的应用程序中,更常见的情况是创建从不可见对象中提取数据的绑定表达式.唯一的要求是希望显示的信息必须存储在公有属性中.WPF数据绑定数据结构 ...

  5. CUDA学习(二)之使用clock()函数

    clock()函数是C/C++中的计时函数,相关的数据类型是clock_t,使用clock函数可以计算运行某一段程序所需的时间,如下所示程序计算从10000000逐渐减一直到0所需的时间. #incl ...

  6. 【读书笔记】关于《精通C#(第6版)》与《C#5.0图解教程》中的一点矛盾的地方

    志铭-2020年2月8日 03:32:03 先说明,这是一个旧问题,很久很久以前大家就讨论了, 哈哈哈,而且先声明这是一个很无聊的问题,

  7. 未来图书-需求分析——脑机接口、VR、AI推荐系统

    个人比较喜欢科幻作品,也常常畅想未来.. "书"作为几千年来人类文明信息载体,必然会不断演变.. 文荟宿舍墙上贴着Elon Musk的海报,向往像他一样能够在有限的生命中用极致的想 ...

  8. Codeforces 1249F Maximum Weight Subset (贪心)

    题意 在一颗有点权的树上,选若干个点,使得这些点两两距离大于k,且点权和最大 思路 贪心的取比较大的值即可 将所有点按照深度从大到小排序,如果当前点点权\(a[i]\)大于0,则将距离为k以内的所有点 ...

  9. It is possible and safe to monitor a table DML history on sqlserver

    He is my test step: In a test enviroument, I make a table "test"/ demo table:create table ...

  10. Jmeter——使用JSR223元件实现RSA登录加密

    一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...