13

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

我玩过Cascading并且能够在通过 HTTP 访问的静态文件上运行作业,但这实际上并不能解决我的问题。我可以使用 curl 作为中间步骤,将数据转储到 Hadoop 文件系统的某个位置,并编写一个看门狗来在每次准备好新数据块时启动新作业,但这是一个肮脏的 hack;必须有一些更优雅的方式来做到这一点。有任何想法吗?

4

10 回答 10

10

您描述的黑客或多或少是做事的标准方式——Hadoop基本上是一个面向批处理的系统(一方面,如果数据没有尽头,Reducers 永远无法启动,因为它们必须在地图阶段完成)。

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

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

于 2009-08-02T20:48:19.297 回答
6

http://s4.io/怎么样。它是为处理流数据而设计的。

更新

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

于 2011-01-06T19:35:48.730 回答
2

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

于 2009-08-14T14:14:12.037 回答
1

雅虎 S4 http://s4.io/

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

于 2011-04-14T01:31:34.863 回答
1

Twitter的Storm就是你所需要的,你可以试试!

于 2013-03-30T08:36:10.650 回答
1

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

于 2015-01-15T09:14:11.340 回答
0

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

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

于 2009-12-16T23:32:45.757 回答
0

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

我最近阅读了一篇关于 M3 的文章,它显然通过绕过 HDFS 并在对象数据库中执行内存计算来解决第一个问题。对于第二个问题,他们正在使用不再批量执行的增量学习器。值得一试 M3:主内存 MapReduce 上的流处理。我在任何地方都找不到这个 M3 的源代码或 API,如果有人找到它,请在此处分享链接。

此外,Hadoop Online 也是另一个尝试解决与 M3 相同的问题的原型:Hadoop Online

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

于 2014-09-26T17:25:14.423 回答
0

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

看看这篇 InfoQ 文章,它详细解释了流处理以及所有这些框架和产品:Real Time Stream Processing / Streaming Analytics in Combination with Hadoop。此外,本文还解释了它如何与 Hadoop 互补。

顺便说一句:Oracle 或 TIBCO 等许多软件供应商将这种流处理/流分析方法称为“快速数据”而不是“大数据”,因为您必须实时而不是批处理。

于 2015-03-27T16:58:51.110 回答
0

你应该试试 Apache Spark Streaming。它应该可以很好地满足您的目的。

于 2015-08-19T12:37:05.000 回答