spark 多线程删数据库数据_spark(spark大数据处理技术)

spark算子有那些:三种分别是转换、行动、控制:转换算子使用map/filter进行全局变换或者过滤、行动算子进行count/collect等等计算或者聚合等等、控制算子cache、persist缓存算子:方便计算,但是persist可以设置缓存级别、而cache只能缓存至内存;

RDD的理解:弹性分布式数据集:可以实现内存和磁盘的自动切换,一个RDD可以进行分区,分区函数进行设定,既可以来源内存和磁盘,也可以来源于其他RDD;RDD分区:分区之间存在依赖,分为窄依赖和宽依赖,宽依赖指的是一个父RDD分区可以由多个子RDD分区使用;窄依赖则指的是一个父RDD只能由一个子RDD分区使用;

RDD分区函数:HashPatition和RangePatition:hash分区函数对于给定的key值,计算其hashcode除以分区数取余,最后得到分区ID,可能存在数据分布不均;随机分区则在RDD中抽取样本进行排序,以此确定分区边界;计算key值所属范围进行分区

spark运行模式:local模式:利用多线程对程序进行单机调试;分布式部署模式:(1)、standalone:独立模式,类似于MapReduce1;(2)、spark on yarn:利用yarn进行统一的资源调度和管理;(3)、spark on mesos:类似于yarn进行资源调度,支持粗粒度和细粒度的调度,前者节约资源调度时间,后者减少资源的浪费;

spark运行流程:1、启动:用户启动sparkcontext,程序的总入口,初始化过程启动DAGScheduler作业调度和TaskScheduler任务调度。2、生成作业:DAGScheduler根据shuffleDependency对作业进行划分成不同的stage,RDD之间是窄依赖则划分当前的stage,宽依赖则划分到下一个stage,每一个stage都存在一个TaskSet数据集,之后将数据集传输给TaskScheduler;3、提交任务集:分配任务到具体的executor进行执行,ScheduleBackend配合TaskScheduler完成具体的任务资源分配;4、任务执行:Excutor对每一个任务创建一个TaskRunner类,将任务交给线程池运行;

spark任务调度:调度阶段的拆分:当一个Action RDD出发提交任务时,DAGscheduler从RDD末端开始遍历,依据依赖关系将调度阶段分成多个stage;调度阶段的提交:直接触发作业提交的的阶段称为FinalStage,保存在映射表中以便后续调度处理;任务集提交:调度阶段的提交最终转化成任务集的提交,DAGscheduler通过Taskscheduler接口提交任务集Taskset,任务集的提交触发创建一个TasksetManager管理任务集的生命周期,负责任务调度。TaskScheduler计算资源时,调用tasksetmanager调度任务到具体的Excetor节点上运算。状态监控:主要Taskscheduler通过一系列的回调函数通知DAGscheduler具体的Excetor生命状态;任务结果获取:对于finalstage返回运算结果本身,对于其他stage,返回给DAGscheduler一个MapStatus,包含中间结果保存的blockmanager的相关信息,而非结果本身,这些信息作为下一阶段任务输入数据的依据;

spark存储结构:1、RDD持久化:RDD由不同的分区组成,每一个分区对应一个数据块,逻辑分区对应于物理分区的数据块,数据块是spark存储数据的最小单位,可以按照RDD分区的ID建立索引对数据块命名形成映射;RDD可以持久化到内存,也可以持久化道磁盘,调用函数包括有persist()和cache();cache默认持久化道内存,persist则能够选择持久化参数(如内存或者磁盘);RDD缓存到内存:内部维护了一个数据块名称为键,数据块内容为值得哈希表,当内存大于设置的阈值后,进行缓存释放,丢弃一部分数据或者存入磁盘中。这里体现了RDD的容错机制,只要丢弃的RDD的祖先能够被回溯的到,所删除的RDD也能够进行恢复;缓存到磁盘:一个数据块对应一个文件,文件名称通过数据块哈希计算得到,根据文件路径进行读写操作。2、shuffle持久化:必须持久化到硬盘,数据块存储可以一个数据块对应一个文件,也可以一个数据块对应一个文件的一部分减少文件数量;

spark的RDD容错机制:血缘容错和检查点(checkpoint)机制:1、血缘容错利用依赖关系进行数据恢复,当一个节点死机且运行窄运算时,可以通过父RDD进行重新计算即可得到丢弃RDD;而宽依赖则需要所有的父RDD都存在,宽依赖对父RDD进行重算会增加大量的开销,因为存在大量的冗余计算;2、checkpoint机制:当宽依赖进行RDD容错时会存在大量的冗余计算,多以我们可以设置检查点,在依赖关系中对关系中间结果进行数据备份,当需要数据恢复时,可以从检查点开始计算,减少开销;

