使用java编写mapreduce中自定义的map类时,为什么会执行父类的run()方法?
自定义了一个mapreduce程序,分别重写了map和reduce方法,调试的时候为什么会执行父类的run方法等?


使用java编写mapreduce中自定义的map类时,为什么会执行父类的run()方法?
自定义了一个mapreduce程序,分别重写了map和reduce方法,调试的时候为什么会执行父类的run方法等?


以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
在Java的MapReduce编程模型中,Mapper类通常会继承自Hadoop的Mapper基类。这个基类提供了MapReduce任务的基本框架,包括run()方法。当你在自定义的Mapper类中重写map()方法时,如果没有重写run()方法,那么默认的run()方法会被执行。这就是为什么你在调试时可能会看到父类的run()方法被执行的原因。
Hadoop的Mapper类的run()方法的主要作用是设置和清理Mapper任务的环境。它首先调用setup()方法进行一些初始化工作,然后在一个循环中调用nextKeyValue()以获取输入键值对,并调用map()方法进行实际的映射操作。在所有的映射操作完成后,它会调用cleanup()方法进行清理工作。
在你的例子中,你的自定义WordCountMapper类继承了Mapper类并重写了map()方法。当你运行这个Mapper任务时,Hadoop会调用你的自定义WordCountMapper类的run()方法(如果你没有重写这个方法的话)。在run()方法的执行过程中,它会调用你重写的map()方法处理每一对输入键值。
如果你在调试时看到了父类的run()方法被执行,那可能是因为你并没有重写run()方法,或者你在其他地方的代码中直接或间接地调用了父类的run()方法。但是通常情况下,你只需要重写map()方法,而不需要重写run()方法。如果你在自定义的Mapper类中只重写了map()方法而没有其他代码,那么只会执行你重写的map()方法,不会执行父类的run()方法。