草庐IT

hadoop - 有没有人发现 Cascading for Hadoop Map Reduce 有用?

coder 2024-01-05 原文

我一直在尝试 Cascading,但我看不出在编写作业时比经典的 map reduce 方法有任何优势。

Map Reduce 工作给了我更多的自由,而 Cascading 似乎设置了很多障碍。

可能会使简单的事情变得简单,但复杂的事情..我发现它们非常难

有什么我想念的吗?与经典方法相比,级联是否有明显的优势?

在什么情况下我应该选择级联而不是经典方法?有人使用它并且开心吗?

最佳答案

记住我是 Cascading 的作者......

如果 Pig 或 Hive 对您的问题有意义,我的建议是使用它们,尤其是 Pig。

但是,如果您从事数据业务,而不仅仅是浏览数据以获取见解,您会发现对于大多数问题而言,级联方法比原始 MapReduce 方法更有意义。

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

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

此外,如果您必须不断地在映射器和缩减器之间移动函数,您会发现重构和创建可重用代码会更加困难。或者从映射器到之前的 reducer 以获得优化。这导致了脆性问题。

级联相信尽可能快地失败。规划器试图在 Hadoop 集群开始工作之前解决并满足所有这些字段名称之间的依赖关系。这意味着 90% 以上的问题将在您的作业在执行过程中等待发现问题的等待时间之前被发现。

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

借助 fail fast 语义和接收器和源的惰性绑定(bind),在 Cascading 上构建框架变得非常容易,这些框架本身创建 Cascading 流(成为许多 Hadoop MapReduce 作业)。我目前参与的一个项目每次运行都会有 100 个 MapReduce 作业,其中许多是根据正在处理的数据的反馈在运行中途创建的。搜索 Cascalog查看用于简单创建复杂流程的基于 Clojure 的框架示例。或者 Bixo用于比 Nutch 更容易定制的 Web 挖掘工具包和框架。

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

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

关于hadoop - 有没有人发现 Cascading for Hadoop Map Reduce 有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681494/

有关hadoop - 有没有人发现 Cascading for Hadoop Map Reduce 有用?的更多相关文章

  1. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  2. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  3. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  4. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  5. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  6. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  7. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  8. ruby - 没有类方法获取 Ruby 类名 - 2

    如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象

  9. ruby - 没有轨道的 ActiveRecord 时区 - 2

    我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A

  10. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

随机推荐