我一直在尝试级联,但是我没有看到任何优于经典地图缩减方法来写作业。
Map Reduce工作给了我更多自由,Cascading似乎带来了很多障碍。
可以做好简单的事情,但复杂的事情......我发现它们非常难以
有什么东西我不见了。 Cascading是否有明显优于传统方法的优势?
在什么情况下我应该选择级联经典方法?任何人使用它并且开心吗?
答案 0 :(得分:51)
请记住我是Cascading的作者......
我的建议是使用Pig或Hive,如果它们对你的问题有意义,尤其是Pig。
但是,如果您从事数据业务,而不仅仅是寻找数据以获得洞察力,那么您会发现级联方法对于大多数问题比原始MapReduce更有意义。
使用原始MapReduce的第一个障碍是在MapReduce中思考。 MapReduce中的琐碎问题很简单,但是如果你可以使用更容易映射到你的问题域的模型,那么开发复杂的应用程序要容易得多(过滤它,解析那些,加入其余的等等)。
接下来,您将意识到Hadoop中的正常工作单元包含多个MapReduce作业。将作业链接在一起是一个可解决的问题,但它不应泄漏到您的应用程序域级代码中,它应该是隐藏的和透明的。
此外,如果必须在映射器和缩减器之间不断移动函数,您会发现重构和创建可重用代码要困难得多。或者从映射器到前一个reducer进行优化。这导致了脆弱的问题。
Cascading相信尽快失败。在Hadoop集群甚至参与工作之前,规划器尝试解析并满足所有这些字段名称之间的依赖关系。这意味着在等待工作的几个小时之前,将找到90%以上的所有问题,以便在执行期间找到它。
您可以通过创建Person或Document等域对象来缓解原始MapReduce代码中的这种情况,但许多应用程序不需要下游的所有字段。考虑一下你是否需要所有男性的平均年龄。当您只需要二元性别和数字年龄时,您不希望支付在整个网络中传递整个人的IO惩罚。
随着快速语义失败以及接收器和源的延迟绑定,在Cascading上构建框架变得非常容易,这些框架本身会创建级联流(这将成为许多Hadoop MapReduce作业)。我目前参与的项目每次运行最终会有100个MapReduce作业,其中许多是根据正在处理的数据的反馈在运行中创建的。搜索Cascalog以查看基于Clojure的框架示例,以简单地创建复杂流程。或者Bixo用于Web挖掘工具包和框架,它比Nutch更容易定制。
最后,Hadoop永远不会单独使用,这意味着您的数据总是从某些外部源提取并在处理后推送到另一个外部源。关于Hadoop的一个肮脏的秘密是它是一个非常有效的ETL框架(所以听到ETL供应商谈论使用他们的工具向/从Hadoop推送/拉取数据是愚蠢的)。级联允许您编写独立于集成端点的操作,应用程序和单元测试,从而减轻了这种痛苦。级联在生产中用于加载系统,如Membase,Memcached,Aster Data,Elastic Search,HBase,Hypertable,Cassandra等(不幸的是并非所有适配器都已由作者发布。)
如果您愿意,请通过界面向我发送您遇到的问题列表。我一直在寻找更好的方法来改进API和文档,用户社区总是在帮助。
答案 1 :(得分:25)
我已经使用Cascading几年了。我觉得它非常有帮助。最终,这是关于生产力的提升。与普通的Java代码相比,我在创建和维护M / R作业方面更有效率。以下是几个原因:
虽然有很多预先构建的组件可以组合在一起,但如果处理逻辑的某个特定部分看起来更容易直接用Java编写,那么你总是可以创建一个级联函数来包装它。这使您可以获得Cascading的好处,但非常自定义的操作可以编写为直接的java函数(实现级联接口)。
答案 2 :(得分:6)
我使用Cascading with Bixo为大型社交网络编写完整的反垃圾邮件链接分类管道。
级联管道导致27个MR作业,这在普通MR中很难维护。我以前写过MR作业,但是使用像Cascading这样的东西感觉就像从Assembler切换到Java(insert_fav_language_here)。
Hive或Pig恕我直言的一大优势是Cascading是一个罐子,你可以捆绑你的工作。 Pig和Hive有更多的依赖关系(例如MySQL)或者不容易嵌入。
免责声明:虽然我个人认识Chris Wensel,但我认为Cascading是一个**。考虑到它的复杂性,令人印象深刻的是我没有找到使用它的单个bug。
答案 3 :(得分:6)
我为Scale Unlimited教授Hadoop Boot Camp课程,并在Bixo Labs中广泛使用Cascading以及在Bixo Labs构建Web挖掘应用程序 - 所以我认为我对这两种方法都有很好的认识。
我在Cascading中看到的最大的单一优势是,它允许您根据字段操作来考虑您的数据处理工作流程,并且(主要)避免担心如何将此世界视图转换为密钥/价值模型,它本质上是任何map-reduce实现的一部分。
Cascading面临的最大挑战是它是一种不同的思考数据处理工作流程的方式,并且在它开始有意义之前,你需要克服相应的概念“驼峰”。另外,错误消息可以提醒lex / yacc的输出之一(“shift / reduce中的冲突”):)
- 肯
答案 4 :(得分:2)
我认为Cascading的优势开始显示的地方是你有一堆简单的函数,这些函数应该在源代码中保持独立,但是这些函数都可以收集到mapper或reducer中的一个组合中。将它们放在一起会使您的基本map-reduce代码难以阅读,将它们分开会使程序变得非常慢。即使您单独编写,Cascading的优化器也可以将它们组合在一起。猪和Hive在某种程度上也可以做到这一点,但对于大型程序,我认为Cascading具有可维护性优势。
在几个月内,Plume可能是一个富有表现力的竞争者,但如果你有真正的程序可以在生产环境中编写和运行,那么Cascading可能是你最好的选择。
答案 5 :(得分:1)
Cascading允许您使用简单的字段名称和元组来代替Hadoop提供的基本类型,“...往往处于错误的粒度级别,以创建复杂的,高度可组合的代码,在不同开发者之间共享“(Tom White,Hadoop The Definitive Guide)。级联旨在解决这些问题。请记住,Cascading,Hive,Pig等一些应用程序是并行开发的,有时会做同样的事情。如果你不喜欢Cascading或者让它感到困惑,也许你会更好地使用其他东西?
我相信你已经有了这个,但这里是用户指南:http://www.cascading.org/1.1/userguide/pdf/userguide.pdf。它为典型的级联应用程序中的数据流提供了一个体面的步骤。
答案 6 :(得分:1)
我在级联上工作了几年,其中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.
我建议人们大多数时候都使用级联。
答案 7 :(得分:0)
Cascading是Hadoop的包装器,可以在Hadoop之间提供Taps和Sink。
为所有任务编写Mapper和Reducers将会很乏味。尝试编写一个级联作业,然后你就可以避免编写任何映射器和缩减器。
您还想查看级联点击和方案(这是您将数据输入到级联处理作业中的方式)。
有了这两个,即能够避免使用Reducers编写ad-hoc Hadoop Mappers并能够使用各种数据源,您可以非常快速有效地解决大量数据处理问题。
Cascading不仅仅是一个围绕hadoop的简单包装,我试图让答案变得简单。例如,我使用级联jdbc tap
将一个包含数TB数据的巨大mysql数据库移植到日志文件中