【发布时间】:2017-06-14 22:29:34
【问题描述】:
JavaRDD<String> textFile = sc.textFile("C://test.txt");
假设我有 1000 行 test.txt 文件。我有带四核处理器的单机。这是我理解 spark 将如何在这里实现并行性
- Spark 将在单线程中从文件中读取字符块。不确定是否有默认块大小或取决于文件大小
- Spark 将根据以下两个参数决定它必须创建多少分区 a) 它在步骤 1 中读取的数据大小和 b) 基于 cpu 中的核心数
- 根据第 2 步中的分区大小,它将生成线程。如果有 3 个分区,它将产生三个线程。
我的理解正确吗?
【问题讨论】:
-
据我所知,Spark 默认采用的分区数等于文本文件的块数。我们可以通过给出(文件路径,分区数)手动定义分区
-
你能详细说明文件中没有块是什么意思吗?你的意思是有 1000 行,spark 会将它分成一些块,比如 4,然后创建 4 个分区,然后如果在同一台机器上创建 4 个线程,否则将其发送给 4 个工人。对吗?
-
在 Hadoop 中,默认块大小为 64 mb(apache 发行版,如果 cloudera 为 128mb)如果您的文件大小为 256mb。它默认存储为 4 个块(4*64 mb)。 Spark默认将每个块作为每个分区,我们可以管理它们。
-
对 HDFS 文件或文件系统也有效吗?
-
在任何文件系统中,但块大小可能不同
标签: java multithreading apache-spark