12

查询表时,SerDe 会将文件中的字节中的一行数据反序列化为 Hive 内部使用的对象,以对该行数据进行操作。在执行 INSERT 或 CTAS(请参阅第 441 页的“导入数据”)时,表的 SerDe 会将Hive 的一行数据的内部表示序列化为写入输出文件的字节

  1. 是 serDe 库吗?
  2. 蜂巢如何存储数据,即它存储在文件或表中?
  3. 请任何人都可以清楚地解释粗体句子吗?我是新来的蜂巢!
4

4 回答 4

13

答案

  1. 是的,SerDe 是一个内置于 Hadoop API 的库
  2. Hive 使用 HDFS 或任何其他存储 (FTP) 之类的文件系统来存储数据,这里的数据采用表的形式(具有行和列)。
  3. SerDe - 序列化器,反序列化器指示 hive 如何处理记录(行)。Hive 还支持处理半结构化(XML、电子邮件等)或非结构化记录(音频、视频等)。例如,如果您有 1000 GB 的 RSS 源 (RSS XML)。您可以将它们摄取到 HDFS 中的某个位置。您需要根据您的 XML 结构编写自定义 SerDe,以便 Hive 知道如何将 XML 文件加载到 Hive 表或其他方式。

有关如何编写 SerDe 的更多信息,请阅读这篇文章

于 2013-01-30T15:08:18.847 回答
9

在这方面,我们可以将 Hive 视为某种数据库引擎。该引擎正在处理由记录构建的表。
当我们让 Hive(以及任何其他数据库)以自己的内部格式工作时 - 我们不在乎。
当我们希望 Hive 将我们自己的文件作为表(外部表)处理时,我们必须让他知道 - 如何将文件中的数据转换为记录。这正是 SerDe 的作用。您可以将其视为使 Hive 能够读取/写入数据的插件。
例如 - 您想使用 CSV。这是 CSV_Serde 的示例 https://github.com/ogrodnek/csv-serde/blob/master/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java 方法序列化将读取数据,并且假设它是 CSV,将其切成字段
方法反序列化将获取一条记录并将其格式化为 CSV。

于 2013-01-30T15:31:24.987 回答
1

Hive 也可以通过使用 (1) 复杂数据类型(struct,array,unions) (2) 通过使用 SerDe 来分析半结构化和非结构化数据

SerDe 接口允许我们指示 hive 应该如何处理记录。Serializer 将获取 hive 一直在处理的 java 对象,并将其转换为 hive 可以存储的东西,而 Deserializer 将记录的二进制表示形式转换为 hive 可以操作的 java 对象。

于 2017-12-11T18:11:01.520 回答
0

我认为上面有序列化和反序列化的概念。序列化在写入时完成,结构化数据被序列化为位/字节流进行存储。读取时,数据从位/字节存储格式反序列化为读取器所需的结构。例如,Hive 需要看起来像行和列的结构,但 hdfs 将数据存储在位/字节块中,因此在写入时序列化,在读取时反序列化。

于 2016-10-31T19:12:56.393 回答