Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop映射器上下文对象_Hadoop - Fatal编程技术网

Hadoop映射器上下文对象

Hadoop映射器上下文对象,hadoop,Hadoop,Hadoop框架如何调用mapper或reducer类的run()方法?框架正在调用run()方法,但它需要一个上下文对象,那么Hadoop如何传递该对象呢?该对象中包含哪些信息?是的,当运行映射任务尝试时,MR框架调用映射器的run()方法。就上下文而言,请看一下的文档,特别是实现的接口及其Javadoc,它们为您提供了上下文中包含的信息的完整概述。通过上下文,您可以访问以下数据: 作业信息(作业配置、映射器/还原器类名称、作业名称、工作目录) 当前执行的任务尝试的状态 当前键、值、输入拆分

Hadoop框架如何调用mapper或reducer类的
run()
方法?框架正在调用
run()
方法,但它需要一个上下文对象,那么Hadoop如何传递该对象呢?该对象中包含哪些信息?

是的,当运行映射任务尝试时,MR框架调用映射器的
run()
方法。就上下文而言,请看一下的文档,特别是实现的接口及其Javadoc,它们为您提供了上下文中包含的信息的完整概述。通过上下文,您可以访问以下数据:

  • 作业信息(作业配置、映射器/还原器类名称、作业名称、工作目录)
  • 当前执行的任务尝试的状态
  • 当前键、值、输入拆分(映射任务特定信息)
当然,对于Reducer也存在类似的上下文对象:。

将使用Java运行时多态性(即方法重写)调用run()方法。正如您在下面的链接中看到的第569行,扩展映射器/还原器将使用Java反射API进行实例化。MapTask类从作业配置对象获取扩展映射器/还原器的名称,客户端程序将使用
Job.setMapperClass()

以下代码取自

行#621是运行时多态性的一个示例。在这一行中,MapTask调用配置的mapper的run()方法,参数为“mapper Context”。如果run()未扩展,它将调用
org.apache.hadoop.mapreduce.Mapper
上的run()方法,该方法将再次调用已配置映射器上的map()方法

在上面链接的第616行,MapTask创建了包含@harpun提到的作业配置等所有细节的上下文对象,然后传递到第621行的run()方法


上述解释适用于reduce任务,适当的ReduceTask类是主入口类。

感谢niranjan,你能解释一下在运行任何简单作业时所有hadoop框架类都执行了什么吗?这不是一个简单的答案。涉及到很多hadoop框架类,它们实际上是在调用扩展类之前执行整个软件层。我建议下载hadoop源代码并将其附加到您的IDE,然后调试任何作业,以了解调用堆栈中使用的高级类。@NiranjanSarvi,您能告诉我MapTask类如何创建另一个类的对象,即上下文类吗?MapTask类和Context类之间是否存在任何关系,因为库中的Context类是一个抽象类,甚至不是由MapTask类实现的?它是从其他方面来的吗?
mapperContext = contextConstructor.newInstance(mapper, job, getTaskID(),
                                                  input, output, committer,
                                                  reporter, split);

   input.initialize(split, mapperContext);
   mapper.run(mapperContext);
   input.close();`