私はM1モジュールの下でスパークのk平均クラスタリングを使用しています。私はPySparkでプログラミングしています。モジュールは200クラスタまでうまく動作しますが、300クラスタ以上を過ぎるとOutOfMemoryError
となります。私の データには、オブジェクトごとに200k個のオブジェクトと25k個の機能が含まれています。私はリンクpyspark ML mocumentationからclass pyspark.ml.clustering.KMeans
の下に記載されたガイドラインに従っています。このドキュメントで言及されているコードと鉱山の唯一の違いは、密ではなく疎ベクトルを使用していることです。スパークk平均OutOfMemoryError
700個以上のコアと2TBのメモリを持つ共振可能な大規模なクラスタ設定があるため、ハードウェアの制限はありません。私はこの問題を捜し求めました、そして、リンクの大部分は私に次の構成の1つまたはすべてをするように導きます。 次は私が試したもののセットです:
- セット/
conf.set("spark.driver.memory", "64g")
- セットの並列処理に加えて
conf.set("spark.default.parallelism","1000")
- セット/メモリ割合を増やす
conf.set("spark.storage.memoryFraction", "1")
を使用してドライバメモリを増やします上記のコンフィグレーションでは、executorメモリを168とコアとして150と設定しました.Unfortuna何もうまくいっていないし、次のエラー(切り詰められたエラー)が続く。
Py4JJavaError: An error occurred while calling o98.fit. : java.lang.OutOfMemoryError: Java heap space at org.apache.spark.mllib.linalg.SparseVector.toArray(Vectors.scala:678) at org.apache.spark.mllib.clustering.VectorWithNorm.toDense(KMeans.scala:612)
これは火花が300+クラスタサイズのためにも200k*25K
データセットを扱うことができないわけない?または私は何かが足りないのです?。
ベンチマークa **非分散ツール**と比較してELKIなど。通常、データがメインメモリに収まる限り、驚くほどうまく実行されます。 200k個のオブジェクトはそれほど多くはありませんが、それは1つのホスト上で動作するはずです。私の経験では、分散した「もの」は驚くほど遅いです。 –