场景一

用户A
A: “亲,用 MaxCompute Java SDK 跑作业,为什么卡住不动了?”
me: “有 Logview 吗?发来看下”
A: “没有,我用的是SDK,没Logview”

场景二

用户B
B :“亲,用 MaxCompute Java SDK 访问 Table,为什么卡住半天没反应?”
me:“卡在哪一行了?”
B:"就 RestClient retry 然后卡住了"

去繁就简

用户 A 的问题在于没有 instance 的 logview,导致无法追踪 instance 的运行过程。
通常用户在创建 instance 后会调用 instance.waitForSuccess() 来等待作业运行完成,一旦作业耗时巨大,程序就卡在这一步了,此时如果有 logview ,就能查看追踪查看作业等待的具体原因了。

用户 B 的问题在于 sdk 的 Restclient 本身有重试机制,从表面来看就是卡住了,没有任何输出。
如果在每次重试的时候都输出错误,就可以快速定位问题节约时间了。我已经遇到好几个公共云用户因为缺包导致一直卡住几分钟才丢出异常,严重影响了工作效率。

那么问题可以归结为下面两点:

1【 怎么使用 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 Console 中使用 wait <instance_id> 命令也可以得到Logview。

2【 能不能在每次重试的时候,都把错误输出呢?】

当然可以。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 {@Overridepublic 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 执行任务卡住了,怎么办?相关推荐

  1. MaxCompute Tunnel SDK数据上传利器——BufferedWriter使用指南

    为什么80%的码农都做不了架构师?>>>    摘要: MaxCompute 的数据上传接口(Tunnel)定义了数据 block 的概念:一个 block 对应一个 http re ...

  2. 使用 MaxCompute(原ODPS) java sdk 运行安全相关命令

    摘要: 使用 odps console 的同学,可能都使用过 odps 安全相关的命令. 转自zhenhong 使用 MaxCompute console 的同学,可能都使用过 odps 安全相关的命 ...

  3. centos java yum_CentOS7 使用yum命令安装Java SDK

    CentOS 6.X 和 7.X 自带有OpenJDK runtime environment  (openjdk).它是一个在linux上实现开源的Java 平台. 安装方式: 1.输入以下命令,以 ...

  4. 表格存储的Java SDK性能优化经验

    原文发布于阿里云论坛,在圈子内重发. 问题背景 用户通过Java SDK来访问表格存储,在SDK内部也是有开销的,在高并发的场景下这些开销尤其突出.如果SDK的性能很差,用户为了达到更高的QPS,可能 ...

  5. Hyperledger Fabric Java SDK最新教程

    Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK ...

  6. java解析shell命令_Android中执行java命令的方法及java代码执行并解析shell命令

    这篇文章给大家介绍Android中执行java命令的方法及java代码执行并解析shell命令,需要的朋友一起学习 android中执行java命令的方法大家都晓得吗,下面一段内容给大家带来了具体解析 ...

  7. centos 安装java sdk_Linux——CentOS7使用yum命令安装Java SDK

    安装jdk有很多种方式比如我们可以在Oracle Technology Network>Java>Java SE>Download(点此链接跳转)下载jdk-8u25-linux-x ...

  8. androidlib.java_实现 Java SDK 库

    Android 平台包含大量的共享 Java 库,可以使用应用清单中的 标记选择性地将其纳入应用的类路径中.由于应用与这些库相关联,因此在兼容性.API 审核和工具支持方面,应将其与其他 Androi ...

  9. Java SDK和Java JDK的区别

    sdk.jdk.jre的区别 一.JDK与jre 简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境.SDK是Software Development Kit 一般指软件开 ...

最新文章

  1. 浅谈Transformer的初始化、参数化与标准化
  2. vue indev.html,webpack多入口热加载很慢
  3. Docker的“谎言”
  4. char和unsigned char
  5. 电脑办公人员必看:效率翻倍的11个Excel技巧!
  6. python程序 爱意_[Python]快学学怎么Python爬一段情书送女朋友吧
  7. 计算机技术博客博客知乎,我的技术博客的选择:CSDN、博客园、简书、知乎专栏仍是Github Page?...
  8. SpringBoot集成MyBatis-Plus自定义SQL
  9. 一语点破Java中的静态static关键字
  10. 聚合数据接口,提供开放API
  11. js插入元素的新方法insertAdjacentHTML
  12. Windows上SVN服务器搭建【转】
  13. 使用http-server搭建web服务器
  14. 微信小程序原生自定义组件布局问题
  15. 信息计算机课评课,关于信息技术的评课稿
  16. 解读Vue项目文件目录结构,实例化Vue对象,数据和方法
  17. X11-forwarding笔记
  18. echart中饼图如何显示数据 实现鼠标移动切换显示(vue中)
  19. 网络电视视频服务器所放位置,同样带宽,为什么用电视上的网络电视app看电视就卡,用运营商自己的iptv就不卡呢?...
  20. 最新有效的微视频号视频下载丨vx视频号视频怎么免费下载?

热门文章

  1. 二叉树的建立和遍历的各种问题
  2. [School Life - Study] 有哪些每天坚持效果显著的高中学习习惯?
  3. 剑指offer 面试64题
  4. 南邮CTF密码学write up
  5. Linux-鸟菜-6-文件与目录管理
  6. C语言-数组名真的不是指针
  7. 【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
  8. 【Flutter】Flutter 混合开发 ( 简介 | Flutter 混合开发集成步骤 | 创建 Flutter Module )
  9. 【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )
  10. 修改Linux root用户名 后提示network manager启动失败修复