Java 为什么Hadoop mapper和reducer采用类名而不是对象?
我刚刚开始使用Hadoop,我看到在Java 为什么Hadoop mapper和reducer采用类名而不是对象?,java,hadoop,Java,Hadoop,我刚刚开始使用Hadoop,我看到在job.set*()中设置映射器、还原器和其他任何东西时,它总是要求输入类名。为什么不是那个类的对象 我相信这一定是有原因的。有人愿意提及原因吗?正如您所观察到的,Hadoop中的作业是由map reduce框架以分布式方式执行的 因此,实际作业将通过将工作划分为多个映射器和约简器来执行,其中每个映射/约简作业实际上是一个Java进程,将由集群中许多随机节点上的任务容器执行 我们在作业配置中提到的设置只是有关作业的规范。根据此设置,将在随机JVM任务容器上创建
job.set*()
中设置映射器、还原器和其他任何东西时,它总是要求输入类名。为什么不是那个类的对象
我相信这一定是有原因的。有人愿意提及原因吗?正如您所观察到的,Hadoop中的作业是由map reduce框架以分布式方式执行的 因此,实际作业将通过将工作划分为多个映射器和约简器来执行,其中每个映射/约简作业实际上是一个Java进程,将由集群中许多随机节点上的任务容器执行 我们在作业配置中提到的设置只是有关作业的规范。根据此设置,将在随机JVM任务容器上创建所需的Mapper/Reducer实例 将实例化的map/reduce对象从作业配置传递到每个分布式节点的任务容器(实际的map/reduce任务将在其中执行)是没有效率的,相反,可以根据作业设置在容器上按需创建此类实例
希望这能有所帮助。正如您可能观察到的,Hadoop中的作业是通过map reduce框架以分布式方式执行的 因此,实际作业将通过将工作划分为多个映射器和约简器来执行,其中每个映射/约简作业实际上是一个Java进程,将由集群中许多随机节点上的任务容器执行 我们在作业配置中提到的设置只是有关作业的规范。根据此设置,将在随机JVM任务容器上创建所需的Mapper/Reducer实例 将实例化的map/reduce对象从作业配置传递到每个分布式节点的任务容器(实际的map/reduce任务将在其中执行)是没有效率的,相反,可以根据作业设置在容器上按需创建此类实例
希望这能有所帮助。根据你的问题,我推测你正在寻找一个你看不见的物体 在本例中,您正在查找
MAPPER对象
,但在程序中的任何位置都没有找到NEW
关键字
总而言之。A.class
如何转换为A=newa()代码>?为什么?
简单地说,如果没有java或hadoop中的对象,您无法做任何事情
因此,将为所述类创建后台对象以执行程序。在高层,我们可以说这个机制内置于hadoop中,用于根据需要创建对象
在更高的层次上,他们使用JAVA反射API
在后台无缝地完成这些操作
为什么需要这样做?--<代码>原因
因为我们不知道以下问题的实时答案:
需要多少(总数)对象?
和
何时(程序中的执行时间)需要它们?
我们需要依赖一个更高端的API,比如反射来在运行时处理它们
HADOOP使用的反射API负责根据时间需要为输入类提供对象
希望这能澄清 根据你的问题,我认为你在寻找一个你看不见的物体
在本例中,您正在查找MAPPER对象
,但在程序中的任何位置都没有找到NEW
关键字
总而言之。A.class
如何转换为A=newa()代码>?为什么?
简单地说,如果没有java或hadoop中的对象,您无法做任何事情
因此,将为所述类创建后台对象以执行程序。在高层,我们可以说这个机制内置于hadoop中,用于根据需要创建对象
在更高的层次上,他们使用JAVA反射API
在后台无缝地完成这些操作
为什么需要这样做?--<代码>原因
因为我们不知道以下问题的实时答案:
文件大小是多少<代码>地图绘制者的数量
基于此信息
有多少个输入拆分(某些对象基于此)
输入和输出有多少个键/值对(这里还有一些对象)
映射器/还原器/等(其他X.class输入和相关对象)
我们不知道
需要多少(总数)对象?
和
何时(程序中的执行时间)需要它们?
我们需要依赖一个更高端的API,比如反射来在运行时处理它们
HADOOP使用的反射API负责根据时间需要为输入类提供对象
希望这能澄清 不错。我也在想原因。很好。我也在想原因。