gpt4 book ai didi

hadoop - 如何将大型 xml 文件解压缩到一个 HDFS 目录中

转载 作者:可可西里 更新时间:2023-11-01 15:10:08 25 4
gpt4 key购买 nike

我需要从 HDFS 目录加载 Zip 文件,将其解压缩并在包含所有解压缩文件的单个目录中写回 HDFS。这些文件是 XML,大小以 GB 为单位。

首先,我通过编写自定义 InputFormat 和自定义 RecordReader 来实现 Map-Reduce 程序来解压缩文件并将这些内容提供给映射器,此后每个映射器处理并使用 MultiOutput 格式写入 HDFS。在 YARN 上运行的 map reduce 作业。

当输入大小为 MB 时,这种方法工作正常并且能够在 HDFS 中获取解压缩格式的文件,但当输入大小为 GB 时,作业无法写入并以以下错误结束。

17/06/16 03:49:44 INFO mapreduce.Job:  map 94% reduce 0%
17/06/16 03:49:53 INFO mapreduce.Job:  map 100% reduce 0%
17/06/16 03:51:03 INFO mapreduce.Job: Task Id : attempt_1497463655394_61930_m_000001_2, Status : FAILED
Container [pid=28993,containerID=container_e50_1497463655394_61930_01_000048] is running beyond physical memory limits. Current usage: 2.6 GB of 2.5 GB physical memory used; 5.6 GB of 12.5 GB virtual memory used. Killing container.

很明显,每个解压缩的文件都由一个映射器和运行映射器的 yarn 子容器处理,无法在内存中保存大文件。

另一方面,我想尝试在 Spark 上解压缩文件并将解压缩的文件写入在 YARN 上运行的单个 HDFS 目录,我也想知道 spark,每个执行程序都必须处理单个文件。

我正在寻找并行处理文件的解决方案,但最后将其写入单个目录。

请让我知道这在 Spark 中是可能的,并与我分享一些代码片段。

感谢任何帮助。

最佳答案

Actually, the task itself is not failing! YARN is killing the container (inside map task is running) as that Yarn child using more memory than requested memory from YARN. As you are planning to do it in Spark, you can simply increase the memory to MapReduce tasks.


我会推荐给你

  • 在处理 GB 级数据和一些关键属性时增加 YARN 子内存

    • yarn.nodemanager.resource.memory-mb => 容器内存
    • yarn.scheduler.maximum-allocation-mb => 容器内存最大值
    • mapreduce.map.memory.mb => 映射任务内存(必须小于 yarn.scheduler.maximum-allocation-mb在运行时的任何时间)
  • 仅针对此作业专注于数据处理(解压缩),调用另一个作业/命令来合并文件。

关于hadoop - 如何将大型 xml 文件解压缩到一个 HDFS 目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44905625/

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