为了账号安全,请及时绑定邮箱和手机立即绑定

Spark性能调优篇五之使用fastUtil工具包

标签:
Spark

今天再来介绍一个小的优化点,是一个通过使用fastutil工具包对数据格式进行优化。首先来明确一个东西,什么是fastutil?

        fastutil是一个Java集合框架的扩展,通过实现Java集合的接口,提供了特殊类型的map,list等等。通过使用fastutil可以使得对象占用更小的内存,更快的存取速度;通过这两个特点,我们可以将Spark作业中用的一些map,list等结构替换成fastutil来提高Spark作业的运行效率。fastutil的每一种集合类型,都实现了对应的Java中的标准接口(比如fastutil的map,实现了Java的Map接口),因此可以直接放入已有系统的任何代码中。

明确了fastutil以后,我们来看看其在Spark代码中的应用场景。

1.如果算子函数使用了外部变量;那么第一,你可以使用Broadcast广播变量优化;第二,可以使用Kryo序列化类库,提升序列化性能和效率;第三,如果外部变量是某种比较大的集合,那么可以考虑使用fastutil改写外部变量,首先从源头上就减少内存的占用,通过广播变量进一步减少内存占用,再通过Kryo序列化类库进一步减少内存占用

2.在一些RDD中,出现了要创建一些比较大的map,list等集合,有可能会占用比较大的内存空间;另一方面加上有可能涉及比较耗性能的遍历等操作,这个时候就可以考虑使用fastutil集合类来提高性能。

        光说理论没什么卵用,我们来看看项目中到底是怎么使用的(这里结合我的项目,贴出部分代码),代码很简单,如下截图所示。

webp

webp

未使用fastUtil之前

webp

使用fastUtil之后

总结:在项目某些使用了map等集合的地方,如果这个集合较大,就可以考虑采用fastutil代替传统的map等结构,从而提高程序的运行效率。本文到这里基本接近尾声,后续还会不断更新关于Spark作业优化的一些其他方式,欢迎关注。

如需转载,请注明:

z小赵  Spark性能调优篇五之使用fastUtil工具包



作者:z小赵
链接:https://www.jianshu.com/p/a2f1295351e2


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消