2017-09-20 8 views
0

ただの簡単な質問です。私はHiveテーブルでの同時読み込みを利用するバージョン1.6.0のSparkプログラムを実行しようとしています。 insertステートメントをhiveContext.sql("insert . . .")の方法で使用しているのは、書き込みプロセス中にテーブルのロックを確実にしたいからです。これは、DataFrameでの保存操作を使用するときに、Sparkドキュメントテーブルのロックとアトミック性が保証されていないためです。スパークハイブの挿入とテーブルロックの関係

「保存操作は、必要に応じて が存在する場合、既存のデータを処理する方法を指定していること、SaveModeを取ることができます。 は、これらのモードは任意のロックを利用しない保存して アトミックではないことを理解することが重要である。さらに、上書きを実行すると、新しいデータを書き出す前にデータが削除されて になります。

指定されたハイブテーブルにデータをアクセス/挿入するたびに、ハイブテーブルが確実に点火されるようにするにはどうすればよいですか?

どのような提案も役立ちます。どうもありがとうございました。

答えて

1

解決策は、アトミックな書き込みが必要なものによって異なります。最も単純な可能性の

一つのパーティション外部表を使用することです:スパーク仕事で

  1. あなたがいないテーブルにはなく、HDFSのディレクトリにデータフレームを書き込みます。
  2. 書き込みが完了したら、テーブルに新しいパーティションを追加して新しいディレクトリをポイントします。
+0

お寄せいただきありがとうございます。しかし、sparkで行われた保存モードにはテーブルロック機能がないので、テーブルのロックが確実に行われるようにするにはどうすればよいですか? – Ivan

+0

外部テーブルへのパーティションの追加はアトミックです(誰かが挿入されたデータの一部しか見ていない時はありません) – Mariusz

関連する問題