Hadoop Streaming工作还是常规工作?

Tom*_*ian 4 java hadoop mapreduce

Hadoop Streaming作业和常规Java作业之间有什么区别?与后者相比,使用Hadoop流媒体有什么优势?

还有一件事,我正在使用mapreduce API(即新API),并且听说流仅适用于已弃用的mapred API。是吗 ?

Ama*_*mar 6

Hadoop流在开发人员没有太多Java知识并且可以用任何脚本语言更快地编写Mapper / Reducer的情况下具有优势。

与自定义jar作业相比,流作业还具有启动脚本(Python / Ruby / Perl)VM的额外开销。这导致大量的进程间通信,从而导致大多数情况下作业效率降低。

使用Hadoop流将带来对输入/输出格式的限制。有时候您想创建自定义输入/输出格式,使用自定义jars是很自然的选择。同样使用Java可以超越/扩展hadoop的许多功能,以满足人们的需求/选择。

在这里引用答案:

Hadoop确实具有处理以其他语言创建的MR作业的能力-这称为流。该模型仅允许我们定义具有Java中不存在的一些限制的mapper和reducer。同时-输入/输出格式和其他插件确实必须编写为Java类,因此我将决策定义如下:

  • 使用Java,除非您拥有认真的代码库,否则您需要在MR工作中继续工作。
  • 当您需要创建一些简单的临时作业时,请考虑使用python。

至于仅适用于mapredAPI的流媒体,这没有任何意义。在使用流式映射器/缩减器时,是用另一种语言编写的,因此不必担心内部将使用哪个API hadoop来执行它们。