当前位置:   article > 正文

Spark 计算框架_spark计算框架

spark计算框架

Spark

  • Spark 是什么?

Apache Spark™是用于大规模数据处理的快速和通用引擎.

  • 速度:在内存中,运行程序比Hadoop MapReduce快100倍,在磁盘上则要快10倍.

Apache Spark具有支持非循环数据流和内存计算的高级DAG执行引擎.

  • 易用:可以使用Java,Scala,Python,R快速编写程序.

Spark提供80+高级操作方法,可以轻松构建并行应用程序.

  • Spark提供了一堆库,包括SQL和DataFrame,MLlib,GraphX和Spark Streaming。您可以在相同的应用程序中无缝地组合这些库.
  • Spark在Hadoop,Mesos,独立或云端运行。它可以访问各种数据源,包括HDFS,Cassandra,HBase和S3

这里写图片描述

一,RDD 弹性分布式数据集

  1. 定义, TA 容错的,并行的数据结构,存储到磁盘和内存,控制数据分区。本质上是一个只读的分区记录集合,RDD包含多个分区,每个分区是一个dataset片段.

  2. 依赖, RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,窄依赖;若多个Child RDD分区都可以依赖,宽依赖.

首先,窄依赖被划分到同一个stage,支持在同一个cluster node上以管道形式执行多条命令,eg,先map,紧接着filter.相反,宽依赖由于依赖的上游节点不止一个,往往跨界点传输数据.

其次从容灾角度讲,窄依赖的只需要执行父RDD的丢失分区的计算即可恢复.而宽依赖需要考虑恢复所有父RDD的丢失分区.

这里写图片描述

  • 本质, RDD是Spark中的抽象数据结构类型,从编程的角度来看,RDD可以简单看成是一个数组。和普通数组的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理。因此,Spark应用程序所做的无非是把需要处理的数据转换为RDD,然后对RDD进行一系列的变换和操作从而得到结果。本质是一个抽象类,如下:
abstract class RDD[T: ClassTag](@transient private var _sc: SparkContext,

@transient private var deps: Seq[Dependency[_]]) extends Serializable with Logging {

  }
  • 1
  • 2
  • 3
  • 4
  • 5
typefunctionuse
transformationmap()函数应用于RDD每一个元素,返回值是新的RDD
transformationflatMap()函数应用于RDD每一个元素,将元素数据进行拆分变成迭代器返回值是新的RDD
transformationfilter()过滤,返回值是新的RDD
transformationdistinct()去重,返回值是新的RDD
transformationunion()并集,返回值是新的RDD
transformationintersection()交集,返回值是新的RDD
transformationsubtract()原RDD里和参数RDD里相同的元素去掉
transformationcartesian()函数应用于RDD每一个元素,返回值是新的RDD
typefunctionuse
actioncollect()返回RDD所有元素
actioncount()RDD里元素个数
actioncountByValue()各元素在RDD中出现次数
actionreduce()并行整合所有RDD数据,例如求和操作
actionfold(0)(func)和reduce功能一样,不过fold带有初始值
actionaggregate(0)(seqOp,combop)和reduce功能一样,但是返回的RDD数据类型和原RDD不一样
actionforeach(func)对RDD每个元素都是使用特定函数
  • DAG 有向无环图

这里写图片描述

  • 容错处理

传统关系型数据库:采用日志记录容灾,数据恢复都依赖于重新执行日志中的SQL;

Hadoop:通过把数据备份到其他机器来容灾;

RDD:本身是一个不可变的数据集,当某个worker节点上的任务失败时,可以利用DAG重新调度计算这个失败的任务,由于不用复制数据,从而大大降低了网络通信.在流式计算场景中,Spark需要记录日志和检查点,以便利用checkpoint和日志对数据进行恢复;

二,Discretized Streams (DStreams)

  • DStream是一系列连续的RDD,是Spark Streaming提供的基本抽象如下图所示:

这里写图片描述

  • 对DStream应用的任何操作都将转换为底层RDD上的操作

这里写图片描述

三,Initializing StreamingContext

  • 要初始化Spark Streaming程序,必须创建一个StreamingContext对象,它是所有Spark Streaming功能的主要入口.
SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);
JavaStreamingContext ssc = new JavaStreamingContext(conf, new Duration(1000));
  • 1
  • 2
  • 3

四,Input DStreams and Receivers

  • Spark Streaming提供两类内置流式传输源:

    1. 基本数据源:StreamingContext API中直接提供的源.比如:文件系统和套接字连接.(file 和 socket)
    2. 高级源:Kafka,Flume,Kinesis等资源可以通过额外的实用类来获得.
  • Spark Streaming 提供两种接收器:

    1. 可靠的接收器 - 当数据已被接收并且通过复制存储在Spark中时,可靠的接收器正确地向可靠的源发送确认。
    2. 不可靠的接收器 - 不可靠的接收器不向源发送确认。这可以用于不支持确认的源,或者甚至当不需要或需要进入确认的复杂性时,用于可靠的源。

五,Transformations on DStreams

TransformationMeaning
map(func)通过func传递源DStream的每个元素,返回新的DStream
flatMap(func)与map类似,但每个输入项可以映射到0个或更多的输出项
filter(func)过滤
repartition(numPartitions)通过修改分区来更改DStream中的并发数
union(otherStream)求两个DStream的并集
count()计算源DStream的每个RDD中的元素数量,返回RDD的新DStream
reduce(func)使用函数func聚合源DStream的每个RDD中的元素来返回单个元素RDD的新DStream
countByValue()根据value计算key.
reduceByKey(func, [numTasks])根据Key进行特定的计算
join(otherStream, [numTasks])当(K,V)和(K,W)对的两个DStream被调用时,返回一个新的(K,(V,W))对的DStream与每个键的所有元素对
transform(func)通过对源DStream的每个RDD应用RDD到RDD函数来返回新的DStream。这可以用于对DStream进行任意RDD操作
updateStateByKey(func)返回一个新的“状态”DStream,其中每个key的状态通过在key的先前状态应用给定的功能和key的新值来更新。这可以用于维护每个key的任意状态数据

六,Output Operations on DStreams

Output OperationMeaning
print()打印10个元素,用于调试
saveAsTextFiles(prefix, [suffix])将此DStream的内容另存为文本文件。每个批处理间隔的文件名是根据前缀和后缀“prefix-TIME_IN_MS [.suffix]”生成的
saveAsObjectFiles(prefix, [suffix])将此DStream的内容保存为序列化Java对象的SequenceFiles。每个批处理间隔的文件名是根据前缀和后缀“prefix-TIME_IN_MS [.suffix]”生成的。
saveAsHadoopFiles(prefix, [suffix])将此DStream的内容另存为Hadoop文件。每个批处理间隔的文件名是根据前缀和后缀“prefix-TIME_IN_MS [.suffix]”生成的。
foreachRDD(func)对从流中生成的每个RDD应用函数func的最通用的输出运算符。此功能应将每个RDD中的数据推送到外部系统,例如将RDD保存到文件,或将其通过网络写入数据库

七,了解更多

  1. An Architecture for Fast and General Data Processing on Large Clusters :关于RDD,DStream 的整个设计详解
  2. Spark的官网 Spark
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/906423
推荐阅读
相关标签
  

闽ICP备14008679号