返回顶部
首页 > 资讯 > 数据库 >Spark基础和RDD
  • 409
分享到

Spark基础和RDD

Spark基础和RDD 2015-08-15 00:08:54 409人浏览 猪猪侠
摘要

spark 1. Spark的四大特性 速度快 spark比mapReduce快的两个原因 基于内存 1. mapreduce任务后期在计算的是时候,每一个job的输出结果都会落地到磁盘,后续有其他的job要依赖于前

Spark基础和RDD

spark

1. Spark的四大特性

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

      1. 基于内存
    1. mapreduce任务后期在计算的是时候,每一个job的输出结果都会落地到磁盘,后续有其他的job要依赖于前面job的输出结果,这个时候就需要进行大量的磁盘io操作,性能较低
    
    2. spark任务后期在进行计算的时候,job的结果是可以保存在内存中的,后面有其他的job需要以言语前面job的输出结果,这个时候可以直接从内存中读取,避免了磁盘io操作,性能比较高
    
    spark程序和mapreduce程序都会产生shuffle阶段,在shuffle阶段中他们产生的数据都会保留在磁盘中
      1 mapreduce任务以进程的方式运行在yarn集群中,比如说有100个mapTask,一个task就需要一个进程,这些task要运行就需要开启100个进程
    
      2 spark任务以线程的方式运行在进程中,比如说有100个task,则一个task就对应一个线程
    1. 易用性
    2. 可以用java、Scalapython、R等不同的语言来快速编写spark程序
    3. 通用性
    4. 兼容性
      1. spark程序有多种运行模式
        • standAlone
          • spark自带的独立运行模式,整个任务的资源分配由spark集群的的Master来负责
        • yarn
          • 可以把spark程序提交到yarn上运行,整个任务的资源分配由yarn中的ResourceManager负责
        • mesos
          • apache开源的一个类似于yarn的资源调度平台

2. spark集群架构

Spark cluster components

  • 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
您可能感兴趣的文档:

--结束END--

本文标题: Spark基础和RDD

本文链接: https://lsjlt.com/news/3916.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spark基础和RDD
    spark 1. Spark的四大特性 速度快 spark比mapreduce快的两个原因 基于内存 1. mapreduce任务后期在计算的是时候,每一个job的输出结果都会落地到磁盘,后续有其他的job要依赖于前...
    99+
    2015-08-15
    Spark基础和RDD
  • spark计算模型RDD
    RDD介绍 1.RDD概念以及特性 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模...
    99+
    2021-01-17
    spark计算模型RDD
  • Spark RDD怎么创建
    这篇文章主要介绍“ Spark RDD怎么创建”,在日常操作中,相信很多人在 Spark RDD怎么创建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答” Spark RDD怎么创建”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-02
  • Spark RDD的内容有哪些
    这篇文章将为大家详细讲解有关Spark RDD的内容有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.添加jar包运行1.官网位置点击步骤:Spark Programming...
    99+
    2023-06-02
  • 大数据之Spark基础环境
    目录前言一、Spark概述(一)Spark是什么(二)Spark的四大特点(三)Spark的风雨十年(四)Spark框架模块(五)Spark通信框架总结前言 本篇文章开始介绍Spark基础知识,包括Spark诞生的背景,...
    99+
    2023-04-06
    大数据Spark基础环境 Spark基础环境
  • spark的基础知识点整理
    这篇文章主要介绍“spark的基础知识点整理”,在日常操作中,相信很多人在spark的基础知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”spark的基础知识点整理”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • spark rdd转dataframe 写入mysql的实例讲解
    dataframe是在spark1.3.0中推出的新的api,这让spark具备了处理大规模结构化数据的能力,在比原有的RDD转化方式易用的前提下,据说计算性能更还快了两倍。spark在离线批处理或者实时计...
    99+
    2024-04-02
  • 如何理解Spark中的核心概念RDD
    如何理解Spark中的核心概念RDD,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。RDD全称叫做弹性分布式数据集(Resilient Dist...
    99+
    2024-04-02
  • Spark RDD常用算子是什么类型的
    小编给大家分享一下Spark RDD常用算子是什么类型的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spark RDD常用算子:Value类型Spark之所以比...
    99+
    2023-06-27
  • Spark SQL中的RDD与DataFrame转换实例用法
    这篇文章主要讲解了“Spark SQL中的RDD与DataFrame转换实例用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spark SQL中的RDD与DataFrame转换实例用法”吧...
    99+
    2023-06-02
  • Spark性能优化的基础是什么
    Spark性能优化的基础是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功...
    99+
    2023-06-03
  • PySpark和RDD对象最新详解
    目录一.了解Spark、PySparkSpark是什么Python on SparkPyspark 小结二.构建PySpark执行环境入口对象PySpark的编程模型小结三...
    99+
    2023-01-11
    PySpark和RDD对象 PySpark和RDD
  • RDD和DataFrame和DataSet三者间的区别
    在SparkSQL中Spark为我们提供了两个新的抽象,分别是DataFrame和DataSet。他们和RDD有什么区别呢?首先从版本的产生上来看:RDD (Spark1.0) —> Dataframe(Spark1.3) —>...
    99+
    2019-06-13
    RDD和DataFrame和DataSet三者间的区别
  • Android基础------Activity基础
    应用内Activity的跳转方式 一、通过显式意图跳转,如字面意思一样,跳转的目的地是可以明确看到的 二、通过隐式意图跳转,这种方式的跳转需要我们在AndroidManifes...
    99+
    2022-06-06
    activity Android
  • Python基础——1基础
    输出 print(‘把子肉爱上热干面’,‘哈哈’)  # ‘,’输出为空格 输人 name = input(‘提示的内容’) /浮点除法  %.6f //地板除法  整除 %  取余 python编码问题 (采用Unicode编码) ...
    99+
    2023-01-30
    基础 Python
  • python链表的基础概念和基础用法详解
    本文为大家分享了python链表的基础概念和基础用法,供大家参考,具体内容如下 一、什么是链表 链表是由多个不同的节点组成,每个节点通过指针区域关联到一起链表的头指针,指向了头节点,...
    99+
    2024-04-02
  • Java基础——类和对象
    目录 一、类和对象的基本概念 二、类与对象的定义与使用 1.创建类的语法: 2. 创建具体的对象:  3.范例(创建一个Person 类的对象)  三、static关键字   (一)static修饰属性(类属性、类变量) (二)static...
    99+
    2023-10-05
    java
  • Python基础-int和string互
    int转成string,函数int(string) string转成int,函数str(number) 如下: ...
    99+
    2023-01-31
    基础 Python string
  • MySQL基础:基础查询
    DQL语言:数据查询语言 3.1 基础查询 语法 select 查询列表 from 表名; 特点 查询列表可以是字段、常量、表达式、函数,也可以是多个 查询结果是一个虚拟表 示例 1、查询单个字段 selec&#...
    99+
    2016-06-13
    MySQL基础:基础查询
  • Python基础--Python3基础语
    Python3 基础语法编码默认情况下,Python3源码文件以UTF-8编码,所有字符串都是Unicode字符串。当然也可以为源码文件指定不同的编码,例如:# -*- coding: cp-1252 -*-标识符1.第一个字符必须是字母表...
    99+
    2023-01-31
    基础 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作