Java 将自定义值传递给Reducer
我想/需要将行键传递给Java 将自定义值传递给Reducer,java,hadoop,mapreduce,hbase,Java,Hadoop,Mapreduce,Hbase,我想/需要将行键传递给减速机,因为行键是预先计算的,并且在该阶段信息不再可用。(减速机执行Put) 首先,我尝试只使用内部类,例如 public class MRMine { private byte[] rowkey; public void start(Configuration c, Date d) { // calc rowkey based on date TableMapReduceUtil.initTableMapperJob(...); Table
减速机
,因为行键是预先计算的,并且在该阶段信息不再可用。(减速机执行Put
)
首先,我尝试只使用内部类,例如
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> {...}
}
我通过声明内部类static()来消除异常。但是我还必须使行键
也是静态的,并且我并行运行多个作业
我发现Reducer
的configure
方法被覆盖,但它似乎不再可用。无论如何,我不能传递一个值
我正在考虑(mis)使用(?)配置,只需添加一个新的键值对,这是否有效,以及正确的方法
有没有办法将自定义值传递给减速器
我正在使用的版本是:hbase:0.94.6.1
,hadoop:1.0.4
您的问题陈述有点不清楚,但我认为这正是您需要的
我目前用于将信息传递给减速器的方法是在配置中传递信息
在作业设置中,执行以下操作
conf.set("someName","someValue");
这将在配置中创建一个名为someName、值为someValue的标记。稍后,可以通过执行以下操作在映射器/还原器中检索该值:
Configuration conf = context.getConfiguration();
String someVariable = conf.get("someName");
当前代码将someVariable的值设置为“someValue”,允许将信息传递到减速器
要传递多个值,请使用setString()。我还没有测试过这个函数,但是根据is的说法,应该使用以下两个选项之一(文档有点不清楚,所以请尝试使用这两个选项中的任何一个):
检索使用:
Configuration conf = context.getConfiguration();
String someVariable = conf.getStrings("someName");
希望这有帮助目标有点不明确,但我发现对于涉及HBase的许多类型的工作,您不需要使用减速机将数据放入HBase。映射程序读取一行,以某种方式修改它,然后将其写回
显然,有些作业不适合这样做(例如,任何类型的聚合),但reduce阶段确实会减慢作业的速度。谢谢,这是可行的。我将它作为传递值的“方法”,这是向映射器或还原器传递小配置值的典型方法。如果需要传递大量数据,最好使用分布式缓存。目标是将信息传递给Reducer
(我在聚合数据时需要它)。但是感谢您提供的信息,如果我遇到一个不需要减速器的用例,我会记住它
conf.setStrings("someName","value1,value2,value3");
conf.setStrings("someName","value1","value2","value3");
Configuration conf = context.getConfiguration();
String someVariable = conf.getStrings("someName");