【发布时间】:2021-04-13 03:02:56
【问题描述】:
我尝试提交我的申请并通过不同的组合更改我的代码中的coalese[k]:
首先,我从本地磁盘读取了一些数据:
val df = spark.read.option("encoding", "gbk").option("wholeFile",true).option("multiline",true).option("sep", "|+|").schema(schema).csv("file:///path/to/foo.txt")
情况1
我认为 local[*] 意味着总共有 56 个内核。我指定 4 * 4 = 16 个任务:
火花提交:
spark-submit --master local[*] --class foo --driver-memory-8g --executor-memory 4g --executor-cores 4 --num-executors 4 foo.jar
spark.write:
df.coalesce(16).write.mode("overwrite").partitionBy("date").orc("hdfs://xxx:9000/user/hive/warehouse/ods/foo")
但是当我查看 spark 历史日志服务器 UI 时,只有 1 个任务。在数据集中,“日期”列只有一个值。
所以我尝试了另一种组合并删除了partitionBy:
情况2
火花提交:
spark-submit --master local[*] --class foo foo.jar
spark.write:
df.coalesce(16).write.mode("overwrite").orc("hdfs://xxxx:9000/user/hive/warehouse/ods/foo")
但历史服务器显示仍然只有 1 个任务。
我的本地机器上有 56 个内核和 256GB 内存。 我知道在本地模式下,spark 会为驱动程序和执行程序创建一个 JVM,因此这意味着我们有一个执行程序,其内核数(假设为 56)我们的计算机(如果我们使用 Local[*] 运行它)。
以下是问题:
- 谁能解释一下为什么我的任务编号总是 1?
- 如何增加任务数量以便利用并行性?
- 我的本地文件会被读入不同的分区吗?
【问题讨论】:
标签: apache-spark apache-spark-sql