常见问题解答
我该如何实现数据本地化?
对于任何 MongoDB 部署,Spark 连接器将 DataFrame 或 Dataset 的首选位置设置为数据所在的位置。
对于非分片系统,它将首选位置设置为独立实例或副本集的主机名。
对于分片系统,它将首选位置设置为分片的主机名。
为了提高数据局部性,我们建议采取以下措施
确保在非分片系统中至少有一个Spark Worker在主机上,或在分片系统中每个分片都有一个Spark Worker。
对于分片集群,在同一节点上有一个
mongos
,并使用localThreshold
配置设置连接到最近的mongos
。要按分片分区数据,请使用ShardedPartitioner
配置.
如何解决 未识别的管道阶段名称
错误?
在具有不同版本的 mongod
的 MongoDB 部署中,可能会遇到 未识别的管道阶段名称:'$sample'
错误。为了减轻这种情况,在使用 DataFrames 时明确配置分区器并定义模式。
如何使用 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配置可用之前设置的,因此必须使用系统属性进行配置。