请解释 Hive 中 SerDe 的概念,并阐述它在数据读写流程中的功能。
考察说明
考查对 Hive 序列化与反序列化机制的理解,以及其如何影响数据读写。
回答思路
- 【回答框架 1】SerDe 是 Serializer/Deserializer 的缩写,用于定义 Hive 表数据行与存储格式之间的转换:反序列化将文件中的字节转换为 Hive 行的 Java 对象,序列化将 Hive 行写回存储。
- 【回答框架 2】在读取数据时,Hive 通过 SerDe 解析文件,将字节流映射为表的列;在写入数据时,将行对象序列化为存储格式(如文本、JSON、Avro 等)。
- 【回答框架 3】SerDe 通常与 InputFormat 和 OutputFormat 配合:InputFormat 决定记录如何切分,SerDe 决定每条记录如何映射为列;写入过程相反。
- 【回答框架 4】不同 SerDe 适应不同数据格式,如 LazySimpleSerDe 用于文本,JsonSerDe 用于 JSON,AvroSerDe 用于 Avro。选择不当可能导致解析错误或性能下降。
- 【关键点 1】SerDe 包含序列化和反序列化,用于 Hive 行与文件字节的转换。
- 【关键点 2】读取文件时先由 InputFormat 切分记录,再由 Deserializer 将记录映射为行对象。
- 【关键点 3】写入数据时由 Serializer 将行对象转换为字节,配合 OutputFormat 写入文件。
- 【易错点 1】SerDe 只负责行与格式的转换,文件切分和存储布局由 InputFormat/OutputFormat 负责。
- 【易错点 2】不同 SerDe 对数据类型和格式的支持有差异,需要匹配实际数据,否则可能解析失败。