Spark在内部如何在这种情况下工作?

时间:2017-06-13 15:16:30

标签: java multithreading apache-spark

@Service
public class MyService { public MyService(ThirdPartyClass thirdPartyClass){..}....}

假设我有1000行test.txt文件。我有单核处理器的单一机器人。这是我的理解火花如何在这里实现并行性

  1. Spark将在单个线程中从文件中读取chracters数据块。不确定是否存在默认的块大小,或者它取决于文件大小
  2. Spark将根据以下两个参数决定它必须制作多少分区     a)它在步骤1和中读取的数据大小     b)基于cpu中的核心数
  3. 根据步骤2中的分区大小,它将生成线程。如果有3个分区,它将产生三个线程。
  4. 我的理解是否正确?

1 个答案:

答案 0 :(得分:1)

对于本地文件,Spark会拆分文件的n个块,其中n是默认的并行级别,等于集群中的核心数量(例如,如果是local[4],它将是4)。

我们可以提供许多分区来覆盖这种行为:

textFile = sc.textFile("C://test.txt", 8) // will create 8 spark partitions.

我们可以检查分区:

textFile.partitions()
//Array[org.apache.spark.Partition] =     Array(
  org.apache.spark.rdd.HadoopPartition@cd0, 
  org.apache.spark.rdd.HadoopPartition@cd1, 
  org.apache.spark.rdd.HadoopPartition@cd2, 
  org.apache.spark.rdd.HadoopPartition@cd3, 
  org.apache.spark.rdd.HadoopPartition@cd4, 
  org.apache.spark.rdd.HadoopPartition@cd5, 
  org.apache.spark.rdd.HadoopPartition@cd6, 
  org.apache.spark.rdd.HadoopPartition@cd7
)

请注意,这是底层hadoop文件系统实现的行为。对于分布式文件系统,例如hdfs,Spark将使用所使用文件的分区级别。 Spark和Hadoop之间的交互是在 https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/HadoopRDD.scala