由於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