spark 多线程删数据库数据_大规模数据处理实战--Spark

为什么需要Spark

MapReduce的缺点

1.抽象层次太低,大量底层逻辑需要开发者手工完成

2.只有map和reduce两个操作

3.每一个job的计算结果都会存储在HDFS中,所以每一步计算成本很高

4.只支持批处理,却反对流数据处理的支持

Spark支持各种丰富的操作,而且速度远超MapReduce

下图是Spark和Hadoop上运行逻辑回归算法的运行时间对比

在任务(task)级别上,Spark是多线程模型,MapReduce是多进程模型

Spark并不是完全替代Hadoop,因为Hadoop还包含了很多组件:

数据存储层:分布式文件存储系统HDFS,分布式数据库存储HBase

数据处理层:进行数据处理的MapReduce,负责集群和资源管理的YARN

数据访问层:Hive,Pig,Mahout

Spark生态圈如下

Spark有5个主要扩展库

1.支持结构化数据的Spark SQL

2.处理实时数据的Spark Streaming

3.用于机器学习的MLlib

4.用于图计算的GraphX

5.用于统计分析的SparkR

RDD

弹性分布式数据集Reilient Distributed Dataset

RDD是逻辑上的一个大数组,数组中的每个元素代表一个分区Partition,可以被存储在内存或者磁盘中

这些分区是独立的,可以被放在不同节点上

RDD中的每个分区存有在该RDD中的index,通过RDD的ID和分区的index可以唯一确定对应的数据块的编号,从而通过底层存储层的接口提取到数据进行处理

RDD具有不可变性,只能对现有的RDD进行转换Transformation操作,得到新的RDD

RDD的分区和不可变性使得它支持并行操作

RDD的结构

SparkConf提供了一些参数配置信息

SparkContext是所有Spark功能的入口,它代表了与Spark节点的连接,可以用来创建RDD对象以及在节点中的广播变量等

Partitions代表RDD中的数据逻辑结构,每个Partition会映射到某个节点内存或者硬盘的一个数据块,目前两个主流的分区方式Hahs分区和Range分区

Dependencis是依赖关系,包括宽依赖 或者窄依赖

Checkpoint,跟关系型数据库类似,某个RDD的依赖关系复杂计算时间长,加入检查点后,就删除之前的依赖关系加速恢复过程

存储级别Storage Level用来记录RDD持久化的存储级别

迭代函数Iterator和计算函数Compute是用来标示RDD怎样通过父RDD计算得到的

迭代函数首先会判断缓存中是否有要计算的RDD,如果有就直接读取,没有就查找想要计算的RDD是否被检查点处理过,如果有就读取没有就调用计算函数向上递归查找父RDD进行计算

RDD的转换操作

操作分为两种,转换Transformation ,动作Action

转换是把一个RDD转换成另一个RDD,动作是通过计算返回一个结果

转换的操作包括:

map,filter,mapPartitions,groupByKey

动作的操作包括:

collect,reduce,count,countByKey

RDD的持久化

Spark的persist(),cache()函数支持将RDD的数据缓存到内存或者磁盘上

当下一次对同一个RDD进行Action操作时,可以直接读取RDD的结果

存储级别

MEMORY_ONLY:只缓存在内存中,如果内存空间不够则不缓存多出来的部分,这是RDD的默认存储级别

MEMORY_AND_DISK:存储在内存中,如果空间不够则缓存在硬盘中

DISK_ONLY:只缓存在硬盘中

MEMORY_ONLY_2和MEMORY_AND_DISK_2,和上面的级别功能相同,只不过每个分区再集群中的两个几点上建立副本

依赖关系

包括宽依赖Wide Dependency,窄依赖 Narrow Dependency

窄依赖是父RDD的分区可以一一对应到子RDD的分区

宽依赖是父RDD的每个分区可以被多个子RDD的分区使用

窄依赖允许子RDD的每个分区可以被并行处理产生,而宽依赖必须等待父RDD的所有分区都被计算好之后才能开始处理

map,filter会产生窄依赖关系

join,groupBy会产生宽依赖关系

Spark之所以有宽窄依赖是出于以下两点考虑

窄依赖可以支持在同一个节点上链式执行多条命令,如在执行了map后,紧接着执行filter,反之宽依赖需要所有父分区都是可用的,可能还需要调用类似MapReduce之类的操作进行跨节点传递

从失败恢复的角度考虑,窄依赖的失败恢复更有效,因为它只需要重新计算丢失的父分区即可,而宽依赖牵扯到RDD各级的多个分区

标签:实战,存储,依赖,分区,RDD,缓存,数据处理,Spark

来源: https://blog.csdn.net/hixiaoxiaoniao/article/details/90703150

你可能感兴趣的:(spark,多线程删数据库数据)