FusionInsight HD SparkJDBCServer业务间歇性中断

发布时间:  2016-09-10 浏览次数:  53 下载次数:  0
问题描述

FusionInsight版本:V100R002C30SPC602

SparkJDBCServer业务间歇性中断。

首先业务间歇性中断,是客户业务的逻辑实现导致,客户的业务是周期性跑,比如1分钟跑一次,但是如果这一次业务在30秒里没有结束,就认为失败。即本次业务中断了。

所以客户真正的问题是为什么任务有时候执行时间会超过预期。


处理过程

分析SparkJDBCServer运行日志发现客户反馈的任务运行时间超过预期的时候,同时有一个很大的任务在运行。

1909:21-24分为例

2015-12-19 09:21:43,953 | INFO  | [sparkDriver-akka.actor.default-dispatcher-23] | Parents of final stage: List(Stage 76047, Stage 76048) | org.apache.spark.Logging$class.logInfo(Logging.scala:59)

2015-12-19 09:21:43,958 | INFO  | [sparkDriver-akka.actor.default-dispatcher-23] | Missing parents: List(Stage 76047, Stage 76048) | org.apache.spark.Logging$class.logInfo(Logging.scala:59)

2015-12-19 09:21:45,181 | INFO  | [sparkDriver-akka.actor.default-dispatcher-23] | Submitting Stage 76048 (MapPartitionsRDD[686047] at mapPartitions at Exchange.scala:64), which has no missing parents | org.apache.spark.Logging$class.logInfo(Logging.scala:59)

2015-12-19 09:21:45,288 | INFO  | [sparkDriver-akka.actor.default-dispatcher-23] | Submitting 17439 missing tasks from Stage 76048 (MapPartitionsRDD[686047] at mapPartitions at Exchange.scala:64) | org.apache.spark.Logging$class.logInfo(Logging.scala:59)


这个很大的任务一共17439task,这个任务运行了几分钟,所以同期的其他任务都慢了。


根因

经过和客户研发沟通,该任务存在问题,其实这个任务处理的数据量不大,但是由于客户实现的逻辑导致这个任务出现了上万的task。客户的业务定期会向一张表里insert数据,每次insert的数据量很小,但是文件数很多,最终每天就能产生17000+个文件,导致后面对这张表进行计算时会产生17000+task(task数和文件或文件块个数对应),这种业务逻辑是不合理的。

解决方案

不要让数据表里产生很多小文件

和客户交流后,决定使用HDFSappend进行数据追加的方式,而不是直接使用insert表的方式,修改后此任务最终只有200个左右的task


END