2014-10-27 21 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