由于rowkey是预先计算的,因此我想要/需要将rowkey传递到Reducer
,并且该阶段的信息不再可用。 (该Reducer
执行Put
)将自定义值传递给Reducer
首先我试着只使用内部类,
public class MRMine {
private byte[] rowkey;
public void start(Configuration c, Date d) {
// calc rowkey based on date
TableMapReduceUtil.initTableMapperJob(...);
TableMapReduceUtil.initTableReducerJob(...);
}
public class MyMapper extends TableMapper<Text, IntWritable> {...}
public class MyReducer extends TableReducer<Text, IntWritable, ImmutableBytesWritable> {...}
}
两者MyMapper
和MyReducer
有默认的构造函数中定义。但是,这种方法会导致以下异常(S):
java.lang.RuntimeException: java.lang.NoSuchMethodException: com.mycompany.MRMine$MyMapper.<init>()
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:115)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
Caused by: java.lang.NoSuchMethodException: com.company.MRMine$MyMapper.<init>()
at java.lang.Class.getConstructor0(Class.java:2730)
at java.lang.Class.getDeclaredConstructor(Class.java:2004)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:109)
我被宣布内部类的静态(Runtimeexception: java.lang.NoSuchMethodException: tfidf$Reduce.<init>())去掉异常。但是我必须使rowkey
保持静态,并且我正在并行运行多个作业。
我发现https://stackoverflow.com/a/6739905/1338732其中Reducer
的configure
方法被覆盖,但它似乎不再可用。总之,我无法传递价值。
我在想(错)使用(?)配置,只需添加一个新的键 - 值对,这是否会工作,并且正确的方法?
有没有办法将任何自定义值传递给reducer?
我使用的版本是:HBase的:0.94.6.1
,Hadoop的:1.0.4
谢谢,这工作。我将其视为“要走的路”,以便传递值 – divadpoc
是的,这是将小配置值传递给映射器或缩减器的典型方法。如果您需要传递大量数据,则首选使用分布式缓存。 – David