Spark

一  为什么用SPARK

  • 先进的大数据分布式编程和计算框架
  • 试图代替HADOOP(SPARK可以独立于HADOOP)
  • 内存分布式计算:运行速度快
  • 可以用不同语言编程(JAVA,SCALA,R,PYTHON)
  • 可以从不同的数据源取数据(HDFS,Cassandra,HBase)
  • 实现不同的大数据功能:Spark Core,Spark SQL,Spark Streaming,Spark MLIB  以及GraphX

优点:

  1. 运行速度快
  2. 支持迭代式和交互式运行
  3. 弹性数据集支持数据容错
  4. 支持有向无环图优化

二 SPARK的几种运行模式

批处理--用于大规模的分布式数据处理

流方式--Spark流用于传送和处理实时数据

交互式:用于处理在内存中的大块数据,较低的延迟性

三  SPARK的数据读取和存储

Spark可以从以下系统访问数据

  • hadoop HDFS 以及HIVE,HBASE等生态圈部件
  • Amazon S3
  • Cassandra, Mongodb
  • 其他流工具 如Flume,Kafka所支持的各协议如AVRO另外Spark 可以支持一下文件格式:text,sequencefiles,AVRO,parquet

四 SPARK的主要部件

  1. SPARK CORE:包含spark的主要基本功能.所有跟RDD有关的API都出自于SPARK CORE
  2. Spark SQL:spark中用于结构化数据处理的软件包
  3. spark streaming:spark中用于处流数据的部件
  4. MLlib:Spark中用来进行机器学习和数学建模的软件包
  5. GraphX:spark中用来进行图计算(如社交媒体关系)的库函数
  6. Cluster Managers:spark中用来管理机群或节点的软件平台

五  SPARK CORE

1.spark生态圈的核心:

负责从HDFS,Amazon s3 和HBase等持久层读取数据

在YARN和Standalone为资源管理器调度job完成分布式计算

包括两个重要部件

有向无环图(DAG)的分布式并行计算框架

容错分布式数据RDD

2.部件解析

操作(Operation):作用于RDD的各种操作分为Transformation(变换)和Action(操作)

DAGScheduler:把对job中的RDD有向无环图根据依赖关系划分为多个stage(阶段) 每一个stage是一个TaskSet,他还会根据RDD和stage之间的关系找出开销最小的调度方法,然后把stage以taskset的形式交给taskscheduler

stage是一个taskset

taskscheduler维护着所有task的运行状态,重试失败的task并把合适的task分发给worker中的executor

 什么是job?由多个stage(阶段)组成的任务

什么是阶段?根据操作之间的依赖关系由多个算子组成的任务集

3.应用程序

应用程序包括以下两部分

Driver  初始化SparkContext(spark的入口) executor部分运行完毕后将sparkcontext关闭

Executor负责数据  集合数据集 文件数据集 

六 RDD功能介绍

1.RDD两种类型

并行集合  (并行化集合是通过调用SparkContext的parallelize方法,在一个已经存在的数据集合上 创建的(一个Seq对象)。集合的对象将会被拷贝,创建出一个可以被并行操作的分 布式数据集)