spark的shuffle简介:DAG阶段以shuffle为界,分成不同的stage,上游stage进行map task、下游进行reduce task;每个map task将数据分成多分,每一份对应下游stage的partition,并且写入磁盘的过程称作shuffle write,下游reduce task通过网络拉取上游输出的分区数据的过程称为shuffle write;

spark shuffle相对于mapreduce shuffle进行了那些优化:1、将map给每个patition的结果合并到同一个文件下,解决输出文件过多的问题;2、map任务是逐条输出结果到内存,并且利用缓存和聚合算法,对中间结果进行聚合,减少内存的占用量,相应的reduce拉取数据也是逐条拉取的;3、内存超过限制后将输出数据写入磁盘防止内存溢出;4、reduce拉取Block中的数据按照Blockmanager进行划分,减少了网络IO 的次数;

spark解决数据倾斜:1、何为数据倾斜:并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈,例如数据进行shuffle操作时,按照key值进行聚合,可能存在个别key对应上万条数据,那么该task相对于其他少量数据的task会花费大量的时间,从而造成了数据倾斜;2、解决方案:(1):过滤掉导致数据倾斜的key,在每次作业执行时使用sample对RDD进行采样并且计算key值对应数量,如果存在少量key值对应大量数据,采用filter进行过滤,缺点是使用场景有限;(2)提高shuffle的并行度:进行group by和join操作时,设置较大的并行度,使得相同情况下一个task分到更少的key,减少数据处理数量,缺点是无法根治数据倾斜,当存在极端key存在时还是会出现数据倾斜:(3)、全局聚合分解成局部聚合+全局聚合:对聚合key值打上前缀,防止单个key值对应数据过多;缺点是只能针对shuffle中的聚合操作;(4)、将reduce join变成map join:将较小的RDD进行广播,利用小的map算子进行join操作避免了shuffle产生的数据倾斜,缺点是只适用一个大表和一个小表的情况;(5)、采样倾斜key并且拆分join操作:当两个大表进行join时,其中一个表存在少量key值数据量较大,对该表进行采样分解出这些key并且打上0-n的前缀,同样的将另一个表相同key值拆分出来幅值n倍(分别打上0-n的前缀);将两部分RDD分别join避免数据倾斜;最后将两个RDD进行union合并,缺点是不适用导致数据倾斜的key值过多的情况;(6)、直接使用随机前缀和扩容RDD的方法进行join:相对于方法5去掉了拆分操作:缺点是要求较大的内存资源(n倍);

简单介绍spark streaming:1:离散数据流(DStream)是spark streaming的基本抽象,DStream由一系列连续的RDD转换而来,每个RDD包含一段时间内的输入数据;2、批处理间隔,滑动窗口和窗口间隔:批处理间隔代表着处理和作业提交一批数据最小的时间单位,决定了任务提交的频率和延迟;滑动间隔和窗口窗口间隔用作基于窗口的操作(批处理间隔的整数倍),相比于批处理间隔,可以进行更大时间间隔的数据处理,滑动间隔代表处理时间粒度,窗口大小代表着处理数据间隔,存在重叠内部优化。3、DStream本质上是构建在RDD之上的一种流式数据的抽象,最终还是产生RDD用于作业提交;

spark streaming性能调优:1、运行时间调优:(1)增加并行度确保使用集群的全部资源而不是部分资源;(2)减少序列化和反序列化负担;(3)设置合理的批处理时间间隔,防止出现作业阻塞;(4)减少任务分发和提交的负担,使用AKKa框架能够有效的进行任务的分发;2、内存优化:(1)控制批处理间隔的数据量:避免内存无法容纳一个批处理时间的数据量;(2)及时清理不用的数据:设置spark streaming.upersist为true,自动清除不再需要的RDD;(3)适当调整GC策略:减少内存回收对系统的影响;

spark streaming容错机制:1、根据RDD的依赖关系进行数据恢复;2、接受节点失效:如果数据来自hdfs文件系统,则能够重新计算;若果来自网络数据源,通常进行了数据备份(默认数量是2),能够通过其他的工作节点进行重新计算(如果复制还未开始节点失效,启动其他节点进行数据接收);(3)驱动节点失效(执行计算节点),利用checkpoint检查点机制进行重新计算,需要将DStream元数据周期性的写入hdfs;

spark streaming反压机制:动态调整数据接收速率,一个批次数据处理时间大于应用的批处理间隔,会造成接收端数据堆积,可能会出现内存溢出(如果溢出到磁盘则会加大数据处理延迟);一个批次数据处理时间小于应用的批处理间隔时,会造成资源浪费;所以引入动态反压机制,spark streaming Backpressure根据JobSchedule反馈作业的执行信息动态调整Receiver数据接收率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值