当我们使用 Streamer jar 运行 hadoop 程序和使用程序的 jar 文件运行它时有什么区别?
5 回答
通常我们有用 java 编写的 Map/Reduce 对..一个将数据集拆分为独立块的映射,以及一个组合结果以执行一些有用分析的 reduce...Hadoop 流是一个实用程序,它允许我们编写 Map/Reduce中的应用程序any language(like Ruby/Python/Bash etc.)
能够使用STDIN(for input)
和STDOUT(for output)
!
你说得对,如果你不使用 Java,你就没有可用的核心 hadoop 功能。像 ChainMapper 和 ChainReducer、ChainedJobs 之类的东西不能通过流媒体获得。此外,由于 Hadoop 是用 Java 编写的,因此使用 Java 会使其更快。
另外,从理论上讲,映射器完成后不会启动减速器。您可能会在 HTML 中看到在输入移动的同时运行的 reducer。
Hadoop Streaming 使我们能够使用任何支持从标准输入读取数据并写入标准输出的编程或脚本语言来编写映射和缩减函数。这个特性使 Hadoop Streaming 非常灵活,可以很容易地被大量用户使用。R、Python、C++ 或几乎任何其他语言。有很多参数可以自定义,比如mapper个数、reducer个数、jvm内存、输入格式、输出格式等。hadoop流作业的默认输入格式是TextInputFormat,读取一行数据一次。
Hadoop API 几乎将您绑定到 Java,但配置和开发更简单,因为一切都可以从 Java 代码本身进行配置。根据我的经验,Java 似乎稍微快一些,但是如果正确配置并使用正确的语言,流式传输可以非常接近。
流媒体的优势:
- Hadoop Streaming 允许您以您喜欢的脚本语言(如 Ruby、Python、Pig 等)提交 Map Reduce 作业。该脚本可以翻译成多个 Map Reduce 作业。你不必学习java。
缺点。
- 与使用 java 的 Hadoop API 实现相比,Hadoop Streaming 脚本的性能较低。原因很明显 - 脚本被转换为多个 Map Reduce 作业,并且作业完成时间非常长,因为必须完成多个作业。
就个人而言,我更喜欢使用Java 编写的客户Partitioner & Combiner的 Hadoop API
如果您使用 java 编程,那么您会定期编译和提交作业。如果您想使用 Python 或 .NET 等其他语言,那么您可以使用这些语言开发程序,并且流 jar 就像一座桥梁,因为这些语言不是原生 hadoop,它是 java
沙赫扎德