我想使用MapReduce方法分析连续的数据流(通过HTTP访问),所以我一直在研究Apache Hadoop。不幸的是,似乎Hadoop希望以一个固定大小的输入文件开始工作,而不是在消费者到达时能够将新数据传递给消费者。这是真的吗,还是我错过了什么?是否有一个不同的MapReduce工具可以处理从打开的套接字读入的数据?可扩展性是一个问题,所以我更愿意让MapReducer处理凌乱的并行化内容。

我玩过级联并且能够在通过HTTP访问的静态文件,但这实际上并没有解决我的问题。我可以使用curl作为中间步骤将数据转储到Hadoop文件系统的某个地方,并编写一个监视程序,以便在每次准备好新的数据块时触发新作业,但这是一个肮脏的黑客行为;必须有一些更优雅的方式来做到这一点。有任何想法吗?

有帮助吗?

解决方案

你描述的hack或多或少是标准的做事方式 - Hadoop基本上是一个面向批处理的系统(一方面,如果数据没有结束,Reducers就无法启动,因为它们必须在地图阶段结束后开始)。

旋转日志;当你将它们旋转出来时,将它们转储到HDFS中。有一个看门狗进程(可能是分布式进程,使用ZooKeeper协调)监视转储地并启动新的处理作业。您需要确保作业在足够大的输入上运行以保证开销。

Hbase是hadoop生态系统中的BigTable克隆,可能对您感兴趣,因为它允许连续的插入流;但是,您仍然需要以批处理模式运行分析查询。

其他提示

http://s4.io/ 怎么样?它用于处理流数据。

更新

新产品正在兴起:风暴 - 分布式和容错实时计算:流处理,连续计算,分布式RPC等等

我认为你应该看看Esper CEP( http://esper.codehaus.org/)。

雅虎S4 http://s4.io/

它提供实时流计算,如map reduce

Twitter的风暴是您所需要的,您可以尝试一下!

这里有多个选项。 我建议将Kafka和Storm +(Hadoop或NoSql)结合起来作为解决方案。 我们已经使用这些开源工具构建了我们的大数据平台,并且它运行良好。

您的用例听起来类似于使用Hadoop编写Web爬虫的问题 - 数据从打开的套接字(缓慢)返回(通过HTTP获取远程页面)。

如果是,请参阅为什么提取网页不能很好地映射到map-reduce 。你可能想查看 Bixo中的FetcherBuffer 类,它在reducer中实现线程化方法(通过Cascading)来解决这类问题。

如您所知,Hadoop在流挖掘中使用的主要问题是,首先,它使用HFDS,这是一个磁盘,磁盘操作会带来延迟,导致流中缺少数据。第二,是管道不平行。 Map-reduce通常对批量数据进行操作,而不是像流数据那样对实例进行操作。

我最近阅读了一篇关于M3的文章,该文章通过绕过HDFS并在对象数据库中执行内存计算来解决第一个问题。对于第二个问题,他们使用的是增量学习者,这些学习者不再是批量学习的。值得一试的 Hadoop Online

但是, Apache Storm 是该问题的关键解决方案,但这还不够。你需要一些euqivalent of map-reduce,这就是为什么你需要一个名为 SAMOA 的库,它实际上有很好的算法对于有点缺乏的在线学习。

市场上有几种成熟的流处理框架和产品。开源框架例如是Apache Storm或Apache Spark(它们都可以在Hadoop之上运行)。您还可以使用IBM InfoSphere Streams或TIBCO StreamBase等产品。

看看这篇InfoQ文章,它详细解释了流处理以及所有这些框架和产品:实时流处理/流媒体分析与Hadoop结合使用。除了文章还解释了它如何与Hadoop互补。

顺便提一下:许多软件供应商(如Oracle或TIBCO)都将这种流处理/流分析方法称为“快速数据<!>”;而不是<!>“;大数据<!>”;因为你必须实时行动而不是批处理。

您应该尝试使用Apache Spark Streaming。 它应该适合您的目的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top