spark如何加载大于集群磁盘大小的输入文件?

Posted

技术标签:

【中文标题】spark如何加载大于集群磁盘大小的输入文件?【英文标题】:How does spark load input file that is bigger than disk size of cluster? 【发布时间】:2018-02-24 20:03:50 【问题描述】:

我对 Spark 很陌生。我对 spark 加载输入数据的方式有点困惑。例如:假设我有一个 1 TB 的文件,我有一个 spark 集群,每个节点有 3 个节点(4cpu、8gb 内存和 10gb 磁盘空间)。现在 spark 如何在这些节点之间划分数据?它是只加载文件的元数据,还是尝试加载足够的内容以适应集群并在迭代中处理文件?

【问题讨论】:

【参考方案1】:

文件存储在 HDFS 中,而不是 spark。 如果复制因子为 3,您将需要 3 TB 的硬盘。

请点击链接以获得更好的理解 http://bytepadding.com/big-data/spark/understanding-spark-through-map-reduce/

【讨论】:

谢谢,我会通过那个链接。另外,当您说我需要 3TB 磁盘时,您的意思是在 spark 集群或 hdfs/s3 中?如果你的意思是 hdfs/s3,那意味着 spark 以块的形式加载数据? 请阅读 InputFormats 的工作原理,spark 总是以块的形式读取数据。仅当您指示将整个数据加载到内存中时,它才会将其保存在那里,否则总是它的磁盘和内存bytepadding.com/big-data/map-reduce/… 再次感谢您的链接,但老实说,他们没有回答我的问题。但我想我需要简化我的问题。我了解火花处理数据的块。但是它是 download 从网络进行计算所需的数据块(例如:s3 存储桶)还是下载整个文件然后选择哪个块应该去哪个节点?那么对于您的示例,我的 spark 集群中是否需要 3 TB 磁盘空间? 这一行的基本情况:val myRdd = sc.textFile("s3n://myBucket/myFile1.log") 你回答我一个问题,一个普通的Java程序如何从本地文件系统中读取数据,分块或一次完全读取。 1. S3、HDFS 是类似 ext3 的文件系统。 2.它永远不会下载文件,它会以小块的形式读取。 3. S3是一个远程FileSystem,在这种情况下没有数据Locality。 4. 请把基础打一遍,否则所有的概念都会显得很复杂

以上是关于spark如何加载大于集群磁盘大小的输入文件?的主要内容,如果未能解决你的问题,请参考以下文章

当Spark从S3读取大文件时,可以将数据分发到不同的节点

VMware Workstation 无法打开需要被该虚拟机使用的某一个虚拟磁盘,因为它的文件大小大于主机文件系统支持

AWS Redshift:如何存储大小大于 100K 的文本字段

在本地文件系统(不是HDFS)中使用Scala读取Apache Spark中的文件时如何更改输入块大小[重复]

如何在dos下查看磁盘分区和大小

linux 磁盘空间不足时,查找大文件