我有一个自定义配置单元genericudf,它获取一个在自定义配置单元pre-exec hook中设置的自定义配置单元配置。
在hive pre exec hook(实现org.apache.hadoop.hive.ql.hooks.executewithhookcontext的类)中,我将自定义配置设置为:
hookContext.getConf().set( "my.custom.property", "value" );
在配置单元genericudf的configure()方法中,我使用作为configure()参数传递的mapredcontext对象来检索我的自定义属性:
String value = mapredContext.getJobConf().get("my.custom.property");
此值存储在genericudf的静态字段中,稍后在genericudf的evaluate()方法中使用。
此udf在简单的配置单元选择查询(hive.execution.engine=mr)中工作,但在启用mapjoin优化的连接的配置单元查询(hive.auto.convert.join=true)中使用时失败。它失败是因为无法获取my.custom.property的值,因为在mapredlocaltask中运行的mapjoin任务中从未调用genericudf.configure方法。据我所知,genericudf.configure()方法仅在mapredtask的运行时调用,而在mapredlocaltask中不调用。它只是直接调用的evaluate方法。
因此,我的问题是如何在genericudf的evaluate方法中获取hive自定义属性,以便它在mapredtask和mapredlocaltask以及任何其他任务中都能工作?
在genericudf.evaluate()中是否有可以直接使用的上下文,允许我使用属性获取jobconf?
注意:要求将自定义属性设置为jobconf,而不是任何其他方式。
暂无答案!
目前还没有任何答案,快来回答吧!