2016-12-09 6 views
1

私は数年前からSparkを使っていましたが、私の新しいチームはRedshiftを使用しています。 Spark/Redhshiftクラスターに正常にバインドして、RedshiftクエリーをSpark経由で正常に実行し、それらをS3にアンロードできます。スパークはレッドシフトとどのように相互作用しますか?

私が正しく理解していれば、spark-redshiftでデータフレームを生成すると、実際の重量挙げはSparkではなくRedshift自身で行われます。私は両方のプラットフォームで同じクエリを実行してきており、Sparkのものは約2倍の速度を必要とします。どちらの場合もクエリ自体はRedshiftによって解決されているので、RedshiftからSparkクラスタへのネットワークI/Oが追加の時間と考えられます。

Spark(pyspark)は実際にクエリのコレクタとして機能し、便利なデータフレームの形で結果として、そのライブラリで機械学習メソッドを並列化することができます。

この描写はどのくらい正確ですか?


編集:私は簡単なテストをしました:ローカルスパーク(16ギガ・マシン)を解雇し、曜日ごとに小さな7X2のデータフレーム(1を返さ周り7.5億レコード内の赤方偏移 - スパーククエリを実行し、その中に症例が分布している)。結果が私のSparkシェルにローカルに表示されるまでに約3秒かかりました。Redshiftスタンドアローンでクエリが終了するまでには約1.2秒かかります。私の16Gbマシンはあまりにも多くのデータをすばやく処理することができず、CPU /ネットワークの監視ではクエリ中に最小限のアクティビティしか示されませんでした。私が何かを誤解していない限り、それは実際には重い集約のように見え、他の処理は、スパークではなくレッドシフトで行われます。私は火花赤方偏移でデータフレームを生成するとき、私は、正しく理解していれば

答えて

1

は、実際の重量物の持ち上げはないスパークにより、赤方偏移自体によって行われます。 I

それは正しくありません。 Spark Data Source APIは、ジョブの小さな部分(投影と単純なフィルタ)を外部ソースに委譲できますが、ほとんどの作業はSpark自体で行われます。

全体のプロセスは非常に醜いです:

  • スパークは、クエリを実行します。
  • Redshift UNLOADS S3へのクエリの結果。
  • スパークはS3からデータを読み取ります。
+0

これも私が理解していることですが、あなたが言及したワークフローでは、大部分のリフトがRedshiftで行われているという疑いがあることがわかりましたか?起こっていることをより良く理解するために無効化しようとしていません。 – xv70

+1

正確ではありません。たとえば、クエリが 'SELECT ... GROUP BY x'で列が使用されている場合、Redshiftはデータベース全体をダンプし、それ以外のものはSparkによってhanldedされます。 –

関連する問題