Hadoop 在mapper中设置conf值-在run方法中获取它

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

在Driver类的run方法中,我想从mapper函数中获取一个字符串值并将其写入文件。我使用了以下代码,但返回了null。请帮忙

制图员

驾驶员等级


使用配置,您只能执行相反的操作。 您可以在驱动程序类中设置值

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();
        }
    }