2015-10-01 13 views
5

Spark/Cassandraクラスタで単純なアプリケーションを実行しています。新しい環境(1.2の代わりにSpark 1.5およびCassandraのマイナーバージョンもアップグレード)から、実質的なパフォーマンスのダウングレードが観察された(同じ仕事と同じ量のデータに対しては4秒から1〜5mまで)。Apache Spark/Cassandraクラスタで過度のパーティショニング(タスクが多すぎる)

最初の調査の後、spark-driverの観点から見ると、全く同じコードのために、さらに多くのタスクが生成されています(20 + k、最大5まででした)、実行者側のログも同じです状況:異なるパーティション上の同じクエリの

多くのシーケンシャル処刑:

... 
CassandraTableScanRDD: Fetched 0 rows from x.y for partition 20324 in 0.138 s. 
CassandraTableScanRDD: Fetched 0 rows from x.y for partition 20327 in 0.058 s. 
CassandraTableScanRDD: Fetched 0 rows from x.y for partition 20329 in 0.053 s. 
... 

それは単一のものにするために使用:

CassandraTableScanRDD: Fetched 905 rows from x.y for partition 0 in 2.992 s. 

アプリケーションのコードは同じなので、パーティションの振る舞いにこのような違いが生じている可能性があり、それを修正するために何ができるのでしょうか?

NB!両方の環境の設定が異なる場合、設定は共有/継承されません。

ありがとうございました。

+0

関連項目:http://stackoverflow.com/q/32799122/1560062? – zero323

+0

あなたはcassandraの2番目のアイデンティティに仮想ノードを使用しましたか? –

答えて

5

Spark Cassandra Connectorの新しいバージョンでは、最新のCassandraの内部でSystemテーブルを使用して分割サイズを見積もりました。このテーブルは、表示されている分割の数が非常に多いにもかかわらず、現在(5分ごとに)更新されます。このテーブルから読み取られた値は、分割サイズで除算されます。

2.1.5未満のC *を使用している場合、このテーブルは存在せず、パーティションは手動で行う必要があります。

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/FAQ.md#what-does-inputsplitsize_in_mb-use-to-determine-size

あなたが問題を見るために続けている場合は、手動でReadConfを経由して分割数を渡すことができます。

+0

それは働いた、tnx :) – Ralkie

関連する問題