gpt4 book ai didi

apache-spark - Spark sql : GC overhead limit exceeded when reading parquet partitioned files

转载 作者:行者123 更新时间:2023-12-04 12:03:37 26 4
gpt4 key购买 nike

我正在尝试使用我的 POC 的 spark sql 从 hdfs 读取现有的 Parquet 文件,但遇到了 OOM 错误。

我需要读取给定分区日期的所有分区文件。分区如下:date/file_dir_id

  • 日期文件夹下有1200个子文件夹
  • 所有这些文件夹下总共有 234769 个 .parquet 文件(不是很大)
  • 所有 .parquet 文件的总大小为 10g

  • Parquet 文件夹结构
  • 日期
  • 文件目录_1
  • File_1.parquet
  • File_2.parquet
  • 文件目录_2
  • File_3.parquet
  • File_3.parquet

  • 当我尝试读取特定日期的文件时,上面提到的数字
    sparkSession.read().schema(someSchema).parquet(hdfs_path_folder/date=2018-03-05/*);//我收到下面提到的错误。

    其他详情
  • 以 yarn /集群模式运行
  • Spark 2.3
  • 4 节点集群(32 核/128 GB)
  • 5 个执行器/每个 4 核

  • 如果我增加驱动程序内存或执行程序内存没有帮助。关于如何克服这个问题有什么帮助吗?

    错误详情
    java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.Arrays.copyOf(Unknown Source)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
    at java.lang.AbstractStringBuilder.append(Unknown Source)
    at java.lang.StringBuffer.append(Unknown Source)
    at java.net.URI.appendSchemeSpecificPart(Unknown Source)
    at java.net.URI.toString(Unknown Source)
    at java.net.URI.<init>(Unknown Source)
    at org.apache.hadoop.fs.Path.initialize(Path.java:203)
    at org.apache.hadoop.fs.Path.<init>(Path.java:172)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3$$anonfun$7.apply(InMemoryFileIndex.scala:235)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3$$anonfun$7.apply(InMemoryFileIndex.scala:228)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3.apply(InMemoryFileIndex.scala:228)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$3.apply(InMemoryFileIndex.scala:227)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$.org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles(InMemoryFileIndex.scala:227)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$.org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$listLeafFiles(InMemoryFileIndex.scala:273)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$1.apply(InMemoryFileIndex.scala:172)
    at org.apache.spark.sql.execution.datasources.InMemoryFileIndex$$anonfun$org$apache$spark$sql$execution$datasources$InMemoryFileIndex$$bulkListLeafFiles$1.apply(InMemoryFileIndex.scala:171)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)

    最佳答案

    当 spark 尝试从 parquet 读取时,它会在内部尝试构建一个
    InMemoryFileIndex
    在 spark 工作中,我们会看到这样的工作

    Listing leaf files and directories for 1200 paths:
    这个问题是因为要扫描的路径数太大
    增加驱动内存和核心为我解决问题
     'driver.cores': 4,
    'driver.memory': '8g'

    关于apache-spark - Spark sql : GC overhead limit exceeded when reading parquet partitioned files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50353559/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com