Hadoop 如何在配置单元';什么是MapJoin执行?

Hadoop 如何在配置单元';什么是MapJoin执行?,hadoop,hive,mapreduce,user-defined-functions,cloudera-cdh,Hadoop,Hive,Mapreduce,User Defined Functions,Cloudera Cdh,我有一个自定义配置单元GenericUDF,它获取在自定义配置单元预执行挂钩中设置的自定义配置单元配置 在配置单元预执行钩子(实现org.apache.hadoop.Hive.ql.hooks.ExecuteWithHookContext的类)中,我将自定义配置设置为: hookContext.getConf().set( "my.custom.property", "value" ); 在配置单元GenericUDF的configure()方法中,我使

我有一个自定义配置单元GenericUDF,它获取在自定义配置单元预执行挂钩中设置的自定义配置单元配置

在配置单元预执行钩子(实现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的求值方法期间获取配置单元自定义属性,以便它可以在MapRedTask和MapRedLocalTask以及任何其他任务中工作

是否有可以直接在GenericUDF.evaluate()中使用的上下文允许我使用属性获取JobConf

注意:要求将自定义属性设置为JobConf,而不是任何其他方式