Hadoop API与Hadoop Streaming的区别

4
用 Streamer Jar 运行 Hadoop 程序和使用程序的 Jar 文件运行有什么区别?
5个回答

5
通常我们会用Java编写Map/Reduce程序,其中Map将数据集拆分为独立的块,而Reduce则将结果组合起来执行一些有用的分析。Hadoop Streaming是一个实用工具,它允许我们使用任何语言(如Ruby/Python/Bash等)编写Map/Reduce应用程序,只要该语言能够处理STDIN(用于输入)和STDOUT(用于输出)即可!

是的,我已经完成了。但我的问题是有什么区别。比如我发现用Java MapReduce可以使用内置的Map和Reduce类,但是当我使用PHP与Streamer时,我没有使用它。 - CodeBanger
主要的好处是程序不需要了解Java也能使用Hadoop,因为有Hadoop Streaming。 - Abhishek bhutra
但我担心如果我使用除Java以外的其他语言,那么我将无法使用核心Hadoop函数。我寻找了PHP Thrift客户端,但链接已失效,刚刚我发现PHP需要更多时间。在Java中,当映射开始时,相应的缩小开始,但在PHP中,当映射完成时,缩小开始。如果您可以为我提供PHP Thrift客户端,那将非常有帮助。 - CodeBanger
这个链接可能对你有帮助:https://github.com/tomwhite/hadoop-book/tree/master/ch02-mr-intro/src/main - Ravindra babu

0
Hadoop Streaming 可以让我们使用任何支持从标准输入读取数据和写入标准输出的编程或脚本语言来编写映射和归约函数。这个特性使得 Hadoop Streaming 非常灵活,可以被大量用户轻松使用,例如 R、Python、C++ 或者其他任何语言。此外,有很多参数可以自定义,比如 mapper 数量、reducer 数量、jvm 内存、输入格式、输出格式等等。对于 Hadoop Streaming 作业来说,默认的输入格式是 TextInputFormat,它会逐行读取数据。
Hadoop API 几乎只能绑定在 Java 上,但配置和开发更加直观,因为所有东西都可以从 Java 代码本身进行配置。根据我的经验,Java 似乎稍微快一些,但是如果正确配置并与合适的语言一起使用,流处理也可以非常接近。

0
如果你正在使用Java进行编程,那么你需要经常编译和提交作业。如果你想使用其他语言,比如Python或.NET,那么你可以用这些语言开发程序,而流式JAR就像一座桥梁,因为这些语言不是Hadoop的本地语言,而Hadoop是Java编写的。
Shahzad

0

流式处理的优点:

  1. Hadoop Streaming允许您使用您喜欢的脚本语言(如Ruby、Python、Pig等)提交Map reduce作业。该脚本可以被翻译成多个Map Reduce作业。您不必学习Java。

缺点:

  1. 与使用Java实现的Hadoop API相比,Hadoop Streaming脚本的性能较低。原因很明显-脚本被翻译成多个Map Reduce作业,因此作业完成时间非常长,需要完成多个作业。

就个人而言,我更喜欢使用Java编写的Hadoop API和自定义Partitioner & Combiner


0

你说得对,如果不使用Java,就无法使用核心的Hadoop功能。像ChainMapper和ChainReducer、ChainedJobs等这些东西在流式处理中是不可用的。此外,由于Hadoop是用Java编写的,因此使用Java会使它更快。

另外,理论上,在Mapper完成后没有Reducer开始运行。你可能会在HTML中看到Reducer同时运行,而它的输入正在移动。


再次感谢。但是看起来我现在必须离开这个论坛,因为我已经被封禁了。不知道是什么原因。 - CodeBanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接