【问题标题】:Spark with Mongodb is very slow使用 Mongodb 的 Spark 非常慢
【发布时间】:2018-01-09 22:19:36
【问题描述】:

我正在使用 mongodb 连接器运行 spark-shell。但是程序很慢,我想我不会得到程序的响应。

我的 spark-shell 命令是:

./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

我的应用代码是:

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

我错过了什么?请帮帮我~ PS:我的火花是独立模型。应用依赖是:

<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> 

【问题讨论】:

  • 您预期的数据集有多大?查询在 MongoDB 上运行多长时间?
  • 感谢@Rick Moritz 的回复。mongodb 中的文档总数为 194920414。满足过滤条件的文档数为749216。我在spark应用程序半小时后得到响应。但是在 mongodb shell 中,我以毫秒为单位得到了相同条件的响应。
  • PS : 我在 mongodb 文档的条件字段上有一个索引
  • 我有这样的问题,有进展吗?我的 spark 设置中的几乎每个操作都不是并行运行的。保存,但不加载。
  • @lockwobr mongo-spak-connector 将从 mongodb 获取所有数据,尽管我只想获取第一个或“计数”,所以当数据集很大时它会很慢.另外,就我而言,我的 mongodb 集群只是一个副本,没有 sharding 。好的,如果您对此主题有其他了解,请向我复习。谢谢你..

标签: mongodb apache-spark apache-spark-sql


【解决方案1】:

我被这种问题困扰了一段时间,但终于解决了。 我不知道您的 Mongodb 配置的详细信息,但这是我的问题的解决方案,希望对您有所帮助。

我的数据集也很大。所以我为 mongodb 配置了一个分片集群,这就是为什么让它变慢的原因。要解决它,添加一个conf spark.mongodb.input.partitioner=MongoShardedPartitioner。否则会使用默认的分区策略,不适合 sharded mongodb。

您可以找到更多具体信息here

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2016-07-25
    • 1970-01-01
    • 2020-10-05
    • 2015-11-01
    相关资源
    最近更新 更多