Hive 如何存储数据,啥是 SerDe?

Posted

技术标签:

【中文标题】Hive 如何存储数据,啥是 SerDe?【英文标题】:How does Hive stores data and what is SerDe?Hive 如何存储数据,什么是 SerDe? 【发布时间】:2013-01-30 13:49:56 【问题描述】:

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

    是 serDe 库吗? hive 如何存储数据,即存储在文件或表中? 请问谁能把粗体的句子解释清楚? 我是新来的蜂巢!

【问题讨论】:

【参考方案1】:

答案

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

有关如何编写 SerDe 的更多信息,请阅读post

【讨论】:

因此 serDe 将(反序列化)将 HDFS 上的文件中的数据字节转换为对象,以便将其存储在 Hive 表中。 Hdfs(文件)----反序列化---->(表)Hive。我说的对吗? hive 中没有 2 个存储,Hives 存储的是 HDFS 中的实际文件。 SerDe 会将数据从文件反序列化为对象,以便可以使用类似 SQL SELECT 的语法对其进行查询。并且可以使用类似 SQL INSERT 的语法将更多数据添加到这些文件中。唯一的存储是驻留在 HDFS for Hive 中的文件。 嗨,shazin,您的意思是说,如果没有 SerDe,您将无法查询 Hive 表。 Hive 将数据存储在 HDFS 上的文件(表)中,当您查询数据和想要插入更多数据时,使用 SerDe(反序列化)。 是的,目前 Hive 默认使用此 SerDes MetadataTypedColumnsetSerDe 用于 CSV 分隔文件。【参考方案2】:

在这方面,我们可以将 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 方法 deserialize 将获取一条记录并将其格式化为 CSV。

【讨论】:

谢谢大卫。你能给我更多关于数据库引擎如何工作的细节,特别是蜂巢。任何博客或pdf? 我不知道一个好的来源,如果你能暗示我可能可以帮助的领域。作为一个起点——我建议阅读有关 mysql 及其可插拔引擎的信息。恕我直言,它是具有更透明架构之一的数据库引擎。关于蜂巢 - 你可以问具体问题,我可能知道。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于Hive 如何存储数据,啥是 SerDe?的主要内容,如果未能解决你的问题,请参考以下文章

Hive之SerDe&Beeline

hive 存储,解析,处理json数据

hive的安装,啥是hive的metastore的远程与本地

为啥 hive 在 Join 操作期间不选择 SerDe JAR?

使用 JSON-SERDE 将 JSON 数据摄取到 Hive

hive的安装,啥是hive的metastore的远程与本地