Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
Hadoop MapReduce连续执行_Hadoop_Mapreduce_Real Time_Cluster Computing - Fatal编程技术网

Hadoop MapReduce连续执行

Hadoop MapReduce连续执行,hadoop,mapreduce,real-time,cluster-computing,Hadoop,Mapreduce,Real Time,Cluster Computing,我正在使用Hadoop将现有的时间序列数据库系统转换为MapReduce模型。 数据库系统具有历史和实时处理能力。 到目前为止,我能够将批处理功能转换为Hadoop 不幸的是,在实时处理方面,我发现MapReduce模型在概念上存在一些不一致之处 我可以编写自己的Hadoop InputFormat接口实现,该接口将不断向映射器提供新数据,以便映射器可以处理和不断发送数据。 但是,由于在所有映射程序完成执行之前不会调用reduce()方法,因此我的计算必然会停留在映射阶段 我看到一些帖子提到了m

我正在使用Hadoop将现有的时间序列数据库系统转换为MapReduce模型。 数据库系统具有历史和实时处理能力。 到目前为止,我能够将批处理功能转换为Hadoop

不幸的是,在实时处理方面,我发现MapReduce模型在概念上存在一些不一致之处

我可以编写自己的Hadoop InputFormat接口实现,该接口将不断向映射器提供新数据,以便映射器可以处理和不断发送数据。 但是,由于在所有映射程序完成执行之前不会调用reduce()方法,因此我的计算必然会停留在映射阶段

我看到一些帖子提到了
mapred.reduce.slowstart.completed.maps
,但据我所知,这只控制还原程序何时开始将数据拉到其本地目标(洗牌)——只有在所有映射程序完成执行后才调用实际的reduce方法

当然,有一种方法可以通过使用连续的独立MR作业流在短时间间隔内处理小批量数据来模拟连续执行,但这将引入额外的延迟,这在我的情况下是不可接受的

我也考虑过使用or,但在进一步移动之前,我需要确保它不属于Hadoop的范围


总之,人们似乎已经能够开发实时Hadoop应用程序(如Impala)或基于Hadoop构建的实时处理解决方案。问题是如何实现?

我个人一直在使用MapReduce实现流媒体解决方案,但它并不漂亮。每当您尝试使用MapReduce做一些开箱即用的事情时,它都会以某种方式失败

MapReduce专门用于批处理,您正在寻找的流处理功能是Flume和Storm等技术出现的主要原因之一。这两个都被认为是hadoop生态系统中的实际标准,并且与hadoop的其余部分有很好的集成



您提到您正在处理时间序列数据。你看了吗?这是一个建立在HBase和HDFS之上的时间序列数据库。

Nathan Marz在其即将出版的新书《大数据》中讨论了“Lambda架构”,它是Storm和Hadoop的混合体,共同提供了一个实时系统

我还建议您看看,它允许您使用“Streaming MapReduce”模型

Summingbird是一个库,它允许您编写类似于本机Scala或Java集合转换的流式MapReduce程序,并在许多著名的分布式MapReduce平台(如Storm和Bullowing)上执行这些程序

如果InputFormat/Mapper连续发出数据,则reduce方法永远不会被调用,这是正确的。原因是reduce方法必须迭代键的所有值,并且在映射阶段完成之前,完整的值集是未知的,因为要给reduce方法的值可能随时来自任何映射器

reduce方法通过迭代器访问值,因此从API的角度来看,理论上可以预先调用reduce()并使其在迭代器上永久运行,直到值可用为止。Hadoop中缺少此功能的原因是它需要在内存中保留每个键的上下文,这对于大数据集的批处理没有意义

在Hadoop MapReduce编程模型中实现数据流连续分析的一种方法是提交一个连续的小MR作业流,每个作业分析一块数据。在这种情况下,处理额外延迟的方法是使用众多可用的Hadoop加速器中的一个(免责声明:我为一家名为ScaleOut Software的公司工作,该公司提供这样一个加速器:ScaleOut hServer-在免费社区版中提供)。是内存中的MapReduce引擎,可以在毫秒内运行MR作业。它在作业之间重用JVM,因此与Hadoop相比,作业启动延迟最小。这非常适合在数据块上连续运行MapReduce作业,因为它针对适合内存的数据集的实时性能进行了优化


上述所有情况的一个例外是,如果分析不需要reduce阶段(即,reducer的数量设置为0):如果算法只能表示为map,则可以通过一个Hadoop批处理作业连续完成

我明白了,谢谢。实际上,我已经瞥了一眼OpenTSDB。不幸的是,我必须尽可能接近现有的技术。此外,它不能满足我正在处理的高频市场的低延迟要求。更重要的是,IMHO,它允许您为实时和批处理提供单一的真实来源(即共享代码)。