发布网友 发布时间:2022-04-21 09:18
共2个回答
热心网友 时间:2022-04-13 17:09
打开hiveDEBUG日志这个比较基本,也很容易操作。出问题时先打开,兴许有些有用的信息。另外我们自己的UDF或SerDe里也可以输出些DEBUG日志,方便定位问题:hive-hiveconfhive.root.logger=DEBUG,consoleexplain即在HQL前加上EXPLAIN,比如EXPLAINSELECT*FROM不过这个在查错误的时候用处不大,我还没用它定位到什么BUG。不过在查一些性能问题,或者查看下hive到MR任务的执行过程时会用得着查看plan.xml先得说下hive的执行过程。大体上是这样的:hive客户端(一般是hivecli,入口类为CliDriver)把HQL翻译成MR执行计划(Operator树)并序列化到plan.xmlplan.xml上传到hdfs上hive客户端新起一进程,提交MapRece程序,其入口类为ExecDriver,ExecDriver的Mapper会在setup阶段读取plan.xml,反序列化成Operator树结构,然后执行。所以plan.xml精确的描述了MR程序具体的执行过程,而且xml文件层次清楚,比explain输出更丰富的信息,也很易读。MR执行计划很少出问题,但我们可以借助plan.xml排除一些怀疑会出问题的点,比如确认是翻译阶段的问题,还是MR执行阶段的问题。曾经有一次定位UDF使用的BUG,最开始怀疑是hive生成MR执行计划出错了,但通过查看plan.xml,我们确认翻译阶段没问题。进而开始使用终极手段来看问题:IDE远程DEBUG,单步跟踪,这个我们稍后说。查看plan.xml的方法,有点trick。HIVEcli在生成plan.xml时,会打印日志:Generatingplanfile/plan.xml但hive任务执行完毕时,会把它删掉。所以你得手快,或者想法让hql跑的时间长点,比如sleep一下之类。如果有什么参数可以让hive不删plan文件,留言给我,先行谢过。