Hadoop如何在DataNode上运行java reduce函数

时间:2016-01-18 02:10:56

标签: java hadoop hdfs file-transfer

我对hadoop集群中的Datanode如何为作业的reduce函数运行java代码感到困惑。比如,hadoop如何将java代码发送到另一台计算机来执行?

  • Hadoop是否会向节点注入java代码?如果是这样,那么java代码位于hadoop?
  • 还是主节点上运行的reduce函数而不是datanode?

帮助我跟踪此代码,其中主节点将reduce函数的java代码发送到datanode。

2 个答案:

答案 0 :(得分:1)

如图所示,这是发生的事情:

  • 使用hadoop jar命令在客户端上运行作业,在该命令中传递jar文件名,类名和其他参数,例如输入和输出
  • 客户端将获得新的应用程序ID,然后它将jar文件和其他作业资源复制到具有高复制因子的HDFS(在大型集群上默认为10)
  • 然后客户端将实际通过资源管理器
  • 提交申请
  • 资源管理器跟踪集群利用率并提交应用程序主机(协调作业执行)
  • 应用程序主机将与namenode通信并确定输入块的位置,然后使用nodemanagers提交任务(以容器的形式)
  • 容器只是JVM,它们运行map和reduce任务(mapper和reducer类),当JVM被引导时,HDFS上的作业资源将被复制到JVM。对于映射器,这些JVM将在存在数据的相同节点上创建。处理开始后,将执行jar文件以在该机器上本地处理数据(典型值)。
  • 要回答您的问题,reducer将作为容器的一部分在一个或多个数据节点上运行。 Java代码将作为引导过程的一部分进行复制(创建JVM时)。数据将通过网络从地图制作者处获取。

Anatomy of map reduce job using YARN

答案 1 :(得分:0)

没有。减少功能在数据节点上执行。 Hadoop将打包的代码(jar文件)传输到将要处理数据的数据节点。在运行时数据节点下载这些代码并处理任务。