Java SDK常见问题

本文为您介绍Java SDK的常见问题。

问题类别

常见问题

SDK咨询

运行报错

如何下载Java SDK包?

MaxCompute的Java SDK包已经托管在Maven上,您可以通过Maven下载Java SDK包。

例如,MapReduce的Java SDK包。您可以在Maven中搜索odps-sdk-mapred,在Versions页签中单击对应SDK版本后的image,然后下载对应类型的包。image

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
  • 产生原因

    出现上述报错,可能是因为项目信息错误。

  • 解决方法

    建议您确认实例所在的项目连接信息是否正确,包括项目名称、账号认证信息等。