2014-10-27 77 views
1

首先,我们的要求非常简单。当tweets进来时,我们需要做的就是坚持HDFS(定期)。使用Spark Streaming持续推文

JavaStreamingContext的'检查点'API看起来很有希望,但经过进一步的审查后,它似乎有不同的用途。 (另外,我不断收到'/ checkpoint/temp,错误:没有这样的文件或目录(2)'错误,但现在我们不必担心这个问题)。

问题:JavaDStream没有'saveAsHadoopFiles'方法 - 这是有道理的。我猜想从流式作业保存到Hadoop并不是一个好主意。

什么是推荐的方法?我应该将传入的'tweet'写入Kafka队列,然后使用诸如'Camus'(https://github.com/linkedin/camus)之类的工具推送到HDFS?

+0

为什么从Streaming作业保存到hadoop不是一个好主意?我想这就是你真正想要的。 – maasg 2014-10-28 16:05:43

+0

如果我们保存到HDFS,每次有消息进入时,我们的解决方案是否会扩展? Twitter每秒发送数以百万计的推文。直接将每条推文插入HDFS不会缩放!会吗? – DilTeam 2014-10-28 16:32:35

+0

如果HDFS的写入吞吐量不能保持持续的消息写入,那么如何在另一个系统之间(如kafka)添加帮助?使用调整窗口(x秒),您可以收集足够的消息,以便在微量批次中写入HDFS。这应该是非常有效的。 – maasg 2014-10-28 16:36:57

回答

0

遇到此真棒博客条目证实了我的想法。作者利用Kafka,Storm,Camus等技术构建了一个“外汇交易系统”。这个用例与我的类似,所以我打算使用这个设计工具&。谢谢。

http://insightdataengineering.com/blog/Building_a_Forex_trading_platform_using_Kafka_Storm_Cassandra.html

+1

您的架构要求在这个问题中没有得到很好的体现。 – maasg 2014-10-28 17:35:54

+0

好的,也许你是对的。下面是我如何映射它:我说,“首先,我们的要求非常简单 - 写入HDFS”。本部分的博客文章回答了这一问题:“批量聚合服务的数据管道:缓慢”。它指出他们使用'加缪' - 这也是我想到的。未来,Kafka/Storm或Spark Streaming会派上用场。无论如何,我的坏!谢谢你的时间。 – DilTeam 2014-10-28 17:54:28

0

可以从DSTREAM保存数据是通过对DSTREAM Hadoop的操作:

val streamingContext = new StreamingContext(sparkContext, Duration(window)) 
val tweetStream = TwitterUtils.createStream(streamingContext,...).map(tweet=>tweet.toJSONString) 
tweetStream.saveAsTextFiles(pathPrefix, suffix) 

假设恒定的输入,时间窗口会给你的邮件数量控制被处理的每个流动间隔。

+0

我在JavaStreamingContext或StreamingContext上看不到'createTwitterStream'方法。可能它只在Scala中可用?我正在使用1.1.0版本的Spark Streaming。 – DilTeam 2014-10-28 17:45:24

+0

它被称为'TwitterUtils.createStream(ssc,...)'我会用确切的电话更新答案。 – maasg 2014-10-28 17:59:49