3 votes

Spark avec Mongodb est très lent

J'utilise spark-shell avec le connecteur mongodb. Mais le programme est très lent, je pense que je n'aurai pas de réponse du programme.

Ma commande spark-shell est :

./spark-shell --master spark://spark_host:7077 \
--conf "spark.mongodb.input.uri=mongodb://mongod_user:password@mongod_host:27017/database.collection?readPreference=primaryPreferred" \
--jars /mongodb/lib/mongo-spark-connector_2.10-2.0.0.jar,/mongodb/lib/bson-3.2.2.jar,/mongodb/lib/mongo-java-driver-3.2.2.jar

Et le code de mon application est :

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import com.mongodb.spark._
import org.bson.Document
import com.mongodb.spark.config.ReadConfig
import org.apache.spark.sql.SparkSession
import com.mongodb.spark.rdd.MongoRDD

val sparkSession = SparkSession.builder().getOrCreate()
val df = MongoSpark.load(sparkSession)
val dataset = df.filter("thisRequestTime > 1499250131596")
dataset.first // will wait to long time

Qu'est-ce qui m'a échappé ? Aidez-moi s'il vous plaît ~ PS : mon spark est un modèle standalone. App dépendance est :

<properties>
        <encoding>UTF-8</encoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <scala.compat.version>2.11</scala.compat.version>
        <spark.version>2.1.1</spark.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.compat.version}</artifactId>
            <version>${spark.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.compat.version}</artifactId>
            <version>${spark.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mongodb.spark</groupId>
            <artifactId>mongo-spark-connector_${scala.compat.version}</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>

1voto

AssKicker Points 74

J'ai été piégé dans ce genre de problème pendant un certain temps, mais je l'ai enfin résolu. Je ne connais pas le détail de votre configuration Mongodb, mais voici la solution à mon problème J'espère que vous trouverez cela utile.

Mon ensemble de données est énorme, aussi. J'ai donc configuré un cluster sharded pour mongodb, c'est pourquoi il est lent. Pour le résoudre, ajoutez une pièce de conf spark.mongodb.input.partitioner=MongoShardedPartitioner . Sinon, une politique de partition par défaut sera utilisée, ce qui n'est pas approprié pour un mongodb sharded.

Vous pouvez trouver des informations plus spécifiques aquí

Bonne chance !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X