您的位置:首页 > 其它

基于MaxCompute的图计算实践分享-常见问题解决及优化指南

2017-04-09 00:00 651 查看
常见问题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简介

基于MaxCompute的图计算实践分享-图加载过程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  配置 odps class MaxCompute