Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb的Spark非常慢_Mongodb_Apache Spark_Apache Spark Sql - Fatal编程技术网

Mongodb的Spark非常慢

Mongodb的Spark非常慢,mongodb,apache-spark,apache-spark-sql,Mongodb,Apache Spark,Apache Spark Sql,我正在运行带有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"

我正在运行带有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:我的spark是单机版。应用程序依赖项是:

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

UTF-8
1.8
1.8
2.11
2.1.1
org.apache.spark
spark-core{scala.compat.version}
${spark.version}
假如
org.apache.spark
spark-sql{scala.compat.version}
${spark.version}
假如
org.mongodb.spark
mongo-spark-connector_${scala.compat.version}
2.0.0

我陷入这种问题已经有一段时间了,但最终还是解决了。 我不知道您的Mongodb配置的细节,但这是我解决问题的方法,希望对您有所帮助

我的数据集也很大。所以我为mongodb配置了一个分片集群,这就是为什么要让它变慢。要解决此问题,请添加一段conf
spark.mongodb.input.partitioner=mongosharedpartitioner
。否则将使用默认的分区策略,该策略不适用于分片mongodb

您可以找到更具体的信息


祝你好运

您期望的数据集有多大?查询在MongoDB上运行多长时间?感谢您的回复@Rick Moritz。MongoDB中的文档总数为194920414。满足过滤条件的单据数为749216。我在spark应用程序中半小时后得到响应。但是在mongodb shell中,我得到了毫秒内相同条件的响应。PS:我在mongodb中的doc的条件字段上有一个索引。有这样的问题吗,有进展吗?我的spark设置中的几乎所有操作都不是并行运行的。保存,但不加载。@lockwobr mongo spak连接器将从mongodb获取所有数据,尽管我只想获取第一个数据或“计数”,所以当数据集很大时,速度会很慢。另外,在我的例子中,我的mongodb集群只是一个副本,没有切分。好的,如果你对这门学科有其他的知识,给我复习一下。非常感谢。