文件系统数据集  (Spark可以将任何Hadoop所支持的存储资源转化成RDD,如本地文件(需要 网络文件系统,所有的节点都必须能访问到, HDFS, mongodb, HBase, Amazon S3等,Spark支持文本文件、SequenceFiles和任何Hadoop InputFormat格式。)

2.计算方式

  • 变换(Transformations) (如:map, filter)的返回值仍然是一个RDD, Transformations操作是Lazy的,也就是说变换只是一些指令集而并不会去马 上执行,需要等到有Actions操作的时候才会真正计算给出结果。Lazy Evaluation
  • 操作(Actions) (如:count, collect),Actions操作会返回结果或把RDD数据输出 到各类系统中。Actions触发Spark启动并找到最优的计算途径。返回值是非 并行化的数据集合比如 PYTHON 中的list

3.RDD的cache和persist

默认情况下当时用action 在RDD上时spark会重新计算刷新RDD,但也可以通过持久化方法cache和persist将RDD放在内存中,这样第二次使用action在RDD上时,spark讲不重新计算刷新RDD

cache和persist级别

dataset2 = dataset1.persist(StorageLevel. MEMORY_ONLY)

dataset2 = dataset1.persist(StorageLevel.MEMORY_AND_DISK)

dataset2 = dataset1.persist(StorageLevel. MEMORY_ONLY_SER)

dataset2 = dataset1.persist(StorageLevel. MEMORY_AND_DISK_SER)

dataset2 = dataset1.persist(StorageLevel. DISK_ONLY)

  • 默认选项 ,rdd的(分区)数据直接以java对象的形式存储于JVM的内存中,如果内存空间不足,某些分区的数据将不会被缓存,需要在使用的时候根据世代信息重新计算
  • RDD的数据直接以Java对象的形式存储于JVM的内存中,如果内存空间不中,某些分区的数据会 被存储至磁盘,使用的时候从磁盘读取。
  •  RDD的数据(Java对象)序列化之后存储于JVM的内存中(一个分区的数据为内存中的一个字节 数组),相比于MEMORY_ONLY能够有效节约内存空间(特别是使用一个快速序列化工具的情况 下),但读取数据时需要更多的CPU开销;如果内存空间不足,处理方式与MEMORY_ONLY相同。
  • 相比于MEMORY_ONLY_SER,在内存空间不足的情况下,将序列化之后的数据存储于磁盘。
  • 仅仅使用磁盘存储RDD的数据(未经序列化)。

七  RDD元素变换

1.MAP变换例子

map()参数是函数 函数应用于RDD每一个元素

2.flatMAP()参数是函数,函数应用于RDD每一个元素,将元素进行拆分展平,变成迭代器,返回值是新的RDD

3.filter() 参数是函数,函数会过滤掉不符合条件的元素,返回值是新的RDD

4.连接变换例子

  • union() 两个rdd并集
  • intersection()交集
  • subtract()差集
  • cartesian()乘积

5.count()返回RDD里元素的数量

6.reduce()并行汇总所有RDD元素

7.countByValue()各元素在RDD中出现的次数

8.aggregate操作例子

aggregate((0,0),seqOp,combOp)

类似于reduce(),但用于返回不同类型。接受三个参数:zeroValue: seqOp操作符的每个分区累积结果的初始值,以及combOp不同分区的组合结果的初始值。

操作符seqOp:用于在分区中累积结果的

操作符combOp:一个联合运算符,用于合并来自不同分区的结果

9.

  • take(n):从rdd中返回n个元素
  • top(num):从rdd中返回num元素
  • first():返回第一个元素
  • collect():返回rdd的所有元素
  • foreach(func):将提供的函数应用于每个元素
  • takeSample(withRepalcement,num,[seed])

10 KEY-VALUE RDD 变换

  • reduceByKey(func):在每一键组内进行汇总变换.例如每个班(key)的总分数成绩(value)
  • groupByKey():将值放到每一相同的键组内
  • mapValues(func):对每一对rdd键值进行函数func值变换而不改变键
  • sortByKey():得到以键排序的rdd
  • combineByKey((createCombiner,mergeValue, mergeCombiners,partitioner)

-----------createCombiner():用于产生累加器键的初值   比如 lambda x: (x, 1))。这里x指的 是分数值

-----------mergeValue 每移动一条记录设置当前的累加器的值。比如: (lambda x, y: (x[0] + y, x[1] + 1)),

-----------mergeCombiners() 在每一键组内累加相应的值。比如 (lambda x, y: (x[0] + y[0], x[1] + y[1])))

11.rdd连接变换

  • join  内连接
  • rightOuterJoin  右连接
  • leftOuterJoin  左连接
  • cogroup   全连接
  • subtractByKey  减连接

12 KEY-VALUE rdd 连接变换

  • countByKey()   返回每一键组内的记录数
  • collectAsMap()  返回一MAP形式的串行化结果
  • lookup(key)  返回某键值下的所有值

countByKey()

lookup(key)

13累加器accumulators

累加器通过对一个初始化了的变量v 调用SparkContext.accumulator(v)来创建。在集群上运行的任务可以通过add或者 "+="方法在累加器上进行累加操作(不支持Python)

广播变量broadcast variables允许程序员将一个只读的变量缓存在 每台机器上,而不用在任务之间传递变量。广播变量可被用于有效地给每个节点一 个大输入数据集的副本。Spark还尝试使用高效地广播算法来分发变量,进而减少 通信的开销。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值