草庐IT

Hadoop mapreduce 与级联,在比较基础处理时间时哪个更好?

coder 2024-01-07 原文

我也使用过级联以及 M/R,与 M/R 相比,级联作业看起来很慢。看起来我慢了 25% 到 50%。是真的还是我需要在级联中挖掘更多以进行优化。

最佳答案

我无法将 Cascading 作业的开销与手绘原始 MapReduce 作业进行比较,因为它实际上取决于工作负载的复杂性、Cascading 的版本、您编写每个作业的方式、Amazon 内部的天气或您的网络,等等

也就是说,Cascading 是对 MapReduce 的抽象,会有一些开销。但作为一种抽象,它有机会更有效地做事(例如,1.2 将在排序期间延迟反序列化数据,原始 MR 开发人员需要通过 Comparator 实现为每个中间对象手动编码)。

我怀疑您假设 Cascading 在默认设置之上进行了某种集群配置优化。它不是。因此,如果您在不设置任何不同的 Hadoop 属性的情况下运行级联流,您可能只会在每个作业中看到一个 reducer,因为这是 Hadoop 中的默认设置(请参阅 mapred-default.xml)。

或者您的工作足够简单,可以使用“Combiners”,Cascading 不直接支持它,但有一个更灵活的替代方案,即使用 Map 端部分聚合。这类似于组合器,但它以内存换取 cpu,并且它们不限于像组合器那样的交换关联操作。这是对 partial aggregation 的更好描述.

我应该说,如果您的工作负载足够简单(并且会保持简单)(和 Hadoop is really justified here ),您可以编写几个 MR 作业来满足它,您应该坚持这样做(见下文)。

但我所做的工作(我是 Cascading 的作者)导致了数十个,如果不是在某些情况下一百个的话,MR 工作。事实上,我实际上可以在几天内完成我的项目并获得结果,这超过了级联在某些情况下可能带来的少量开销。例如,Cascading 有一个 fail-fast 计划器,即如果 Flow 中所有数据/字段依赖项都不满足,它不会在集群上运行 Cascading Flow。

如果将原始 MR 作业链接在一起,则不太可能拥有该功能。由于缺少只能在运行时识别的依赖项,您的工作负载更有可能在数小时后失败。

或者,您正在传递原始类型的“业务对象”(为了获得编译器类型安全),这意味着您要么不必要地通过集群传递数据,要么有许多中间对象,您必须在更改时手动维护上游或下游数据处理的业务规则。

关于 MR 作业数量的另一点。在 Hadoop 中降低工作负载成本的唯一方法是减少工作负载中作业之间的 IO。这通常是通过用更好的算法替换低效算法来实现的,代价是增加复杂性,增加更多工作以更智能地做事。因此,如果您认为您只需要少数 MR 作业,并且在大规模运行时发现数据中存在严重的瓶颈(至少我经常遇到这种情况)。您可能需要采取不同的方法来解决可能会导致更多工作的问题。我知道这似乎违反直觉,但它经常发生。在这种情况下,您会很高兴您正在使用一个抽象,在这个抽象中您可以将注意力集中在问题领域,而不是 MapReduce 领域。

如果您真的很关心性能,请随时将您的代码通过电子邮件发送给 Cascading 邮件列表,我或社区很乐意帮助确定它或 Cascading 中的任何问题。

关于Hadoop mapreduce 与级联,在比较基础处理时间时哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164007/

有关Hadoop mapreduce 与级联,在比较基础处理时间时哪个更好?的更多相关文章

  1. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  2. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  3. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  4. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  5. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  6. ruby-on-rails - 更好的替代方法 try( :output). try( :data). try( :name)? - 2

    “输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  7. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  8. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  9. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  10. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

随机推荐