使用spark过程中遇到的技术问题及自身问题


最近的一个项目中使用了spark技术过程遇到的一些问题,下面就以问题来分析原因及解决过程

问题

1、创建sparkView没有加限制条件,导致创建几十上百万大数据量的view时,多库的情况下在driver创建了 大量的view,就把driver端的内存撑爆了,之前线上没有暴露出来的这个问题原因主要是每一个小时都会处理一次,每次数据量都不大,后面任务有停了几天,数据量突增了很多,这时就出现很多问题

  • 如代码:


2、使用spark过程中只用于查询大数据量的源数据,其中数据运算过程都是在使用JAVA方式满1000条处理,运算过程是逐条进行运算,代码中产生过程多的对象,没有处理完数据一直驻留在内存,造成严重的FULL-GC,sparkUI上面也发现大量任务处于DEAD状态。

  • 如代码:

3、运算过程使用大量的JDBC的方式查询关联的它表数据,每条数据每次查询它表几毫秒,一旦数据量放大时,消耗时间也是非常大的,而且运算过程中会按多个步骤顺序查询关联表数据(每个步骤都会做,并没有做缓存机制)。

  • 如代码:
    8053749-c08ec8489fcb02c0.png

4、每条数据进行运算时,都打印出大量日志信息,有些日志信息可以不用输出的,打印日志也是导致性能问题之一。

  • 如部分代码:

针对上述这些怀情况已经严重影响到处理速度问题,进行结构上改造,充分利用起spark的技术优势,如下:

  • 1、 重新创建源数据view,对数据按一定条件进行切分及分批并行拉取出来,即加快了拉取速度,也控制了一次加载数据量。如代码:

  • 2、 舍弃每条源数据都去数据库查询相关活动的数据及它表的数据来进行运算,创建相关的view,通过大sql来关联数据。如:
  • 3、 由逐条数据进行运算的方式,改进成通过大SQL中自定义函数来实现匹配运算过程,减少java查询方式运算时导致大量数据对象驻留内存没有释放,也改善并行运算的速度。

    如代码:

  • 4、 减少没有必要的日志输出,将日志输出信息级别调整为debug来减少IO输出。如代码:
  • 5、 解决上述问题后性能提高了几倍,但是也发现存在其它问题,后面发现有各别活动数据量超过一百万,创建view应该按源数据的条件先过滤出来有效数据来进行关联。如代码:



  • 6、 自定义累计器的问题,实现累加计的方法,必须实现几个方法,当时我只用到其中一个add方法,就只正确实现这个方法,其它的方法就随意写了下,如代码:

    结果在运算中调用累加器的时候就报出异常信息,说必须实现copy及reset方法,后面才知道调用累加器时候,它的实现方法中会逐个会被调用到,调用foreachPartition 的时候,会为每个Partition执行一次自定义累加器的copy-》reset-》isZero方法。
  • 7、 使用累加器来收集数据还有一个问题,它存储的数据对象字段非常多是一个很大的对象集,它又是一个共享的数据变量,分发到各个机器上进行操作,它达到一定的数据量才会入库及清空数据,这样导致driver端上经常FULL-GC,分片数据入库依赖于它。如代码:



    解决此问题,将累加器移除掉,任务分区的数据按一定规则进行排序,保证同源数据的id相同的数据在一个分区里,后面累加器修改成局部的Map集合收集数据,这样就将driver端入库操作移到excutor端。

  • 8、 在不断的优化过程中,发现自己的代码存在很多问题,每次review代码时,都会发现可以优化之处,如方法及变量命名不清晰,方法体的代码过长,存在冗余的代码,结构不够清晰,注释太少且不清晰等等。

  • 9、 SparkUI的重要性,有什么问题都可以在上面看到,从中也可以发现出潜在的问题,也能在上面实时观察出任务的运行情况;SparkUI上面虽然只有六个菜单,如何在其中找到我想要数据分析及技术分析的信息,还是值得我学习及研究的。

总结

经过一系列的改造后,从之前的每小时处理200百万数据提升到每小时处理上千万的数据量;在该过程中遇到很多的问题及困难,主要是自己对spark方面的知识了解不够深入,在代码结构及细节上处理上面还不够细致。通过同事们帮助下,顺利地解决了spark性能上的问题

作者:唯品会-蒋先辉
日期:2018.1.22

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容