我从几篇文章中听说,使用bash的Hadoop streaming比编译的代码或python慢得多。这只适用于排序命令和类似命令吗?我的脚本需要
-copy文件到节点-on节点以文件作为参数执行商业程序-pass输出返回到文件夹
我的直觉告诉我,这应该是一个类似于编译版本的速度。会是这样吗?
发布于 2015-01-23 22:50:07
Hadoop流被认为很慢的主要原因是,对于mapper和reducer,您都必须通过stdin传递参数,这意味着您必须将它们序列化为文本,并且为了获得mapper和reducer的输出,您必须将它们从文本反序列化为Java结构,这通常会消耗大量时间。
如果您有一个第三方编译的应用程序,能够从stdin读取输入数据并将数据传递给stdout,那么您没有太多的选择,只能在Hadoop Streaming或Spark管道中运行它。但是,原生mapreduce应用程序当然会更快,因为它在将数据传递给应用程序时消除了数据序列化/反序列化的需要
但是,如果您的应用程序只是接受文件名并自行读取文件(例如,从NFS读取),那么它的速度将与原生应用程序相同,但是您当然应该考虑到,这种类型的使用既不适用于Hadoop,也不适用于Spark --开发这些框架是为了使用它们提供的API来处理数据
https://stackoverflow.com/questions/28101995
复制相似问题