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