Hadoop Streaming 任务和常规 Java 任务有什么区别?使用 Hadoop Streaming 与使用后者相比是否有优势? 另外,我正在使用 MapReduce API(即新 API),我听说流处理只能通过已弃用的 MapRed API 使用。是这样吗?
Hadoop流处理在开发人员不熟悉Java且能够更快地使用任何脚本语言编写Mapper/Reducer时非常有优势。与自定义jar作业相比,流处理作业还需要启动一个脚本(Python/Ruby/Perl)虚拟机的额外开销。这导致了大量的进程间通信,在大多数情况下会降低作业的效率。使用Hadoop流处理会对输入/输出格式产生限制。有时您想要创建自定义输入/输出格式,使用自定义jar将是自然的选择。此外,使用Java可以重写/扩展许多hadoop的功能以满足自己的需求/选择。引用来自这里的回答:Hadoop确实具有使用其他语言创建的MR作业的能力-称为流处理。该模型仅允许我们定义具有一些Java中不存在的某些限制的mapper和reducer。同时,输入/输出格式和其他插件必须编写为Java类。因此,我将决策制定如下:除非您需要重复使用MR作业中的严重代码库,否则请使用Java。当您需要创建一些简单的即席作业时,请考虑使用python。至于流处理仅适用于mapred API,这是没有意义的。在使用流处理时,mapper/reducer是用另一种语言编写的,因此不必担心hadoop内部将使用哪个API来执行它们。