代码之家  ›  专栏  ›  技术社区  ›  Federico

有人认为Hadoop的级联映射Reduce有用吗?

  •  19
  • Federico  · 技术社区  · 16 年前

    我一直在尝试级联,但是我看不出与用于编写作业的经典map-reduce方法相比有什么优势。

    把简单的事情做得简单,但把复杂的事情做得复杂。。我觉得他们非常难

    在什么情况下,我应该选择级联而不是经典方法?有人用它高兴吗?

    8 回复  |  直到 16 年前
        1
  •  25
  •   Marc    16 年前

    我已经使用级联技术好几年了。我觉得这非常有帮助。归根结底,这关乎生产率的提高。与普通java代码相比,我可以更有效地创建和维护M/R作业。原因如下:

    • 很多用于开始工作的样板代码已经为您编写好了。
    • 可组合性。一般来说,当代码作为组件(操作)编写时,代码更易于阅读和重用,这些组件(操作)被缝合在一起以执行一些更复杂的处理。
    • Tap(source and sink)范例使更改作业的输入和输出变得很容易,因此,例如,您可以从STDOUT的输出开始进行开发和调试,然后切换到HDFS sequencefiles进行批处理作业,然后切换到HBase Tap进行伪实时更新。

    虽然有很多预构建的组件可以组合在一起,但是如果处理逻辑的某个特定部分似乎更容易用纯Java编写,那么您可以创建一个级联函数来包装它。这允许您获得级联的好处,但是非常定制的操作可以编写为直接的java函数(实现级联接口)。

        2
  •  51
  •   cwensel    16 年前

    记住我是级联的作者。。。

    我的建议是使用猪或蜂箱,如果他们对你的问题有意义,尤其是猪。

    但是,如果您从事的是数据业务,而不仅仅是在数据周围寻找见解,您会发现级联方法对于大多数问题来说比原始MapReduce更有意义。

    此外,如果必须在映射器和还原器之间不断移动函数,那么重构和创建可重用代码将变得更加困难。或者从映射器到以前的缩减器来获得优化。这就导致了脆性的问题。

    级联相信尽可能快地失败。在Hadoop集群开始工作之前,规划器会尝试解析并满足所有这些字段名之间的依赖关系。这意味着90%以上的问题会在等待作业在执行期间找到之前被发现。

    Cascalog 查看一个基于Clojure的框架示例,该框架用于简单地创建复杂的流程。或者 Bixo 对于一个比Nutch更容易定制的web挖掘工具包和框架来说。

    最后,Hadoop永远不会单独使用,这意味着您的数据总是从某个外部源提取,并在处理后推送到另一个源。Hadoop的秘密在于它是一个非常有效的ETL框架(因此,听到ETL供应商谈论使用他们的工具将数据推送到Hadoop或从Hadoop拉入数据是愚蠢的)。级联允许您独立于集成端点编写操作、应用程序和单元测试,从而在一定程度上减轻了这种痛苦。级联在生产中用于加载系统,如Membase、Memcached、Aster Data、Elastic Search、HBase、Hypertable、Cassandra等(不幸的是,并非所有的适配器都是由作者发布的)

    如果你愿意的话,请给我一份你在界面上遇到的问题列表。我一直在寻找更好的方法来改进API和文档,用户社区也一直在提供帮助。

        3
  •  6
  •   Erich Nachbar    16 年前

    我使用Bixo级联来为一个大型社交网络编写完整的反垃圾邮件链接分类管道。

    与蜂巢或猪IMHO相比的一大优势是级联是一个单独的jar,您可以将其与您的工作捆绑在一起。Pig和Hive有更多的依赖关系(例如MySQL),或者没有那么容易嵌入。

    免责声明: 虽然我认识克里斯·温塞尔,但我真的认为层叠是一个好主意。考虑到它的复杂性,令人印象深刻的是,我还没有发现一个bug使用它。

        4
  •  6
  •   kkrugler    16 年前

    我在级联中看到的最大优势是,它允许您从字段操作的角度考虑数据处理工作流,并且(大部分)避免担心如何将这种世界视图转换到键/值模型上,而键/值模型本质上是任何map reduce实现的一部分。

    层叠的最大挑战是,它是一种不同的数据处理工作流的思考方式,在一切开始变得有意义之前,您需要克服相应的概念“驼峰”。另外,错误消息可以提醒lex/yacc的一个输出(“shift/reduce中的冲突”):)

    --肯

        5
  •  2
  •   Ted Dunning    16 年前

    我认为Cascading的优势开始显现出来的地方是这样一个例子:您有一堆简单的函数,这些函数在源代码中应该保持独立,但它们都可以被收集到映射器或reducer中的一个组合中。把它们放在一起会让你的基本地图减少代码的可读性,把它们分开会让程序非常慢。级联的优化器可以将它们放在一起,即使您单独编写它们。Pig和Hive在某种程度上也可以做到这一点,但是对于大型程序,我认为级联有一个可维护性优势。

    几个月后,flume可能会成为表现力的竞争对手,但如果您有真正的程序要在生产环境中编写和运行,那么级联可能是您的最佳选择。

        6
  •  1
  •   sholsapp    16 年前

    级联允许您使用简单的字段名和元组来代替Hadoop提供的基本类型, "... 对于创建复杂的、高度可组合的、可在不同开发人员之间共享的代码来说,往往处于错误的粒度级别” ( Tom White , Hadoop The Definitive Guide

    我相信你已经有了这个,但这是用户指南: http://www.cascading.org/1.1/userguide/pdf/userguide.pdf . 它为典型的级联应用程序中的数据流提供了一个良好的遍历。

        7
  •  1
  •   Balaswamy Vaddeman    11 年前

    我在级联上工作了几年,下面是 useful things in cascading

    1. code testability
    2. easy integration with other tools
    3. easily extensibile
    4. you will focus only on business logic not on keys and values
    5. proven in production and used by even twitter.
    

        8
  •  0
  •   Ravindranath Akila    11 年前

    层叠是围绕Hadoop的包装器,它提供与Hadoop之间的连接和接收。

    为所有任务编写映射器和缩减器将是乏味的。尝试编写一个级联作业,然后就可以避免编写任何映射器和缩减器。

    有了这两种能力,即避免编写带有缩减器的特殊Hadoop映射器的能力和使用各种数据源的能力,您可以非常快速有效地解决许多数据处理问题。

    级联不仅仅是一个简单的hadoop包装器,我试图保持简单的答案。例如,我使用级联jdbc tap将一个包含数TB数据的大型mysql数据库移植到日志文件中

    推荐文章