FAQ
如何实现数据局部性?
对于任何 MongoDB 部署,Spark Connector 都会将数据框或数据集的首选位置设置为数据所在的位置。
对于非分片系统,它将首选位置设置为独立运行的实例或副本集的主机名。
对于分片系统,它将首选位置设置为分片的主机名。
为了提升数据局部性,我们建议采取以下操作:
对于非分片系统,确保其中一台主机上有 Spark 工作线程;对于分片系统,确保每个分片都有一个 Spark 工作线程。
对于分片集群,在相同节点上设置
mongos
,并使用localThreshold
配置设置连接到最近的mongos
。 要按分片对数据进行分片,请使用ShardedPartitioner
配置。
如何解决Unrecognized pipeline stage name
错误?
在使用混合版本mongod
的 MongoDB 部署中,可能会出现Unrecognized pipeline stage name: '$sample'
错误。 为了缓解这种情况,请在使用 DataFrame 时显式配置要使用的分区器并定义模式。
如何使用 mTLS 进行身份验证?
要使用 mTLS,请在运行spark-submit
时包含以下选项:
--driver-java-options -Djavax.net.ssl.trustStore=<path to your truststore.jks file> \ --driver-java-options -Djavax.net.ssl.trustStorePassword=<your truststore password> \ --driver-java-options -Djavax.net.ssl.keyStore=<path to your keystore.jks file> \ --driver-java-options -Djavax.net.ssl.keyStorePassword=<your keystore password> \ --conf spark.executor.extraJavaOptions=-Djavax.net.ssl.trustStore=<path to your truststore.jks file> \ --conf spark.executor.extraJavaOptions=-Djavax.net.ssl.trustStorePassword=<your truststore password> \ --conf spark.executor.extraJavaOptions=-Djavax.net.ssl.keyStore=<path to your keystore.jks file> \ --conf spark.executor.extraJavaOptions=-Djavax.net.ssl.keyStorePassword=<your keystore password> \
如何跨线程共享 MongoClient 实例?
MongoConnector 包含一个缓存,允许工作线程跨线程共享单个MongoClient
。 要指定保持MongoClient
可用的时间长度,请在运行spark-submit
时包含mongodb.keep_alive_ms
选项:
--driver-java-options -Dmongodb.keep_alive_ms=<number of milliseconds to keep MongoClient available>
默认情况下,该属性的值为5000
。
注意
由于缓存是在 Spark 配置可用之前设置的,因此您必须使用系统属性来配置缓存。