2016-12-24 15 views
0

私はスタンドアロンクラスタ(M + 3Workers)でスパークジョブを実行する必要があります。spark workers同時にMysqlテーブルの同じ行を更新する

私の仕事は「トランザクション詳細で顧客数を更新する」と定義されています。I:e。バッチ/ストリーミングファイル/レコード(Say 100 Transaction)が処理され、My spark jobが顧客IDの場合はmysql-Tableに移動し、その顧客のTransaction_countを1ずつ増加させます。

現在、問題はありませんが、私の懸念は次のとおりです。私のワーカーが同じ顧客(もちろん共有RDD部分)の記録を取得し、その顧客のTrx_カウントを更新しようとしたとします同じMysqlテーブルが同時に発生します。

私はそのテーブルのロックに直面しますか?

またはSparkは他の方法(明確なアイデアはありません)を処理するので、日付までに決して起こらず、将来も起こらないでしょうか?

火花がどのように行われているか、いくつかの洞察が必要です。

+0

取引の詳細がわかるので、複数の従業員が同じ顧客の行を更新しようとする可能性があります(同じ時間である場合もあります)。ですから、MySQLでの更新のために行レベルのロックを追加する方がよいでしょう。 – mrsrinivas

答えて

0
  1. here述べたように機能を減らして、それが(クライアントID、取引の回数)のペアを返します。キーと和としてクライアントIDとreduceByKeyを実行します。

  2. これで、そのクライアントの集計カウントを直接更新するために1つのSQLクエリを起動します。

これにより競合状態が回避され、SQLクエリが少なくなります。

+0

@ Tushar-これを試してみましょう。 –

関連する問題