我打算使用Spark处理数据,其中RDD或DataFrame中的每个元素/行偶尔可能很大(最多几GB)。
数据可能会存储在HDFS中的Avro文件中。
显然,每个执行者必须有足够的RAM来容纳其中一个"胖行"在记忆中,有些是为了备用。
但Spark / HDFS的行大小或常见的序列化格式(Avro,Parquet,Sequence File ...)是否还有其他限制?例如,这些格式的单个条目/行是否可以比HDFS块大小大得多?
我知道已发布的HBase和Cassandra的限制,但不是Spark ...
答案 0 :(得分:1)
目前有一些与块大小相关的基本限制,无论是对于正在使用的分区还是对于shuffle块 - 都限制为2GB,这是ByteBuffer的最大大小(因为它需要一个int
索引,因此仅限于Integer.MAX_VALUE
个字节)。
单个行的最大大小通常需要远小于最大块大小,因为每个分区通常包含许多行,并且最大的行可能不会在分区之间均匀分布 - 如果分区包含的话非常大量的大行,这可能会超过2GB的限制,从而导致工作崩溃。
请参阅:
这些Spark问题的相关Jira票证: