【问题标题】:Hadoop streaming with Bash - how slow?使用 Bash 的 Hadoop 流式传输 - 有多慢?
【发布时间】:2015-01-23 02:12:21
【问题描述】:

我从几篇文章中听说,使用 bash 进行 Hadoop 流式传输比编译代码或 python 慢得多。这仅适用于排序命令等吗?我的脚本需要

- 复制文件到节点 -on node 以文件为参数执行商业程序 - 将输出传回文件夹

我的直觉告诉我,这应该与编译版本的速度相似。会吗?

【问题讨论】:

    标签: python bash hadoop mapreduce apache-spark


    【解决方案1】:

    Hadoop Streaming 被认为很慢的主要原因是,对于 mapper 和 reducer,您必须通过 stdin 传递参数,这意味着您必须将它们序列化为文本,并获取 mapper 和 reducer 的输出您必须将它们从文本反序列化回 Java 结构,这通常会耗费大量时间。

    如果您有第三方编译的应用程序,它能够从标准输入读取输入数据并将数据传递到标准输出,您别无选择,只能在 Hadoop 流式传输或 Spark 管道中运行它。当然,原生 mapreduce 应用程序应用程序会更快,因为它将消除将数据序列化/反序列化传递给应用程序的需要

    但是,如果您的应用程序只接受文件名并自行读取文件(例如从 NFS),它的速度将与原生应用程序相同,但您当然应该考虑这种类型的使用不是Hadoop 和 Spark 都不是这样——开发这些框架是为了使用它们提供的 API 处理数据

    【讨论】:

    • 由于代表无法投票,但感谢您的回复!这对我来说很有意义。我知道这不是 hadoop 本来打算处理的工作类型,但我需要一个平台来在谷歌云上启用并行计算,而 hadoop 似乎是最好的选择。
    • 如果您的情况是将文件名传递给已编译的应用程序,您可以尝试制作自己的输入格式,这将为每个文件名提供单独的输入拆分,这样每个任务都要处理单个文件将单独安排并在失败时重新启动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多