本发明涉及的是大数据实时计算领域,具体涉及一种提升spark结构化流计算数据持久化的方法。
背景技术:
1、structured streaming是业界具有低处理时延、高吞吐量的分布式实时计算框架。目前业务中常见的一种应用场景是structured streaming消费kafka消息中间件的数据,经过etl清洗后将结果数据存储在hive表中。
2、若实时计算处理逻辑中不包含shuffle算子,如repartition、join等,其微批处理模型如图1所示,structured streaming写入hdfs存储系统的文件个数与sparktask个数一致;
3、在实际的业务处理中,为了减少产生过多的小文件影响hadoop集群的稳定性。常见的解决方案是在将结果数据写出到外部存储系统前,通过在sink端增加coalesce算子进行合并。但缺点是在业务流量高峰期,数据持久化到hdfs的效率会大大降低,而过多的数据堆积在spark executor中也容易导致任务因oom失败。
4、为了提升在业务高峰期structured streaming数据持久化到hdfs文件系统的效率,同时降低在业务低谷期产生过多的小文件,本发明提出了一种structured streaming自适应执行方案。
技术实现思路
1、针对现有技术上存在的不足,本发明目的是在于提供一种提升structuredstreaming数据持久化的方法,提升了在业务高峰期structured streaming数据持久化到hdfs文件系统的效率,同时降低在业务低谷期产生过多的小文件。
2、为了实现上述目的,本发明是通过如下的技术方案来实现:一种提升spark结构化流计算数据持久化的方法,包括以下步骤:
3、1、structured streaming读取kafka数据进行计算,若在下一个调度周期内,前一个batch任务仍未将数据处理完,则会出现batch任务堆积。spark driver周期性检测batch堆积数目是否大于阈值m.此处m取值3;
4、2、若否,则任务物理执行计划(dag)不变,仍保留coalesce(n)算子,在batch时间内只产生n个hdfs文件;
5、3、若是,则spark调度下一个任务时将动态调整执行计划,去掉coalesce算子,此时spark dag只保留一个stage,数据接入、清洗后会直接写入到hdfs存储系统,不存在因coalesce引入的shuffle操作(spark shuffle包含了大量的磁盘io、序列化、网络数据传输等操作,会降低任务处理性能),数据同步效率会大大增加。
6、本发明的有益效果:本发明提升了在业务高峰期structured streaming数据持久化到hdfs文件系统的效率,同时降低在业务低谷期产生过多的小文件。
1.一种提升spark结构化流计算数据持久化的方法,其特征在于,包括以下步骤: