我已经这样启动了我的集群:
/usr/lib/spark/bin/spark-submit --class MyClass --master yarn-cluster--num-executors 3 --driver-memory 10g --executor-memory 10g --executor-cores 4 /path/to/jar.jar我做的第一件事是读取一个大的文本文件,并对其进行计数:
val file = sc.textFile("/path/to/file.txt.gz")
println(file.count())在执行此操作时,我看到只有一个节点实际正在读取文件并执行计数(因为我只看到一个任务)。这是意料之中的吗?我应该在之后重新划分我的RDD,或者当我使用map reduce函数时,Spark会为我做吗?
发布于 2015-01-25 01:47:10
看起来您正在处理一个gzipped文件。
我认为你遇到了一个非常典型的问题,那就是gzipped文件不能并行加载。更具体地说,单个gzipped文件不能由多个任务并行加载,因此Spark会加载一个任务,从而为您提供一个带有一个分区的RDD。
您需要在加载RDD之后显式地对其进行重新分区,以便可以在其上并行运行更多的任务。
例如:
val file = sc.textFile("/path/to/file.txt.gz").repartition(sc.defaultParallelism * 3)
println(file.count())如果您在读取常规文本文件或使用bzip2等可拆分压缩格式压缩的文件时设置了minPartitions,您将看到Spark实际上会并行部署该数量的任务(直到集群中可用内核的数量)来读取该文件。
https://stackoverflow.com/questions/28127119
复制相似问题