Hadoop面试中6个常见的问题及答案

发表于:2017-2-13 10:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小峰    来源:51Testing软件测试网采编

  存储数据
  数据可以存储在 HDFS 或 NoSQL 数据库,如 HBase。HDFS 针对顺序访问和“一次写入和多次读取”的使用模式进行了优化。HDFS 具有很高的读写速率,因为它可以将 I / O 并行到多个驱动器。HBase 在 HDFS 之上,并以柱状方式将数据存储为键/值对。列作为列家族在一起。HBase 适合随机读/写访问。在 Hadoop 中存储数据之前,你需要考虑以下几点:
  1、数据存储格式:有许多可以应用的文件格式(例如 CSV,JSON,序列,AVRO,Parquet 等)和数据压缩算法(例如 snappy,LZO,gzip,bzip2 等)。每个都有特殊的优势。像 LZO 和 bzip2 的压缩算法是可拆分的。
  2、数据建模:尽管 Hadoop 的无模式性质,模式设计依然是一个重要的考虑方面。这包括存储在 HBase,Hive 和 Impala 中的对象的目录结构和模式。Hadoop 通常用作整个组织的数据中心,并且数据旨在共享。因此,结构化和有组织的数据存储很重要。
  3、元数据管理:与存储数据相关的元数据。
  4、多用户:更智能的数据中心托管多个用户、组和应用程序。这往往导致与统治、标准化和管理相关的挑战。
  处理数据
  Hadoop 的处理框架使用 HDFS。它使用“Shared Nothing”架构,在分布式系统中,每个节点完全独立于系统中的其他节点。没有共享资源,如 CPU,内存以及会成为瓶颈的磁盘存储。Hadoop 的处理框架(如 Spark,Pig,Hive,Impala 等)处理数据的不同子集,并且不需要管理对共享数据的访问。 “Shared Nothing”架构是非常可扩展的,因为更多的节点可以被添加而没有更进一步的争用和容错,因为每个节点是独立的,并且没有单点故障,系统可以从单个节点的故障快速恢复。
  Q6.你会如何选择不同的文件格式存储和处理数据?
  设计决策的关键之一是基于以下方面关注文件格式:
  使用模式,例如访问 50 列中的 5 列,而不是访问大多数列。
  可并行处理的可分裂性。
  块压缩节省存储空间 vs 读/写/传输性能
  模式演化以添加字段,修改字段和重命名字段。
  CSV 文件
  CSV 文件通常用于在 Hadoop 和外部系统之间交换数据。CSV 是可读和可解析的。 CSV 可以方便地用于从数据库到 Hadoop 或到分析数据库的批量加载。在 Hadoop 中使用 CSV 文件时,不包括页眉或页脚行。文件的每一行都应包含记录。CSV 文件对模式评估的支持是有限的,因为新字段只能附加到记录的结尾,并且现有字段不能受到限制。CSV 文件不支持块压缩,因此压缩 CSV 文件会有明显的读取性能成本。
  JSON 文件
  JSON 记录与 JSON 文件不同;每一行都是其 JSON 记录。由于 JSON 将模式和数据一起存储在每个记录中,因此它能够实现完整的模式演进和可拆分性。此外,JSON 文件不支持块级压缩。
  序列文件
  序列文件以与 CSV 文件类似的结构用二进制格式存储数据。像 CSV 一样,序列文件不存储元数据,因此只有模式进化才将新字段附加到记录的末尾。与 CSV 文件不同,序列文件确实支持块压缩。序列文件也是可拆分的。序列文件可以用于解决“小文件问题”,方式是通过组合较小的通过存储文件名作为键和文件内容作为值的 XML 文件。由于读取序列文件的复杂性,它们更适合用于在飞行中的(即中间的)数据存储。
  注意:序列文件是以 Java 为中心的,不能跨平台使用。
  Avro 文件
  适合于有模式的长期存储。Avro 文件存储具有数据的元数据,但也允许指定用于读取文件的独立模式。启用完全的模式进化支持,允许你通过定义新的独立模式重命名、添加和删除字段以及更改字段的数据类型。Avro 文件以 JSON 格式定义模式,数据将采用二进制 JSON 格式。Avro 文件也是可拆分的,并支持块压缩。更适合需要行级访问的使用模式。这意味着查询该行中的所有列。不适用于行有 50+ 列,但使用模式只需要访问 10 个或更少的列。Parquet 文件格式更适合这个列访问使用模式。
  Columnar 格式,例如 RCFile,ORC
  RDBM 以面向行的方式存储记录,因为这对于需要在获取许多列的记录的情况下是高效的。如果在向磁盘写入记录时已知所有列值,则面向行的写也是有效的。但是这种方法不能有效地获取行中的仅 10% 的列或者在写入时所有列值都不知道的情况。这是 Columnar 文件更有意义的地方。所以 Columnar 格式在以下情况下工作良好
  在不属于查询的列上跳过 I / O 和解压缩
  用于仅访问列的一小部分的查询。
  用于数据仓库型应用程序,其中用户想要在大量记录上聚合某些列。
  RC 和 ORC 格式是专门用 Hive 写的而不是通用作为 Parquet。
  Parquet 文件
  Parquet 文件是一个 columnar 文件,如 RC 和 ORC。Parquet 文件支持块压缩并针对查询性能进行了优化,可以从 50 多个列记录中选择 10 个或更少的列。Parquet 文件写入性能比非 columnar 文件格式慢。Parquet 通过允许在最后添加新列,还支持有限的模式演变。Parquet 可以使用 Avro API 和 Avro 架构进行读写。
  所以,总而言之,相对于其他,你应该会更喜欢序列,Avro 和 Parquet 文件格式;序列文件用于原始和中间存储,Avro 和 Parquet 文件用于处理。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号