我想使用MapReduce方法分析连续的数据流(通过HTTP访问),所以我一直在研究Apache Hadoop.不幸的是,似乎Hadoop希望以固定大小的输入文件开始工作,而不是在消费者到达时能够将新数据传递给消费者.这是真的吗,还是我错过了什么?是否有一个不同的MapReduce工具可以处理从打开的套接字读入的数据?可扩展性是一个问题,所以我更喜欢让MapReducer处理凌乱的并行化内容.
我玩过Cascading并能够在通过HTTP访问的静态文件上运行作业,但这实际上并没有解决我的问题.我可以使用curl作为中间步骤将数据转储到Hadoop文件系统的某个地方,并编写一个监视程序,以便在每次准备好新的数据块时触发新作业,但这是一个肮脏的黑客行为; 必须有一些更优雅的方式来做到这一点.有任何想法吗?
您描述的黑客或多或少是标准的处理方式 - Hadoop基本上是一个面向批处理的系统(一方面,如果数据没有结束,Reducers就无法启动,因为它们必须在之后启动地图阶段结束了).
旋转你的日志; 当你将它们旋转出来时,将它们转储到HDFS中.有一个看门狗进程(可能是分布式进程,使用ZooKeeper协调)监视转储地并启动新的处理作业.您需要确保作业在足够大的输入上运行以保证开销.
Hbase是hadoop生态系统中的BigTable克隆,可能对您感兴趣,因为它允许连续的插入流; 但是,您仍需要以批处理模式运行分析查询.
怎么样http://s4.io/.它用于处理流数据.
更新新产品正在兴起:Storm - 分布式和容错实时计算:流处理,连续计算,分布式RPC等