本文为您介绍Java SDK的常见问题。
- MaxCompute Java SDK执行任务卡顿如何处理?
- MaxCompute如何下载SDK的DOC?
- MaxCompute运行代码时,报错为java.lang.ClassNotFoundException,怎么处理?
- 报错OpenJDK 64-Bit Server VM warning怎么处理?
MaxCompute Java SDK执行任务卡顿如何处理?
- 问题现象
- 用户A使用MaxCompute Java SDK执行作业,任务卡顿了,没有Logview信息。
- 用户B使用MaxCompute Java SDK访问表,执行RestClient Retry操作后任务卡顿。
- 问题原因
- 用户A的问题为没有Instance的Logview,导致无法追踪Instance的运行过程。Instance创建后会调用
instance.waitForSuccess()
方法,一旦作业耗时巨大,程序就会卡在这一步。此时如果有Logview,就可以查看追踪作业等待的具体原因。 - 用户B的问题为SDK的Restclient本身有重试机制,从表面来看就是卡住了,没有任何输出。如果在每次重试的时候都输出错误,就可以快速定位问题。
- 用户A的问题为没有Instance的Logview,导致无法追踪Instance的运行过程。Instance创建后会调用
- 解决方案
- 使用MaxCompute Java SDK生成Instance Logview。
MaxCompute Java SDK提供了Logview接口,详情请参见SDK Java Doc,代码如下。
String logview = odps.logview().generateLogView(instance, 7*24);
说明- 两个参数:Instance对象,Logview Token超时时间(单位:小时)。
- 提醒用户在使用SDK的时候,请为每个Instance记录Logview,一旦遇到问题可快速追踪。
- 在MaxCompute客户端中使用
wait < instance_id >
命令可以获得Logview。
- 每次执行RestClient Retry操作时输出错误日志。
MaxCompute Java SDK提供了抽象类RetryLogger,详情请参见SDK Java Doc,代码如下。
public static abstract class RetryLogger { /** * 当RestClent发生重试前的回调函数。 * * @param e * 错误异常。 * @param retryCount * 重试计数。 * @param retrySleepTime * 下次需要的重试时间。 */ public abstract void onRetryLog(Throwable e, long retryCount, long retrySleepTime); }
您只需实现一个自己的RetryLogger子类,然后在初始化ODPS对象的时候使用
odps.getRestClient().setRetryLogger(new UserRetryLogger());
就可以将日志输出。典型的实现如下。// init odps odps.getRestClient().setRetryLogger(new UserRetryLogger()); // your retry logger public class UserRetryLogger extends RetryLogger { @Override public void onRetryLog(Throwable e, long retryCount, long sleepTime) { if (e != null && e instanceof OdpsException) { String requestId = ((OdpsException) e).getRequestId(); if (requestId != null) { System.err.println(String.format( "Warning: ODPS request failed, requestID:%s, retryCount:%d, will retry in %d seconds.", requestId, retryCount, sleepTime)); return; } } System.err.println(String.format( "Warning: ODPS request failed:%s, retryCount:%d, will retry in %d seconds.", e.getMessage(),retryCount, sleepTime)); } }
- 使用MaxCompute Java SDK生成Instance Logview。
MaxCompute如何下载SDK的DOC?
目前MaxCompute的SDK代码已经托管在MAVEN上了,您可以到MAVEN服务器上下载。例如MapReduce的SDK,您可以在MAVEN中搜索 odps-sdk-mapred,单击file_download选择对应的文件类型下载。
同样,您也可以搜索odps-sdk-udf下载相关内容。
MaxCompute运行代码时,报错为java.lang.ClassNotFoundException,怎么处理?
出现上述报错,是因为您在引入包的时候,没有引入其相关的依赖包或者某个包重复引入。请排查一下本地环境配置。
如果您是在MaxCompute上执行MappeReduce任务时出现此错误,请检查是否将依赖的包通过-resources
参数引用进来。
报错OpenJDK 64-Bit Server VM warning怎么处理?
- 问题现象:报错信息如下。
OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory
- 问题原因:出现上述报错,是因为临时文件的目录空间不够了。
- 解决方法:可以通过
df
命令,查看空间使用情况。清理临时文件的目录空间。
在文档使用中是否遇到以下问题
更多建议
匿名提交