hive如何存储数据以及serde是什么?

ocebsuys  于 2021-06-04  发布在  Hadoop
关注(0)|答案(4)|浏览(384)

查询表时,serde会将文件中字节中的一行数据反序列化为配置单元内部用于对该行数据进行操作的对象。当执行insert或cta时(请参阅第441页的“导入数据”),表的serde将把hive对一行数据的内部表示序列化为写入输出文件的字节。
塞德是图书馆吗?
配置单元如何存储数据(即存储在文件或表中)?
谁能把这些粗体的句子解释清楚吗?我刚到Hive!!

mnemlml8

mnemlml81#

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

gfttwv5a

gfttwv5a2#

答案
是的,serde是一个内置于hadoopapi的库
hive使用hdfs或任何其他存储(ftp)之类的文件系统来存储数据,这里的数据是以表的形式(有行和列)存储的。
serde-serializer,反序列化程序指示配置单元如何处理记录(行)。hive还支持半结构化(xml、电子邮件等)或非结构化记录(音频、视频等)的处理。例如,如果您有1000 gb的rss提要(rss XML)。您可以将它们摄取到hdfs中的某个位置。您需要基于xml结构编写一个定制serde,以便hive知道如何将xml文件加载到hive表或其他方式。
有关如何编写serde的更多信息,请阅读本文

wwwo4jvm

wwwo4jvm3#

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

j91ykkif

j91ykkif4#

hive还可以分析半结构化和非结构化数据(1)使用复杂数据类型(struct、array、unions)(2)使用serde
serde接口允许我们指示hive如何处理记录。序列化程序将获取hive正在处理的java对象,并将其转换为hive可以存储的对象,反序列化程序获取记录的二进制表示,并将其转换为hive可以操作的java对象。

相关问题