Spark Shell JDBC 读取 numPartitions 值是否取决于执行者的数量?
Does the Spark Shell JDBC read numPartitions value depend on the number of executors?
我在具有 2 个内核和 16GB RAM 的单个节点上以独立模式设置了 Spark,以制作一些粗略的 POC。
我想使用 val df = spark.read.format('jdbc')...option('numPartitions',n).load()
从 SQL 源加载数据。当我试图通过调用 df.rdd.count
来测量读取不同 numPartitions
值的 table 所花费的时间时,我发现无论我给出的值如何,时间都是相同的。我还注意到一个上下文网络 UI,即使我在我的 spark_env.sh 文件中给出了 SPARK_WORKER_INSTANCES=2
和 SPARK_WORKER_CORES=1
,但活动执行者的数量是 1。
我有两个问题:
实际创建的numPartitions
是否取决于执行者的数量?
如何在当前设置中使用多个执行程序启动 spark-shell?
谢谢!
分区数量不取决于您的执行程序数量 - 虽然有最佳实践(每个内核分区),但它不是由执行程序实例决定的。
在从 JDBC 读取的情况下,要使其并行读取,您需要一个分区列,例如:
spark.read("jdbc")
.option("url", url)
.option("dbtable", "table")
.option("user", user)
.option("password", password)
.option("numPartitions", numPartitions)
.option("partitionColumn", "<partition_column>")
.option("lowerBound", 1)
.option("upperBound", 10000)
.load()
这会将来自数据库的查询并行化为每个查询的 10,000/numPartitions 个结果。
关于你的第二个问题,你可以在这里找到所有的spark配置:https://spark.apache.org/docs/latest/configuration.html,(spark2-shell --num-executors,或者配置--conf spark.executor.instances).
指定执行者的数量意味着动态分配将被关闭,所以请注意这一点。
我在具有 2 个内核和 16GB RAM 的单个节点上以独立模式设置了 Spark,以制作一些粗略的 POC。
我想使用 val df = spark.read.format('jdbc')...option('numPartitions',n).load()
从 SQL 源加载数据。当我试图通过调用 df.rdd.count
来测量读取不同 numPartitions
值的 table 所花费的时间时,我发现无论我给出的值如何,时间都是相同的。我还注意到一个上下文网络 UI,即使我在我的 spark_env.sh 文件中给出了 SPARK_WORKER_INSTANCES=2
和 SPARK_WORKER_CORES=1
,但活动执行者的数量是 1。
我有两个问题:
实际创建的numPartitions
是否取决于执行者的数量?
如何在当前设置中使用多个执行程序启动 spark-shell?
谢谢!
分区数量不取决于您的执行程序数量 - 虽然有最佳实践(每个内核分区),但它不是由执行程序实例决定的。
在从 JDBC 读取的情况下,要使其并行读取,您需要一个分区列,例如:
spark.read("jdbc")
.option("url", url)
.option("dbtable", "table")
.option("user", user)
.option("password", password)
.option("numPartitions", numPartitions)
.option("partitionColumn", "<partition_column>")
.option("lowerBound", 1)
.option("upperBound", 10000)
.load()
这会将来自数据库的查询并行化为每个查询的 10,000/numPartitions 个结果。
关于你的第二个问题,你可以在这里找到所有的spark配置:https://spark.apache.org/docs/latest/configuration.html,(spark2-shell --num-executors,或者配置--conf spark.executor.instances).
指定执行者的数量意味着动态分配将被关闭,所以请注意这一点。