Hadoop Streaming job和常规Java作业有什么区别?与后者相比,使用Hadoop流有什么优势吗?
还有一件事,我正在使用mapreduce API(即新的API),我听说流媒体仅适用于已弃用的mapred API。是吗?
Hadoop流对于开发人员没有太多Java专业知识并且可以更快地用任何脚本语言编写Mapper/Reducer的情况是有利的。
与自定义 jar 作业相比,流式处理作业还具有启动脚本(Python/Ruby/Perl)VM 的额外开销。这会导致大量的进程间通信,导致在大多数情况下作业效率降低。
使用Hadoop流对输入/输出格式有限制。有时您想创建自定义输入/输出格式,使用自定义 jar 将是自然的选择。同样使用Java,人们可以根据自己的需要/选择覆盖/扩展Hadoop的许多功能。
引用这里的答案:
Hadoop do能够处理在其他方面创建的MR作业 语言 - 它被称为流媒体。这个模型只允许我们定义 映射器和化简器具有一些Java中不存在的限制。在 同时 - 输入/输出格式和其他插件必须 编写为 Java 类 所以我将决策定义为 以后:
- 使用 Java,除非您有严重的代码库,否则您需要在 MR 作业中重新处理。
- 当您需要创建一些简单的临时作业时,请考虑使用 python。
至于仅适用于mapred
API 的流式处理,这是没有意义的。虽然使用流映射器/化简器是用另一种语言编写的,所以没有必要担心内部将使用哪个API Hadoop来执行它们。