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