アキュムレータ、放送変数
アキュムレータ(アキュムレータ)変数と放送(放送変数)は、スパークストリーミングでのチェックポイントから回復することはできません
Wordの7 * 2中断のない操作、中間ロジックをカウントダウン
アキュムレータは蓄積されたデータへのダウンタイムからキャッシュ10からデータを取得できない場合にのみ、再計算することができ
シングルトンを使用する時間を作成します
あなたもチェックしてアキュムレータと放送変数の使用を有効にした場合、
そして、あなたは彼らが再インスタンス化することができ、再起動後に故障により駆動するために、変数のアキュムレータと遅延放送の単一のインスタンスを作成する必要があります。
ケース:
com.bw.streaming.day03パッケージ インポートorg.apache.spark。SparkConf {、} SparkContext インポートorg.apache.spark.broadcast.Broadcast インポートorg.apache.spark.streaming。秒{、} StreamingContext インポートorg.apache.spark .util.LongAccumulator // 放送変数と発生が敏感な言葉監視するための積算 オブジェクトWordBlakList { DEFメイン(引数:配列[文字列]):単位 = { ヴァルconfに = 新しい新 SparkConf()setAppName(Sを。" $ {これを} .getClass.getSimpleName ").setMaster(" ローカル[2] 」) ヴァルSSC = 新しい新しい StreamingContext(CONF、秒(2)) // 取得ストリームソケット ヴァル= ssc.socketTextStreamストリーム(" linux04 "、9999 ) // サービス処理 stream.foreachRDD(R&LT => { // 放送変数から敏感な単語を取得 ヴァル単語:配列[文字列] = WordBlackListBC .getInstance(r.sparkContext).Valueの // アキュムレータ、単語出現頻度と敏感算出 ヴァルの累積値:LongAccumulator = WordBlackListAccum.getInstance(r.sparkContext) 。R&LT のforeach(T => { IF (words.contains(T))を{ accum.add(1 ) } }) println(" 敏感词汇:" + accum.value) }) ssc.start() ssc.awaitTermination() } } // オブジェクト是单例模式 オブジェクトWordBlackListBC { @volatile プライベート VARのインスタンスを:ブロードキャスト[配列[文字列] = ヌル のgetInstance(:SparkContext SC):DEFブロードキャスト[配列[文字列] = { 場合(例えば== NULL ){ 同期{ 場合(例えば== NULL ){ インスタンス = sc.broadcast(配列(" A "、" C " )) } } } インスタンスは } } // 累加器 オブジェクトWordBlackListAccum { @volatile プライベート するvar LongAccumulator =インスタンスヌル )SparkContext:DEFのgetInstance(皮下LongAccumulator = { 場合(例えば== NULL ){ {同期 場合(インスタンス== NULL ){ インスタンス = sc.longAccumulator(" WordsInBlacklistCounter " ) } } } インスタンス } }
2.DataFream ANS SQL操作
あなたは簡単にストリーム上でデータフレームとSQLデータを使用することができます。あなたは使用する必要があります
SQLContextのStreamingContext使用を作成するためのSparkContext。また、このプロセスが可能
ドライブの故障後に再起動します。我々は、単一インスタンスのインスタンスを作成することにより、これを行うSQLContext
この作品。次の例では。私たちは、データフレームを使用するように変更カウントを先行単語にありました
そして、ワードカウントを生成するためのSQL。各RDDはDATAFRAME、一時的なテーブル構成に変換され、
そして、SQLでクエリ。