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

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 SDK包?

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

例如,MapReduce的Java SDK包。您可以在Maven中搜索 odps-sdk-mapred,单击 下载图标,下载对应类型的包。 odps-sdk-mapred

Java SDK包详情请参见Java SDK介绍

MaxCompute运行代码时,报错java.lang.ClassNotFoundException,如何处理?

出现上述报错,是因为您在引入包时,没有引入与其相关的依赖包或重复引入某个包,请排查本地环境配置。

如果您是在MaxCompute上执行MapReduce作业时出现此错误,请检查是否已通过-resources参数引入依赖的包。

报错OpenJDK 64-Bit Server VM warning,如何处理?

  • 问题现象
    报错信息如下。
    OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory
  • 问题原因

    出现上述报错,是因为临时文件的目录空间不足。

  • 解决方法

    您可以通过df命令,查看并清理临时文件的目录空间。

如何通过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);

如何在MaxCompute的Java业务代码中执行SQL作业?

您可以在业务代码中调用MaxCompute的Java SDK执行SQL作业,详情请参见Java SDK介绍

如何使用Logview排查Java SDK报错?

详情请参见使用Logview查看作业运行信息MaxCompute Logview参数详解和问题排查