【问题标题】:storage strategy of OCR / Parquet fileOCR/Parquet文件的存储策略
【发布时间】:2016-01-29 10:13:59
【问题描述】:

让我们假设我的 HDFS 块大小等于 256Mb,并且我需要在 OCR/Parquet 文件中存储 20Gb 的数据,将所有数据存储在一个 OCR/Parquet 文件中更好吗?最好将其存储在许多 256Mb(HDFS 块大小)的 ORC/Parquet 文件中?

提前致谢。

【问题讨论】:

  • 如果文件以块大小的倍数存储,HDFS I/O 会更好地工作。太小或太大的文件都不能很好地执行。我会将 20GB 文件视为大文件。对于处理引擎(HIVE、Spark、Mapreduce),保持文件分割极大地提高了性能。尽管 Hadoop 可以拆分大文件,但最好将它们分开,这样可以缩短初始启动时间。
  • 您好,首先感谢您的回答。否则为什么手动拆分文件会提高初始启动时间?如果 M/R 工作这样做有什么区别?
  • 嗨,迈赫迪。请在下面找到我的答案。系统不允许在 cmets 下添加长答案。
  • 非常感谢!我会在下面回答!

标签: hadoop ocr parquet bigdata


【解决方案1】:

Mappers 和 Reducers 负责处理您的核心数据处理需求。资源管理器负责根据输入和您提供的输入类型识别特定作业中涉及的数据,并尝试将其划分为多个任务并管理这些作业的执行。但是,您需要确保您提供的数据经过优化和平均分配,以便资源管理器可以将它们分配给 Mappers。

注意:M/R 优化不仅仅是将数据分成相等的块。但是,这是正确的第一步。

Parquet 和 ORC 通常是从源(TXT、CSV、JSON 等)加载的数据的辅助格式。源文件通常太大或太小(以 KB 为单位。我们有许多必须处理的场景)。因此,我们对它进行最低限度的处理(清理、日期转换等),并使用 MR/HIVE 作业将其存储为 Parquet / ORC 文件。我们使用 mapred 文件大小参数来指定文件大小。它通常是 HDFS 块大小的倍数(在我们的例子中是 64MB)。

优点是

  1. 将数据平均分配给多个映射器可减少映射并减少作业偏差。
  2. 您的 hadoop 平台资源利用率更加均衡。
  3. 在使用适当大小的块时,可以最大限度地减少磁盘溢出、排序和 I/O 问题。

其他说明

  1. ORC / Parquet 是高度专业化的格式,专为快速读取、写入和搜索而编写。
  2. 将 ORC/Parquet 格式与 Snappy、LZO 等压缩算法结合使用时,在大多数情况下,读写性能会提高很多。

【讨论】:

  • 非常感谢,我发现您的回答非常有用!我同意你的总体答案,但为什么我需要确保我提供的数据被平均分配,以便资源管理器可以将它们分配给映射器?资源管理器的责任不是自动将它们分成拆分吗?我认为 ORC/Parquet 擅长读取,但不擅长写入。提前感谢您的回答:),
  • 不客气。资源管理器不是神奇的工具 :) 它尽最大努力划分工作。归根结底,您需要一个高效的系统来处理您的工作量。因此,选择压缩格式、输入类型、分区、分桶等的每一个决定都很重要。了解这些概念有助于构建更好的解决方案。
  • 我主张保持文件较小的关键点是 1. 数据更均匀地分割。资源管理器可以轻松创建任务。通常比使用一个大文件执行得更好。 2. 由于并行化,手动或通过 distcp 移动数据更快。 3. 更好的 I/O 和网络性能。分区和分桶等概念从功能的角度来看文件拆分。我强烈建议你也看看。
  • 酷。如果您对答案感到满意,您可以接受吗?它鼓励社区积极参与。 meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 2011-12-23
  • 1970-01-01
  • 2012-12-10
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多