如何根据错误信息定位出现问题的发生阶段以及错误类别

友情链接


1. 错误发生阶段

  • COMPILE FAILED:编译阶段(并未生成task)
  • EXECUTION FAILED:执行阶段(已生成task,在task执行过程中出错)

2. 错误类别

  • Parse error:词法/语法错误(由AntLR报出)
  • Semantic error:语义错误(语法合规但是意义不正确)
  • Internal error + 异常类型:编译器内部错误(通常意味着产品代码逻辑有问题,即有bug)

异常类型为真正抛出的异常的类名

  • Task + 任务名 + error + 异常类型:Task执行错误

任务名为编译生成的task名字,如Spark,DDL,PLSQL等等

异常类型为真正抛出的异常的类名

3. 错误内容

[Error code] + 异常信息

  • Error code为真正的错误码,将来会形成完整的文档,根据该异常码准确的找到错误原因及解决办法。目前Error code可能不完全准确,我们内部正在仔细梳理
  • 异常信息为具体的异常原因,在现阶段为判断错误的主要根据

4. 客户端内容

  • JDBC中直接catch到的SQLException中,Message即为上述内容,同时可以拿到SQLException中的SQLState和ErrorCode
  • BeeLine客户端因为使用的是JDBC,所以会得到上述内容,并且会在整条信息的头部添加ERROR或者WARNING(WARNING我们现在还没有)前缀,以及(state=,code=)后缀,这属于客户端自身的行为,暂时不更改


示例

红字部分表示错误发生阶段,绿字部分表示错误类别,蓝字部分表示错误内容:

  • COMPILE FAILED: Parse error: [Error 40000] line 1:0 cannot recognize input near 'seletc' '*' 'from'
表示编译阶段出错,为语法错误,内容为不认识seletc这个单词
  • COMPILE FAILED: Semantic error: [Error 10001] Table not found t
表示编译阶段出错,为语义错误,内容为表t不存在
  • COMPILE FAILED: Internal error ClassCastException: [Error 40000] org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc cannot be cast to org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc
表示编译阶段出错,为编译器内部错误,异常为ClassCastException,内容为ExprNodeGenericFuncDesc类不能转换为ExprNodeConstantDesc类(显然是代码里的逻辑不正确,武断的做了强转)
  • EXECUTION FAILED: Task DDL error HiveException: [Error 1] AlreadyExistsException(message:Table t already exists)
表示执行阶段出错,执行的task为DDL task,异常为HiveException,内容为表已存在
  • EXECUTION FAILED: Task MAPRED-SPARK error HiveException: [Error 1] MetaException(message:Filtering is supported only on partition keys of type string)
表示执行阶段出错,执行的task为Spark task,异常为HiveException,内容为单值partition只允许用string来做过滤(显然这里的error code 1依然是非常不准确的,有待梳理)


  • EXECUTION FAILED: Task EXEC PLSQL error PLException: [Error -1024] USER_DEFINED

Program Output:

Now firing dynamic sql.

PL block in dynamic sql100

*********************************************

ANONYMOUS BLOCK (LINE 6, COLUMN 0, TEXT "raise ex")

PROCEDURE 'error_dynamic_sql_test' (LINE 15, COLUMN 18, TEXT "execute immediate stmt using s_var, 100; (statement: declare
ex exception
pragma exception_init(ex, -1024)
begin
put_line(:s || :i)
raise ex
select * from t1 t1
end; :s="PL block in dynamic sql"; :i=100.)")
ANONYMOUS BLOCK (LINE 2, COLUMN 0, TEXT "error_dynamic_sql_test();")
*********************************************

表示执行阶段出错,执行的task为PLSQL task,异常为PLSQL系统异常(PLException),内容为用户显式抛出了自定义异常(异常码为-1024),并且附带了PLSQL程序的标准输出(Program Output)和callstack

注,如果是使用BeeLine的同学,会看到如下格式:

Error: EXECUTION FAILED: Task MAPRED-SPARK error HiveException: [Error 1] MetaException(message:Filtering is supported only on partition keys of type string) (state=08S01,code=1)

粉字部分为BeeLine附带的异常信息,可以适当无视




如果上述内容对您有提供帮助,欢迎多多点赞支持~😎

点赞.png下箭头,指向下箭头.png

评论
登录后可评论
发布者
星小环分享号
文章
180
问答
205
关注者
27
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入