本文为您介绍Java SDK的常见问题。
问题类别 | 常见问题 |
SDK咨询 | |
运行报错 |
如何下载Java SDK包?
MaxCompute的Java SDK包已经托管在Maven上,您可以通过Maven下载Java SDK包。
例如,MapReduce的Java SDK包。您可以在Maven中搜索odps-sdk-mapred,在Versions页签中单击对应SDK版本后的,然后下载对应类型的包。
Java SDK包详情请参见Java SDK介绍。
如何通过MaxCompute Java SDK设置SQL的Flag?
当您使用DataWorks控制台或MaxCompute客户端(odpscmd)提交SQL时,通常需要设置SQL的Flag。例如,如果您需要使用MaxCompute 2.0数据类型,可以通过Session级别方式开启,在涉及2.0新数据类型的SQL前增加Set Flag语句set odps.sql.type.system.odps2=true;
。
使用Java SDK提交SQL时,不能简单地把Set Flag语句直接增加到SQL中,设置Flag的正确方式如下。
--构造SQLTask对象。
SQLTask task = new SQLTask();task.setName("foobar");task.setQuery("select ...");
--设置Flag。
Map settings = new HashMap<>();settings.put("odps.sql.type.system.odps2", "true");...
--设置其它Flags。
task.setProperty("settings", new JSONObject(settings).toString()); --这里是关键:将Flags对应的JSON String设置到settings中。
--执行。
Instance instance = odps.instances().create(task);
如何使用Logview排查Java SDK报错?
MaxCompute Java SDK提供了Logview接口i = SQLTask.run(odps, sql); String logview = odps.logview().generateLogView(i, 7×24)
。
如何在MaxCompute的Java业务代码中执行SQL作业?
您可以在业务代码中调用MaxCompute的Java SDK执行SQL作业,详情请参见Java SDK介绍。
使用SQLTask执行SQL查询时,如果查询结果条数大于限制的10000条,该如何获取所有数据?
您可以将SQL查询的结果集写入一张表中,通过Tunnel下载所有数据。
SQLTask中,按照如下方法返回结果集的数据量是否有限制?如果有限制,最大返回结果集大小是多少?
命令示例如下。
Instance instance = SQLTask.run(odps, "sql语句");
instance.waitForSuccess();
List<Record> records = SQLTask.getResult(instance);
有限制,您可以最多调整到10000。如果数据量比较大,建议您使用Tunnel SDK导出数据。
SQLTask查询数据和DownloadSession在使用及功能上,有什么不同?
SQLTask运行SQL并返回结果,返回条数有限制,默认是10000条。
DownloadSession下载某个存在的表里的数据,结果条数无限制。
MaxCompute Java SDK执行作业卡顿,如何解决?
问题现象
用户A使用MaxCompute Java SDK执行作业卡顿,没有Logview信息。
用户B使用MaxCompute Java SDK访问表,执行RestClient Retry操作后,作业卡顿。
产生原因
用户A由于没有Instance的Logview,导致系统无法追踪Instance的运行过程。Instance创建后会调用
instance.waitForSuccess()
方法,一旦作业耗时大,就会卡顿。此时如果有Logview,就可以查看并追踪作业卡顿的具体原因。用户B从表面看就是作业卡顿了,没有任何输出。Java SDK的RestClient本身有重试机制,如果系统在每次重试时都输出错误日志,就可以快速定位问题。
解决措施
使用MaxCompute Java SDK生成Instance Logview。
MaxCompute Java SDK提供了Logview接口,详情请参见Instance Logview示例。
说明请您在使用Java SDK时,为每个Instance记录Logview,一旦遇到问题可快速追踪。
在MaxCompute客户端(odpscmd)执行
WAIT<instance_id>
命令可以获得Logview链接。
每次执行RestClient Retry操作时都输出错误日志。
MaxCompute Java SDK提供了抽象类RetryLogger,详情请参见输出错误日志示例。
MaxCompute运行代码时,报错java.lang.ClassNotFoundException,如何解决?
出现上述报错,是因为您在引入包时,没有引入与其相关的依赖包或重复引入某个包,请排查本地环境配置。
如果您是在MaxCompute上执行MapReduce作业时出现此错误,请检查是否已通过-resources
参数引入依赖的包。
MaxCompute运行代码时,报错OpenJDK 64-Bit Server VM warning,如何解决?
问题现象
报错信息如下。
OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory
产生原因
出现上述报错,是因为临时文件的目录空间不足。
解决方法
您可以通过
df
命令,查看并清理临时文件的目录空间。
MaxCompute查找实例时,报错Instance not found,如何解决?
问题现象
报错信息如下。
com.aliyun.odps.rest.RestException: RequestId=**,Code=NoSuchObject,Message=ODPS-0424111: Instance not found - 'instanceid'. at
产生原因
出现上述报错,可能是因为项目信息错误。
解决方法
建议您确认实例所在的项目连接信息是否正确,包括项目名称、账号认证信息等。