【问题标题】:Meaning of context.getconfiguration in hadoophadoop中context.getconfiguration的含义
【发布时间】:2023-03-28 05:18:01
【问题描述】:

我对按参数搜索的代码有这个疑问。

context.getConfiguration().get("Uid2Search");是什么意思

package SearchTxnByArg;

// This is the Mapper Program for SearchTxnByArg
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MyMap extends Mapper<LongWritable, Text, NullWritable, Text>{

        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

            String Txn = value.toString();
            String TxnParts[] = Txn.split(",");
            String Uid = TxnParts[2];
            String Uid2Search = context.getConfiguration().get("Uid2Search");
            if(Uid.equals(Uid2Search))
            {
                context.write(null, value); 
            }           
        }
    }

驱动程序

package SearchTxnByArg;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class MyDriver {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("Uid2Search", args[0]);        
        Job job = new Job(conf, "Map Reduce Search Txn by Arg");
        job.setJarByClass(MyDriver.class);
        job.setMapperClass(MyMap.class);
        job.setMapOutputKeyClass(NullWritable.class);
        job.setMapOutputValueClass(Text.class);
        job.setNumReduceTasks(0);
        FileInputFormat.addInputPath(job, new Path(args[1]));
        FileOutputFormat.setOutputPath(job, new Path(args[2]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }

}

【问题讨论】:

  • 似乎 Uid2Search 是应用程序特定的属性。如果您看到正在执行作业的驱动程序或命令行界面,您将了解这一点。建议您发布此类代码 sn-p 也可以使答案更加清晰。
  • 标记的目的是什么以及如何做到这一点?我不会在堆栈溢出上发布太多内容:D
  • 好的,谢谢您的建议。我会记住这一点的。
  • 我已经这样做了,现在我的声望低于 15。所以,我想我不能做太多的标记

标签: hadoop mapreduce


【解决方案1】:

我不知道您是如何编写驱动程序的。但根据我的经验, 如果您尝试使用命令行中的 -D 选项或 System.setproperty 方法获取系统属性,默认情况下这些值将设置为上下文配置。

配置由资源指定。一个资源包含一个集合 名称/值对作为 XML 数据。每个资源都由一个 字符串或路径。如果以字符串命名,则类路径为 检查具有该名称的文件。如果由 Path 命名,则本地 直接检查文件系统,不参考类路径。

除非显式关闭,Hadoop 默认指定两个 资源,从类路径中按顺序加载: core-default.xml : hadoop 的只读默认值。 core-site.xml:特定于站点 给定 hadoop 安装的配置。应用程序可能会添加 附加资源,在这些资源之后加载 按添加顺序。

Please see this answer as well

上下文对象:允许 Mapper/Reducer 与 Hadoop 系统的其余部分进行交互。它包括作业的配置数据以及允许其发出输出的接口。

应用程序可以使用上下文:

  • 报告进度
  • 设置应用程序级状态消息
  • 更新计数器
  • 表明他们还活着
  • 获取跨 map/reduce 阶段存储在作业配置中的值。

【讨论】:

  • 我也添加了驱动程序。
  • 是的,我是对的!您正在添加这样的输入参数 conf.set("Uid2Search", args[0]);并且使用 context.getConfiguration().get("Uid2Search") 传递的这个参数可用于您的映射器,同样的东西也将可用于 reducer 也使用上下文对象。请注意,Mapper 和 Reducer 是在集群端执行的,因此通过 context.getConguration 您正在传递应用程序特定的参数。在这种情况下,您尝试将此参数与映射器输入记录参数进行比较。希望你明白这一点。
猜你喜欢
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多