Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于简单的O(n)复杂度查询,有没有比Hadoop更好的解决方案?_Hadoop - Fatal编程技术网

对于简单的O(n)复杂度查询,有没有比Hadoop更好的解决方案?

对于简单的O(n)复杂度查询,有没有比Hadoop更好的解决方案?,hadoop,Hadoop,我需要创建一个系统,它需要获取TB的数字数据并回答三个问题:1。敏,2。马克斯,3岁。总数 一位朋友建议Hadoop使用MapReduce,其中reduce步骤总是对数据进行排序。这会导致Onlogn的复杂性,即使对于On查询(如min、max和total count) 我一直在网上搜索;然而,我一直未能找到答案。能找个人帮忙吗?我是这个领域的新手,请容忍我知识的缺乏 谢谢 Hadoop不会改变任何事物的渐进复杂性。这仅仅是关于减少big-O忽略的常数因子 把分布式计算的结果放在一起总有一些开销

我需要创建一个系统,它需要获取TB的数字数据并回答三个问题:1。敏,2。马克斯,3岁。总数

一位朋友建议Hadoop使用MapReduce,其中reduce步骤总是对数据进行排序。这会导致Onlogn的复杂性,即使对于On查询(如min、max和total count)

我一直在网上搜索;然而,我一直未能找到答案。能找个人帮忙吗?我是这个领域的新手,请容忍我知识的缺乏


谢谢

Hadoop不会改变任何事物的渐进复杂性。这仅仅是关于减少big-O忽略的常数因子


把分布式计算的结果放在一起总有一些开销。然而,在您的三个问题的情况下,使用组合器将最终排序减少到O1。我不知道当组合器只有一个键时,在每个映射主机上进行分组的本地排序的复杂性是什么。在这种情况下,它可能比lg n更好

Hadoop不会改变任何事物的渐进复杂性。这仅仅是关于减少big-O忽略的常数因子


把分布式计算的结果放在一起总有一些开销。然而,在您的三个问题的情况下,使用组合器将最终排序减少到O1。我不知道当组合器只有一个键时,在每个映射主机上进行分组的本地排序的复杂性是什么。在这种情况下,它可能比lg n更好

我在实践中没有尝试过这一点,但我相信通过为您的工作定义自定义排序和分组比较器,您可以有效地禁用排序。您需要使用排序比较器,该比较器表示所有键在排序时都是相等的。我相信,这将使所有类型的至少做尽可能少的工作-一个通行证。不过,您希望保留默认的分区器和分组比较器,因此工作仍然以相同的方式分布,相同的值使用相同的键

我不知道这是否成功,因为内部还有很多其他事情在进行,比如合并

而且,big-O是一个非常粗糙的速度度量。像高效的可写文件和组合器之类的东西将比这些问题产生更大的不同

当然,我可能不会建议您为此类工作构建自定义MapReduce作业。这是Hive可以为您解答的问题,尽管它只是将任务委托给MapReduce,并且会比您最初设想的简单MapReduce慢


有像Impala这样的实时ish工具可以更快地回答这些类型的查询。它们不使用MapReduce,但在Hadoop上运行。如果您真的想这样做,我强烈建议您朝这个方向看。

我在实践中没有尝试过这一点,但我相信您可以通过为您的工作定义自定义排序和分组比较器来有效地禁用排序。您需要使用排序比较器,该比较器表示所有键在排序时都是相等的。我相信,这将使所有类型的至少做尽可能少的工作-一个通行证。不过,您希望保留默认的分区器和分组比较器,因此工作仍然以相同的方式分布,相同的值使用相同的键

我不知道这是否成功,因为内部还有很多其他事情在进行,比如合并

而且,big-O是一个非常粗糙的速度度量。像高效的可写文件和组合器之类的东西将比这些问题产生更大的不同

当然,我可能不会建议您为此类工作构建自定义MapReduce作业。这是Hive可以为您解答的问题,尽管它只是将任务委托给MapReduce,并且会比您最初设想的简单MapReduce慢


有像Impala这样的实时ish工具可以更快地回答这些类型的查询。它们不使用MapReduce,但在Hadoop上运行。如果你真的想这么做,我强烈建议你朝这个方向看。

正如你所说:Hadoop不会改变任何事物的渐进复杂性。可以肯定的是,即使对于复杂度较高的问题也是如此。例如,要实现max,映射器在cleanup调用期间只能输出一条记录。然后,每个映射任务都会启动,找到局部极大值的最大值会启动或更好。正如您所说:Hadoop不会改变任何事物的渐进复杂性。可以肯定的是,即使对于复杂度较高的问题也是如此。例如,要实现max,映射器在cleanup调用期间只能输出一条记录。然后,每个映射任务都将打开,然后查找局部最大值的最大值将打开或更好。