【问题标题】:Map/Reduce on a single server在单个服务器上映射/减少
【发布时间】:2011-12-24 18:18:42
【问题描述】:

在非分片架构上做 map/reduce 有意义吗?

或者换句话说,在单个服务器上做是否有效。

【问题讨论】:

    标签: architecture mapreduce sharding


    【解决方案1】:

    对于 MapReduce,我认为您的意思是 Hadoop。还有其他支持 MapReduce 范式的语言和框架。这是我对 Hadoop 的看法。

    单台服务器上的 Hadoop 适合用于测试目的(stand alonepseudo-distributed modes)。

    当 Hadoop 在单个服务器上运行时,容错等固有特性会丢失,因为如果服务器出现故障,那么与服务器相关的所有数据都会丢失。另外,当数据量少,计算量少时,Hadoop相对于实际处理的开销会很大。

    如果选择单台服务器,最好不要选择 Hadoop(专为分布式计算而设计)。

    【讨论】:

    • 来自 Microsoft 的 document 在相同的上下文中。
    【解决方案2】:

    总的来说,我不同意 Praveen。

    是的,我同意在单个系统上运行时,您会失去平台的容错特性。但是,在许多情况下,平台具有用于特定目的的有用属性。

    在很多情况下,使用 Hadoop 工具包比不使用 Hadoop 更有优势。

    1. 您无需担心输入文件的大小。如果您的输入数据很多 GiB,那么您仍然可以在只有 512MiB 可用系统 RAM 的系统上运行它。
    2. 使用该平台,您可以使您的数据处理应用程序运行多线程,而无需深入创建线程。您只需将应用部署在平台的不同实例上即可。
    3. 您可以敞开大门,在多个系统上进行横向扩展。当您的应用程序达到该级别时,迈向真正水平可扩展性的步骤就非常简单了。

    当您使用 Hadoop 编写处理应用程序时,您有几个运行它的选项:

    1. 使用本地文件系统在单个机器上进行单线程。这样,它只是一个将输入转换为输出的命令行 Java 应用程序。
    2. 仅使用本地文件系统在单个机器上设置 jobtracker/tasktracker。有关更多信息,请参阅此 stackoverflow 问题:Is it possible to run Hadoop in Pseudo-Distributed operation without HDFS?
    3. 在单个系统上完全成熟(pseudo-distributed 模式)。
    4. 完整的多系统设置。

    【讨论】:

    • 您不同意哪一点?原始查询是Does it make sense to do map/reduce on a non sharded architecture ? .... on a single server,没有进一步扩展它的意义。直截了当,由于开销,Hadoop 在单个机器上是一种过度杀伤力。 Hadoop 就像一个电钻,用于具有非分片架构的单个盒子。在我的笔记本电脑上,对于相同的功能,在伪分布式模式下,简单的 grep 比 Hadoop 快 5-10 倍。我不认为调整它会使它变得更好。 Hadoop 的学习曲线也很陡峭。
    • Hadoop 在单个系统上运行时会产生开销。然而,即使仅在单个系统上运行,它也可以轻松处理更大的数据集。所以我不同意你在单个服务器上运行时不使用 Hadoop 的结论。我已经发布了几个论据来支持这一观点。
    • 对于大型数据集,磁盘读取速度将成为工作的瓶颈(服务器上的多个主轴会在一定程度上有所帮助)。这就是 Hadoop 中数据分布在 1 个以上节点上的原因之一。此外,还有很多 IPC(JobTracker TaskTracker 和 NameNode DataNode)。这是一个需要长时间讨论的话题,但我仍然不同意单服务器上的 Hadoop 值得付出努力。
    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2012-06-04
    • 2016-01-22
    相关资源
    最近更新 更多