1

ストリーミングデータに対して実行される連続クエリの結果を分散ノードに永続化してフェールオーバーとスケーラビリティを確保する方法です。spark sqlの結果を構造化ストリーミングとOLAPクエリに格納するフェイルセーフ戦略

は、SQLの専門家をスパークすることができ にいくつかの光を当てるしてください - (2)一方のノードがダウンし 場合でも、クエリのために利用可能なデータを確実にするためにどのように - 私はそのOLAPクエリが 高速化され選択する必要があり、(1)どのストレージオプション - (3)内部的にSpark SQLは結果セットをどのように保存しますか?

おかげ Kaniska

答えて

1

それはあなたが余裕ができ、待ち時間の種類によって異なります。

  • 一つの方法Persist() APIを使用してHDFS /カサンドラに結果を持続することです。あなたのデータが小さい場合は、各RDDのcache()が良い結果をもたらすはずです。

  • スパークエグゼキュータがどこに配置されているかを格納します。たとえば:

    • それはあなたのストリームを永続化するtachyonのようなメモリベースのストレージを使用することも可能である(すなわち、それぞれ自分のストリームのRDD)と、それに対してクエリを。
    • 待ち時間が問題でない場合、persist(MEMORY_OR_DISK_2)は必要なものを提供します。このシナリオでは、パフォーマンスがヒットまたはミスしたことを心配しています。また、これは2つのエグゼキュータにデータを格納します。他の例で
  • 彼らはちょうどあなたがpostgresmysqlのような従来のデータベースを使用することができます常に更新し、結果を照会する必要がある場所あなたのクライアントは、データベースのようなOLTPでより快適にしている場合。これは、クエリ時間が一貫性があり、予測可能であるため、多くの人に好まれる方法です。結果が重く更新されずに分割されている場合(例えば時間によって)、Greenplumのようなシステムも選択肢です。
+0

**具体的には、** writeStream .format( "parquet")。オプション( "path"、 "path/to/destination/dir")**を使用すると、パーケットファイルの編集が行われます**クラスタ**のすべてのノードで自動的に複製されますか?出力シンクとフェイルオーバ、レプリケーションの**高速クエリーの両方を必要とする** –

+0

'path/to/destination/dir'への書き込みのため、すべてのノードにレプリケートする必要はありません。すべてのパーティションに依存します。すべてのエグゼキュータが何らかのデータを取得するようにするには、独自のパーティション化ロジックを使用してデータを再分割することができます。これにより、すべてのマシンにデータの一部が確実に保持されます。 – Manas

関連する問題