如何解决如何在Hive的MapJoin执行期间获取自定义的作业配置?
我有一个自定义的Hive GenericUDF,它获得了一个自定义的Hive配置,该配置在自定义的Hive pre exec挂钩中设置。
在Hive Pre Exec Hook(实现org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext的类)中,我这样设置自定义配置:
hookContext.getConf().set( "my.custom.property","value" );
在Hive GenericUDF的configure()方法中,我使用MapredContext对象作为参数传递给configure()来检索我的自定义属性:
String value = mapredContext.getJobConf().get("my.custom.property");
此值存储在GenericUDF的静态字段中,以后在GenericUDF的validate()方法中使用。
此UDF可在简单的Hive选择查询(hive.execution.engine = mr)中使用,但在Hive查询中使用并启用了MapJoin优化的Joins(hive.auto.convert.join = true)时失败。之所以失败,是因为它无法获取my.custom.property的值,因为从未在MapRedLocalTask中运行的mapjoin任务中调用GenericUDF.configure方法。 据我所知,GenericUDF.configure()方法仅在MapRedTask的运行时中被调用,而在MapRedLocalTask中没有被调用。它只是直接调用的评估方法。
所以,我的问题是如何在GenericUDF的评估方法期间获取Hive定制属性,以使其在MapRedTask和MapRedLocalTask以及任何其他Tasks中都能工作?
我可以直接在GenericUDF.evaluate()中使用任何上下文,让我通过自己的财产获得JobConf吗?
注意:要求将自定义属性设置为JobConf,而不是其他任何方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。