Hive如何存储数据以及什么是SerDe?

时间:2013-01-30 13:49:57

标签: hadoop hive

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

  1. 是serDe库吗?
  2. hive如何存储数据,即存储在文件或表中?
  3. 请允许任何人清楚地解释大胆的句子吗? 我是hive的新手!!

4 个答案:

答案 0 :(得分:10)

答案

  1. 是的,SerDe是一个内置于Hadoop API的库
  2. Hive使用HDFS或任何其他存储(FTP)等文件系统来存储数据,此处的数据采用表格形式(包含行和列)。
  3. SerDe - Serializer,Deserializer指示配置单元如何处理记录(Row)。 Hive还可以处理半结构化(XML,电子邮件等)或非结构化记录(音频,视频等)。例如,如果您有1000 GB的RSS源(RSS XML)。您可以将它们摄取到HDFS中的某个位置。您需要根据XML结构编写自定义SerDe,以便Hive知道如何将XML文件加载到Hive表或其他方式。
  4. 有关如何编写SerDe的更多信息,请阅读此post

答案 1 :(得分:6)

在这方面我们可以将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。

答案 2 :(得分:1)

Hive可以使用分析半结构化和非结构化数据 (1)复杂数据类型(结构,数组,联合) (2)使用SerDe

SerDe接口允许我们指示配置文件应如何处理。 Serializer将获取hive一直在使用的java对象,并将其转换为hive可以存储的内容,Deserializer将记录的二进制表示转换为hive可以操作的java对象。

答案 3 :(得分:0)

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