免费开通大数据服务:https://www.aliyun.com/product/odps
常见问题FAQ
Q:Graph 能支持多少节点的进行计算?
A:默认最多1000个节点,通过配置odps.graph.worker.num,可以使用多达3000个节点
Q:Graph 单个节点支持多少内存?
A:默认内存范围为[2048, 32768] 单位为M,通过配置odps.graph.worker.memory 设置所需内存,如果单个节点需要设置超过32768M的内存,请找ODPS 管理员修改配置
Q:Graph 代码中可以访问网络吗?
A:不可以
Q:FAILED: ODPS-0730001: Must define VertexResolver when add/remove vertex/edge or send message to nonexist vertex in superstep
A:根据消息提示,请实现VertexResolver 并设置到配置中,配置为odps.graph.computing.vertex.resolver.class
Q:FAILED: ODPS-0010000:System internal error - Mutations for vertex id 'xxx' overflow, Data buffer exceed max length: 2147483645 bytes
A:设置odps.graph.use.multiple.input.output为true即可解决
Q:FAILED: ODPS-0010000:System internal error - Job failover reach max times 3, worker = 0, message = worker restart
A:有两种情况: 一种是作业时间太长,节点个数多,机器宕机,导致failover 次数过多,这时可以调大odps.graph.max.attempts(默认3次),另一种是作业超用内存被集群杀掉。 第二种情况发生的概率较大, 请根据实际情况判断,如果需要增加内存/节点数,请根据实际情况设置
Q:FAILED: ODPS-0730001: Java heap space
A:worker 内存不够用,通过配置odps.graph.worker.memory 设置所需内存,或者通过设置odps.graph.worker.num 增加worker 节点的个数
Q:FAILED: ODPS-0730001: GraphLoader load duplicate ****
A:请实现VertexResolver 并设置到配置中,配置为odps.graph.loading.vertex.resolver.class
Q:FAILED: ODPS-0730001: Resource not found 'res_file' - Perhaps you forgot to add it to '-resources' list when run graph
A:根据提示在提交作业时同时提交资源
Q:FAILED: ODPS-0730001: ClassNotFoundException *****
A:提交作业时不仅要提交作业的jar,也需要提交依赖的jar包,通过-libjars 提交,多个jar 以逗号分隔
Q:java.lang.OutOfMemoryError: unable to create new native thread
A:作业重试即可
Q:FAILED: ODPS-0010000:System internal error - ensureRemaining: Only bytes remaining, trying to read
A:用户需检查自定义的writable 序列化/反序列化代码是否对应,亦即写出/读取的方式是否统一
Q:作业经常FAILOVER
A:扩大节点内存/节点个数 重试
Q:FAILED: ODPS-0730001: Exceed maximum read times [64] per resource: '****'
A:使用worker value保存resource,并打开worker value的checkpoint 设置.set odps.graph.worker.value.checkpoint.enable=true
优化指南
资源等待超时
现象:ODPS-0010000:System internal error - Timeout when graph master wait all workers start,实际上是在一定时间内无法集齐graph作业所需资源。可根据如下手段优化:
a)判断作业实际需要内存与 任务使用内存之间差距
i. 首先大约计算总内存,查看odps 表原始的数据量 desc table 可以查看
ii. 使用公式总内存(total)= size(压缩) * 6 可计算出大约总内存,然后 规定一个内存比如8192m,则可以得出worker数。一般来说大于8192m的内存较难申请,请注意
b)将资源需求铺开,也就是说增加worker 的个数,而减少单个worker 申请内存的大小 set odps.graph.worker.memory = xxxx; set odps.graph.worker.num=xxxx;
c)调整作业的资源等待时间(单位为分钟,默认为15分钟) set odps.graph.fuxi.job.max.wait.time =xxx;
作业超过运行内存,可以通过如下手段优化作业
优化作业消息传递, 具体使用Combiner,配置为odps.graph.combiner.class ,Combiner的作用是合并某worker 发送给其他worker 点的消息。可大幅减少网络消息的数量和内存使用
优化作业早停,使用Aggregator,halt vertex
资源大杀器
如果项目所在的资源组的minquota 能够满足graph 作业的cpu/memory 使用需要,则可以设置:
set odps.graph.fuxi.job.resource.all_or_nothing=true
这个配置是以所在quota 组为单位,以最高优先级申请资源
相关文章
基于MaxCompute的图计算实践分享-Aggregator机制介绍
基于MaxCompute的图计算实践分享-Resolver简介