关于Hive重写LineageLogger获取血缘问题

Lineagelogger类是hive2.x加入的,但是我们如果自己改造的话需要注意如下问题:(如果将代码迁移到1.x应该直接可用 1.x代码中是直接做了add的操作,并没有做判断才进行加入)

org.apache.hadoop.hive.ql.optimizer.Optimizer 类 第79行 这里由于只有如下几种类型才会加入 generator ,后续才能正常注入字段级血缘,所以
如果这里没有改 直接配置了 hive.exec.post.hooks 类型的hook , 只能拿到基本的input 与output

if (postExecHooks.contains("org.apache.hadoop.hive.ql.hooks.PostExecutePrinter")
    || postExecHooks.contains("org.apache.hadoop.hive.ql.hooks.LineageLogger")
    || postExecHooks.contains("org.apache.atlas.hive.hook.HiveHook")) {
  transformations.add(new Generator());
}

另外一种使用自己修改的HOOk的实现方式是 在配置文件中或者同时设置
set hive.exec.post.hook=hive自带LineageLogger.class,自己所实现的类

你可能感兴趣的:(hive,大数据,hadoop)