Apache spark 如果HDFS文件太大,无法在节点的工作进程中形成RDD,该怎么办?

Apache spark 如果HDFS文件太大,无法在节点的工作进程中形成RDD,该怎么办?,apache-spark,hdfs,Apache Spark,Hdfs,假设有一个20gb的hdfs文件,您有4个节点(每个节点有2gb的ram),那么总共有8gb的可用ram,现在如何将20gb加载为RDD进行处理。hdfs中的20gb文件不是存储为单个20gb文件,而是拆分为可配置大小的hdfs块,默认为128MB 如果文件是可拆分的(如文本、avro、json、ORC、拼花或某些归档格式),那么这些块将分别加载到不同的Spark任务中 如果在执行器中加载了太多数据,则允许数据溢出到磁盘,但在其他情况下,您会受到计划程序和执行器节点可用内存量的限制,否则作业将以

假设有一个20gb的hdfs文件,您有4个节点(每个节点有2gb的ram),那么总共有8gb的可用ram,现在如何将20gb加载为RDD进行处理。

hdfs中的20gb文件不是存储为单个20gb文件,而是拆分为可配置大小的hdfs块,默认为128MB

如果文件是可拆分的(如文本、avro、json、ORC、拼花或某些归档格式),那么这些块将分别加载到不同的Spark任务中


如果在执行器中加载了太多数据,则允许数据溢出到磁盘,但在其他情况下,您会受到计划程序和执行器节点可用内存量的限制,否则作业将以OOM结束。

“如果RAM保留了我的所有数据,为什么我们需要硬盘或数据库?”-RDD是一种内存数据结构,用于处理HDF(或其他类型的存储,如S3或GCS),用于在不同的执行和不同的程序中持久化数据。感谢@Luis Miguel Mejía Suárez,还有一个疑问,如果文件大小太大,无法从HDF中读取,那么它不适合工作人员的节点,该怎么办,即使在分区之后。比如说20gb的hdfs文件,你有4个节点(2gb的ram),那么总共8gb的可用ram,现在如何将20gb加载为RDD进行处理。我不是Spark内部的专家,但是如果你指定的分区太少(意味着每个分区都太大),你会得到内存错误。如果指定多个分区,Spark将加载每个分区进程并将其保存回去-在任何情况下,这都是糟糕的体系结构,Spark的设计目的是将所有数据保留在内存中以加快速度。在指定分区的情况下,我对这两种情况感到困惑,案例1:分区的数量是以数字的形式决定的吗(假设我有20gb的文件,我需要5个分区)或情况2:(假设我有20gb的文件,我需要每个2gb大小的分区,我不在乎有多少个分区)问题是,当数据大于集群内存时,spark是如何管理的?@LuisMiguelMejíaSuárez@LuisMiguelMejíaSuárez,如果你能看看的话