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

有人认为Hadoop Map Reduce的级联有用吗?,hadoop,cascading,Hadoop,Cascading,我一直在尝试级联,但我看不出与编写作业的经典map-reduce方法相比有什么优势 Map Reduce jobs给了我更多的自由,层叠似乎给我设置了很多障碍 可能会使简单的事情变得简单,但复杂的事情。。我觉得他们非常难 有什么我不知道的吗。与经典方法相比,级联有明显的优势吗 在什么情况下,我应该选择级联而不是经典方法?有人在用它和快乐吗 级联允许您使用简单的字段名和元组来代替Hadoop提供的基本类型,“…在创建复杂的、高度可组合的代码时,往往处于错误的粒度级别,这些代码可以在不同的开发人员之

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

Map Reduce jobs给了我更多的自由,层叠似乎给我设置了很多障碍

可能会使简单的事情变得简单,但复杂的事情。。我觉得他们非常难

有什么我不知道的吗。与经典方法相比,级联有明显的优势吗


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

级联允许您使用简单的字段名和元组来代替Hadoop提供的基本类型,“…在创建复杂的、高度可组合的代码时,往往处于错误的粒度级别,这些代码可以在不同的开发人员之间共享”(,)。级联就是为了解决这些问题而设计的。请记住,一些应用程序(如级联、Hive、Pig等)是并行开发的,有时也做同样的事情。如果你不喜欢级联或者觉得它令人困惑,也许你最好使用其他东西


我相信您已经有了这个,但这是用户指南:。它为典型的级联应用程序中的数据流提供了一个良好的演示。

请记住,我是级联

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

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

使用原始MapReduce的第一个障碍将是在MapReduce中思考。在MapReduce中,琐碎的问题很简单,但是如果您可以使用一个更容易映射到问题域的模型(过滤这个、解析那个、排序那个、加入其余部分等),那么开发复杂的应用程序就容易多了

接下来,您将认识到Hadoop中的正常工作单元由多个MapReduce作业组成。将作业链接在一起是一个可以解决的问题,但它不应该泄漏到应用程序域级别的代码中,它应该是隐藏和透明的

此外,如果您必须在映射器和还原器之间不断移动函数,您将发现重构和创建可重用代码要困难得多。或者从映射器到上一个reducer以获得优化。这就导致了脆性问题

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

您可以在原始MapReduce代码中通过创建诸如Person或Document之类的域对象来缓解这一问题,但许多应用程序并不需要下游的所有字段。考虑是否需要所有男性的平均年龄。当你只需要一个二元性别和数字年龄时,你不想支付在网络上传递一个人的IO惩罚

有了fail-fast语义和接收器与源的惰性绑定,就可以很容易地在级联上构建框架,从而创建级联流(这成为许多Hadoop MapReduce作业)。我目前参与的一个项目每次运行都有100个MapReduce作业,其中许多是根据正在处理的数据的反馈在运行中创建的。搜索以查看基于Clojure的框架示例,该框架用于简单创建复杂流程。或者对于比Nutch更容易定制的web挖掘工具包和框架

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


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

我使用Cascading和Bixo为大型社交网络编写了完整的反垃圾邮件链接分类管道

级联管道产生了27个MR-jobs,这在普通MR中很难维护。我以前写过MR-jobs,但是使用类似级联的东西感觉就像从汇编程序切换到Java(这里插入fav语言)

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


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

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

  • 很多用于开始工作的样板代码已经为您编写好了
  • 可组合性。通常,当代码作为组件(操作)编写时,代码更易于阅读和重用,这些组件(操作)缝合在一起以执行更复杂的处理
  • 我发现单元测试更容易。casc中有一些例子
    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.