Hadoop 是否存在一个可以证明的规范问题';你不需要地图/地图?

Hadoop 是否存在一个可以证明的规范问题';你不需要地图/地图?,hadoop,mapreduce,apache-pig,Hadoop,Mapreduce,Apache Pig,我正试图理解hadoop和map/reduce的界限,这将有助于了解一个我们知道map/reduce无法帮助解决的非平凡问题或一类问题 如果改变问题的一个因素可以从map/reduce中简化,那当然会很有趣 谢谢我想到两件事: 需要实时/交互式/低延迟响应时间的任何内容。提交给Hadoop的任何作业都会产生固定成本 任何不是的问题。Hadoop可以处理很多需要数据之间简单的相互依赖关系的问题,因为记录是在reduce阶段连接的。然而,某些图形处理和机器学习算法很难在Hadoop中编写,因为有太多

我正试图理解hadoop和map/reduce的界限,这将有助于了解一个我们知道map/reduce无法帮助解决的非平凡问题或一类问题

如果改变问题的一个因素可以从map/reduce中简化,那当然会很有趣


谢谢

我想到两件事:

  • 需要实时/交互式/低延迟响应时间的任何内容。提交给Hadoop的任何作业都会产生固定成本

  • 任何不是的问题。Hadoop可以处理很多需要数据之间简单的相互依赖关系的问题,因为记录是在reduce阶段连接的。然而,某些图形处理和机器学习算法很难在Hadoop中编写,因为有太多的操作相互依赖。一些机器学习算法需要非常低的延迟,对大量数据的随机访问,而Hadoop并没有提供现成的


  • 我认为任何无法解决的问题都不会在hadoop中很好地工作。如果该算法可以修改为能够创建子任务,那么我想它可以在hadoop下很好地运行


    为了补充您的问题(而不是答案,我是否将这一部分作为评论?),如果我可以将问题分解为子任务,但没有明确的方法来完成hadoop的
    过滤
    阶段,该怎么办?我想人们仍然可以在
    map
    阶段使用hadoop,并在一台机器上进行简化。

    正如其他人所说:问题必须很容易分割成可以独立处理的部分

    因此,让我举两个我过去作为WebAnalytics架构师的例子(本质上我是在尝试做Hadoop现在提供的东西…没有Hadoop…在一个具有多个CPU核的系统上使用bash shell脚本)。我希望这两个能让你对那些边界在现实生活中的样子有所了解

    背景:

    假设你有大量的 来自Web服务器的日志行。你呢 要分析的行为 访客。你需要一个 可靠地告诉您哪个请求被拒绝 由哪个用户完成

    我举两个例子:

  • 您想要用来关联行为的属性在某些部分是不好的(比如sessionid)。如果站点使用JavaScript放置此因子,则通常会发生这种情况(糟糕!)。然后就变得极其困难(根据我的经验:几乎不可能)来划分纠正这个相关属性的工作。这“必须”在“一个巨大的分区”中完成,因此MapReduce无法帮助您
  • 现在,将所有数据分割成可管理的数据块所需的属性是可靠的(即单个浏览器在站点上所做的一切),创建大量数据子集变得非常容易。您可以轻松地将大型站点的处理扩展到数百个系统
  • 过去有人曾告诉我,流体动力学方程(Navier–Stokes)不能分解为“可映射的”部分。虽然我确实看到了一些逻辑,为什么这是真的(流体的每个部分都会影响流体的每个其他部分);我应该说清楚,我甚至不打算去理解这些方程

    我希望这些示例能帮助您找到边界。

    对Gangadhar的回应(抱歉,评论框中没有足够的空间):

    我喜欢你关于分而治之的回答,但我要补充一点。Mapreduce不能很好地处理分治算法的递归方面,因为某些d/c算法的子问题的组合取决于最终减少到一个键。以Hadoop为例(由于Mapreduce实现的键排序属性,暂时忽略排序在Hadoop中的重要性):您可以使用映射器将数据划分为两个块,使用任意id作为键。reduce阶段会将其各自键的值列表合并在一起

    7 3 2 4 1 5 8 9 would map to 
    1->[[7],[3]] 2->[[2],[4]] 3->[[1],[5]] 4->[[8],[9]] would reduce to
    3,7 2,4 1,5 8,9 would map to 
    1->[[3,7],[2,4]] 2->[[1,5],[8,9]] 
    etc.
    
    您可以看到,键的数量减少了两个(或者您在d/c算法中使用的任何分块因子),并且最终应该为排序列表减少一个键。这不利于并行性


    因此,分而治之的分而治之显然是mapreduce所必需的,但我们在征服阶段也需要数据并行性,这样您的结果就是一些数据并行项的收集。FFT是分治算法的一个很好的例子,它与mapreduce一起工作。

    我们不完全清楚您所说的“我们知道map/reduce不能帮助”是什么意思。其他答案似乎满足于一些例子,当如何使用map reduce获得一些显著的加速并不琐碎、简单或不太困难时,但对一个人来说容易的事情可能对其他人来说不容易,而对重大问题来说也一样。 我个人会对一个定理感到更满意,这个定理说有些事情是做不到的。如果我们看一下计算复杂性,就会发现有一类难以并行化的问题,P-完全问题。众所周知,这些问题包括上下文无关语法识别(对编译器很重要)、线性规划和一些压缩问题。维基百科条目有更多内容

    一些人正在为MapReduce创建新的复杂性类。我极为怀疑,但陪审团不确定这些措施会有多有用

    另一个问题是:我们可以在map-reduce中模拟任何并行算法吗?当然,我们不能通过P-完全问题来映射reduce,但可能有一些问题可以并行解决,但不能在mapreduce中解决。我不知道有任何这样的问题,但我知道有一篇论文指向相反的方向,尽管是在一些假设下 Michael T.Goodrich的“在MapReduce框架中模拟并行算法及其在并行计算几何中的应用”

    实际上,我们几乎没有时间思考我的问题