Hadoop 在mapper中设置conf值-在run方法中获取它
在Driver类的run方法中,我想从mapper函数中获取一个字符串值并将其写入文件。我使用了以下代码,但返回了null。请帮忙 制图员 驾驶员等级Hadoop 在mapper中设置conf值-在run方法中获取它,hadoop,mapreduce,Hadoop,Mapreduce,在Driver类的run方法中,我想从mapper函数中获取一个字符串值并将其写入文件。我使用了以下代码,但返回了null。请帮忙 制图员 驾驶员等级 使用配置,您只能执行相反的操作。 您可以在驱动程序类中设置值 public int run(String[] args) throws Exception { conf.set("feedName",value); } 设置并在Mapper类中获取这些 public void map(LongWritable key, Text va
使用配置,您只能执行相反的操作。 您可以在驱动程序类中设置值
public int run(String[] args) throws Exception {
conf.set("feedName",value);
}
设置并在Mapper类中获取这些
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
Configuration conf = context.getConfiguration();
String lineVal = conf.get("feedName");
}
更新
您的问题的一个选项是将数据写入文件并将其存储在HDFS中,然后在驱动程序类中访问它们。这些文件可以被视为中间文件
试试看。配置是一种方法。
如果要将非计数器类型的值传递回驱动程序,可以使用HDFS
要么写入主输出上下文键,要么写入作业中发出的值。
或者,如果不想干扰标准作业输出,也可以使用
例如,可以从映射器或还原器将任何类型的特性编写为文本键和文本值
一旦控件返回到驱动程序,只需从HDFS读取即可。例如,您可以将您的名称/值存储到配置对象中,以供序列中的下一个作业使用:
public void load(Configuration targetConf, Path src, FileSystem fs) throws IOException {
InputStream is = fs.open(src);
try {
Properties props = new Properties();
props.load(new InputStreamReader(is, "UTF8"));
for (Map.Entry prop : props.entrySet()) {
String name = (String)prop.getKey();
String value = (String)prop.getValue();
targetConf.set(name, value);
}
} finally {
is.close();
}
}
请注意,如果您有多个映射器或还原器,在其中写入多个输出,那么最终将得到多个{name}-m-或{name}-r-文件
在这种情况下,您需要读取每个输出文件,或者运行一个reducer作业,将输出合并为一个,然后只读取一个文件,如上所示
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
Configuration conf = context.getConfiguration();
String lineVal = conf.get("feedName");
}
public void load(Configuration targetConf, Path src, FileSystem fs) throws IOException {
InputStream is = fs.open(src);
try {
Properties props = new Properties();
props.load(new InputStreamReader(is, "UTF8"));
for (Map.Entry prop : props.entrySet()) {
String name = (String)prop.getKey();
String value = (String)prop.getValue();
targetConf.set(name, value);
}
} finally {
is.close();
}
}