huotu
1
- nebula 版本:1.2.1
- 部署方式(分布式 / 单机 / Docker / DBaaS):分布式
- 是否为线上版本:N
在跑PageRank算法的时候,由于数据倾斜导致任务长时间无法完成,于是修改提交参数和算法配置重新运行,增加spark-submit参数–conf spark.default.parallelism=500 不生效,应该是运行时有重新设置了分区,在算法配置文件中增加 spark.app.partitionNum=500 后该参数也不生效,分区数始终为200,nebula图空间创建时为默认分区100
问题:请问跑算法任务时如何设置分区数呢?
配置文件中有一项配置是nebula.partitionNumber,可以修改该参数。 这个参数对应的文档说明有误,不是指NebulaSpace的partition数,是指spark的分区数。
huotu
3
经过测试发现
1、nebula图空间创建时为默认分区100,在算法配置文件中指定了两种关系类型,分区数: nebula.partitionNumber * 关系类型个数 ,所以分区数为200,同时也可以指定nebula.partitionNumber(指定图空间分区数,默认100,必需项),这时200就会变成 指定的分区 * 关系类型个数,猜测该分区数是用来读取nebula数据的
2、spark.app.partitionNum=500 该配置也是生效的,在后期计算中,分区数变成了spark.app.partitionNum指定的分区数,看源码有经过重分区指定该分区数,如果不指定spark.app.partitionNum,则为 nebula.partitionNumber * 关系类型个数
2 个赞