目前Spark的社区十分活跃,在Hadoop2.0上部署更能体现出其计算价值。但是作为Spark的五大成员组件之一的GraphX在计算图时的效果究竟怎样呢?
我们都知道Spark立足于内存计算,所以计算速度快。但是这却不可避免的导致OOM的问题。GraphX中的七大算法大都是基于pregel模型实现的,它集成了原生的pregel模型和GAS模型的公共优势,减少了算法的复杂度。利用该模型进行计算时,会产生大量的消息,这些消息都被缓存在内存中,为了减少RDD分区转换之间的计算。但是当图的规模越来越大,而yarn所能提供的资源又有限,这时候该怎么办呢?下面给出一些简单的方法,或许会有用。
1、修改jvm的配置
2、在sparkconf里把不必要的压缩,序列化等参数设为false
3、重新改变图的分区存储,减少shuffle,partitonby可设置四种图的分区策略
4、增加executor个数,或内存
5、修改spark.storage.memoryFraction 默认是0.6
6、求出部分子图进行计算
7、重启sc,彻底释放内存
8、修改源码