hadoop - YARN 上的 Apache Spark : Large number of input data files (combine multiple input files in spark)

标签 hadoop apache-spark hadoop-yarn

需要帮助实现最佳实践。 运行环境如下:

  • 日志数据文件不定期到达。
  • 日志数据文件的大小为 3.9KB 到 8.5MB。平均约为 1MB。
  • 一个数据文件的记录数从13行到22000行。平均约为 2700 行。
  • 数据文件必须在聚合前进行后处理。
  • 可以更改后处理算法。
  • 后处理文件与原始数据文件分开管理,因为后处理算法可能会更改。
  • 执行每日汇总。所有后处理的数据文件必须逐条记录过滤并计算聚合(平均值,最大最小值......)。
  • 由于聚合是细粒度的,所以聚合后的记录数并不是那么少。可以是原始记录数的一半左右。
  • 一次处理后的文件数量可达20万个左右。
  • 数据文件应该能够单独删除。

在一次测试中,我尝试通过 Spark 处理 160,000 个后处理文件,从带有 glob 路径的 sc.textFile() 开始,它因驱动程序进程中的 OutOfMemory 异常而失败。

处理此类数据的最佳做法是什么? 我应该使用 HBase 而不是普通文件来保存后处理数据吗?

最佳答案

我们编写了自己的加载器。它解决了 HDFS 中小文件的问题。它使用 Hadoop CombineFileInputFormat。 在我们的案例中,它将映射器的数量从 100000 减少到大约 3000,并使工作速度显着加快。

https://github.com/RetailRocket/SparkMultiTool

示例:

import ru.retailrocket.spark.multitool.Loaders 
val sessions = Loaders.combineTextFile(sc, "file:///test/*") 
// or val sessions = Loaders.combineTextFile(sc, conf.weblogs(), size = 256, delim = "\n") 
// where size is split size in Megabytes, delim - line break character 
println(sessions.count())

关于hadoop - YARN 上的 Apache Spark : Large number of input data files (combine multiple input files in spark),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24623402/

相关文章:

numpy - 从 numpy 矩阵创建 Spark 数据帧

java - 如何在 Java Spark 中将单行拆分为多行

azure - 如何从Azure的Blob存储将数据上传到Jupyter Notebook?

hadoop - 在 yarn 中启动/停止 Spark 流作业的正确方法是什么?

mapreduce - HBase 需要 mapreduce 还是 yarn?

amazon-ec2 - 如何在亚马逊上托管持久数据存储系统

hadoop fs -ls 隐藏文件

hadoop - 组合器在哪里组合映射器输出 - 在 Map 阶段或 Map-reduce 作业中的 reduce 阶段?

shell - 如何将用户名/密码传递到ambari-server sync-ldap命令中

hadoop - 在 Docker 容器上使用 Hadoop 和 Spark