2017-11-10 42 views
1

spongデータフレームをmongodbに書き込もうとしたとき、sparkがそれを行うタスクを1つだけ作成することがわかりました。これは、ジョブ内に多くのエグゼキュータを割り当てても、実際に実行中のエグゼキュータは1人だけなので、パフォーマンスが低下します。SparkでMongoDBにデータを書き込む

私の部分pysparkコード:

df.write.format("com.mongodb.spark.sql.DefaultSource") \ 
    .mode("append") \ 
    .option("spark.mongodb.output.uri", connectionString) \ 
    .save() 

は、この場合には、複数のタスクを実行しているスパークもらえますか?おかげ

スパークが提出:

spark-submit --master yarn --num-executors 3 --executor-memory 5g --jars $JARS_PATH/mongo-java-driver-3.5.0.jar,$JARS_PATH/mongodb-driver-core-3.5.0.jar,$JARS_PATH/mongo-spark-connector_2.11-2.2.1.jar spark-mongo.py 

私は私が疑われるように、この情報

INFO TaskSetManager: Starting task 0.0 in stage 0.0 (TID 0, linxtd-itbigd04, executor 1, partition 0, PROCESS_LOCAL, 4660 bytes) 
INFO BlockManagerMasterEndpoint: Registering block manager linxtd-itbigd04:36793 with 1458.6 MB RAM, BlockManagerId(1, linxtd-itbigd04, 36793, None) 
INFO BlockManagerInfo: Added broadcast_0_piece0 in memory on linxtd-itbigd04:36793 (size: 19.7 KB, free: 1458.6 MB) 
INFO TaskSetManager: Finished task 0.0 in stage 0.0 (TID 0) in 17364 ms on linxtd-itbigd04 (executor 1) (1/1) 
+0

質問は?あなたは何の質問もしていません。あなたがここに書いたのは、あなたがしたこととあなたが「考える」ことの「声明」です。あなたは何を求めていますか? –

+0

あなたのspark submitコマンドとあなたの環境の詳細を共有してください –

+0

@ここでどのような種類のタスクについて話していますか?データの保存を意味する場合は、通常これが起こります。ボトルネックはネットワークIOであり、クラッシュする前にmongoがどれくらいの量のデータを取り込めるかです。 – eliasah

答えて

1

が含まれているログを見つけ、コメントで述べたように、あなたのデータは、このように分割されていなかった一つのタスクを作成した火花それに対処する。

jdbcソースを使用するときは、パーティションを用意しておかないと、データの読み書きが並列化されず、1つのタスクになることに注意する必要があります。

このトピックの詳細は、私のspark gotchas - Reading data using jdbc sourceで読むことができます。

免責事項:私はそのレポの共著者です。

関連する問題