2017-11-17 9 views
0

この質問があまりにも基本的であれば、私はSparkを初めて勉強しています。 私は、データがキューに連続的にプッシュされ、このデータに対して分析を実行する必要があるリアルタイムのシナリオを持っています。 Sparkがこのデータをキューから取得します。分析はマルチステージであり、RDDはすべてのステージからの中間更新を繰り返し繰り返し、最後にRDD自体で更新されるマッピングを取得します。 分析はn分ごとに繰り返す必要があり、前回のRDD +の新しいデータの状態でも機能するはずです。これらのジョブは常に順番に実行され、前のジョブが完了するまで次のジョブは実行されません。スパークRDDを複数の繰り返しにわたって使用する

実行時に外部ストレージまたはキャッシュにデータを投稿してから、次のサイクルでRDDに再度データを入力することはできますが、不必要なオーバーヘッドが発生し、パフォーマンスが低下します。

このシナリオに最適なアプローチを提案してください。キャッシュまたは永続RDDがソリューションですか? Sparkのキャッシュ/永続性の仕組みがわかりません。ローカルであるか、すべてのノードで使用可能か。理想的なシナリオは、すべてのノードがそのデータ・チャンクを保持し、次の反復のために処理が実質的に遅れないことです。

答えて

0

普通のSparkプロジェクトでは、キューから情報を取得して更新しているようです。そうであれば、この種の繰り返しを自動化するスパークストリーミングを、より良い方法として使用することができます。window operations。スパークストリーミングはまた、あなたに役立つと思われるupdateStateByKeyのような2つの操作を提供します。

あなたの場合、あなたのキューからプルするストリームを定義し、ウィンドウ内でいくつかの操作を実行し、完了時に状態を更新することができます。

希望はあなたを助けます!

編集

まあ、それをシンプルに保つ...あなたがスパークを使用できる2つの主なシナリオがあります 。一方では、RDDよりも優れたバッチプロセスがあります。たとえば、「店舗からどれくらい多くの人がジャンル別に購入するかを毎日まとめておく必要があります。それはSpark APIのコアである "plain Spark"の意味です。

一方、情報の性質と、この情報にアクセスする方法は連続しています。たとえば、「ジャンルによって、ゲイとしてそれを示すために店舗に来る人の数をリアルタイムで表示したい」とします。

スパークストリーミングあなたが知っていなければならない最初の事はあなたのである1であるライブデータのフォールトトレラントストリーム処理が

ストリーム、スケーラブル、高スループットを可能にコアスパークAPIの拡張機能ですaproachを選択するシナリオ。リアルタイムが必要ですか?

あなたが思うように永続性とキャッシュが機能しません。ご存じのように、Sparkには2種類の関数があります。transformation and actionsこれらのメソッドは、同じ操作を複数回実行するために使用されます。あなたのコードでチェックポイントしています。 thisとお読みください。

結果のRDDをHDFS(つまり)のファイルとして保存し、各繰り返しの開始時にデータソースとしてロードする実行間で情報を共有できます。

お手伝いします。

+0

「Plain spark」と言えば、他にどのようなオプションがありますか?私はあなたが点火などについて話していると思う。私はストリーミングとウィンドウ操作を見ていたが、それはカウンタなどを更新するのには良いが、私のシナリオでは十分だとは思わない。一度それを探検し、戻ってくるだろう。 – Piyush

+0

明確にするために私の答えを編集しました – JavierC

+0

ご清聴ありがとうございます。私はあなたの意見を持っています。私は間違った方法でスパークを使用していると思う。私のアプリケーションはほぼリアルタイムであり、5分ごとにバッチを実行し、シナリオはストリームに蓄積されたレコードがあれば5分後に前回のデータの最後の状態を使用する必要があります。私はデータを保存して検索することができますが、これらのジョブを継続的に実行しているので、コストがかかるでしょう。 – Piyush

関連する問題