当前位置: 首页 > 知识库问答 >
问题:

使用Avro/Parket的Spark作业中的最大行大小

彭硕
2023-03-14

我计划使用Spark来处理数据,其中RDD或数据帧中的每个单独元素/行有时可能很大(高达几GB)。

数据可能会存储在HDFS中的Avro文件中。

显然,每个执行程序都必须有足够的RAM来在内存中保存这些“胖行”中的一个,并留出一些。

但是,Spark/HDFS或常见序列化格式(Avro、拼花、序列文件…)的行大小是否有其他限制?例如,这些格式中的单个条目/行能否比HDFS块大小大得多?

我知道HBase和Cassandra的公开限制,但不是Spark。。。

共有1个答案

方嘉志
2023-03-14

目前,对于正在使用的分区和随机块,与块大小相关的一些基本限制都被限制为2GB,这是字节缓冲区的最大大小(因为它需要int索引,所以被限制为Integer.MAX_VALUE字节)。

单个行的最大大小通常需要比最大块大小小得多,因为每个分区通常包含许多行,并且最大的行可能不会在分区之间均匀分布-如果一个分区偶然包含异常多的大行,这可能会使其超过2GB限制,从而使作业崩溃。

见:

  • 为什么Spark RDD分区对HDFS有2GB的限制

这些Spark问题的相关Jira门票:

  • https://issues.apache.org/jira/browse/SPARK-1476
  • https://issues.apache.org/jira/browse/SPARK-5928
  • https://issues.apache.org/jira/browse/SPARK-6235
 类似资料:
  • 我试图运行火花作业,基本上加载数据在卡桑德拉表。但它也产生了以下错误。

  • 问题内容: 我在詹金斯中可以同时运行的最大作业数是多少? 问题答案: Jenkins作业的最大数量取决于您在主服务器和从服务器中设置的限制。通常,我们会限制核心数量,但是您的里程可能会因可用内存,磁盘速度,SSD的可用性以及源代码的重叠而有所不同。 对于主服务器,这是在“管理詹金斯”>“配置系统”>“执行者数量”中设置的 对于从属(节点),它是在Manage Jenkins>节点>(每个节点)>配

  • 我试图用位于S3上的输入文件创建一个Amazon Transbe作业,该文件的大小是4.3GB,当我试图创建作业时,会显示这个错误。 我可以用我的视频做什么?我应该转换视频,提取音频,还是有什么方法可以用一些AWS服务来做

  • 在一个14节点的Google Dataproc集群中,我有大约600万个名字,它们被两个不同的系统转换为ID:和。每个包含、和。我的目标是生成从到的映射,以便对于每个,对应的是附加到的所有名称中最常见的id。 让我们试着用一个例子来澄清一下。如果我有以下行: 我的目标是生成从到的映射。实际上,与关联的名称是、和,它们分别映射到、,因此是与关联的名称中最常见的映射。同样,将映射到。假设总会有赢家是可

  • 我使用了以下格式的输入数据: 我已经使用以下代码段使用多线程将RDD保存为文本文件: 在本例中,我遇到了以下例外情况

  • 我正在尝试获取给定数组中的最大元素,以下是要求: > var obj={key:[1,2,4]}; 有人能给我解释一下为什么当我把 在IF函数的末尾,我得到了错误:如果属性不存在,应该返回未定义。但是当我把它放在IF函数的开头时,它毫无问题地通过了。