知足常乐

日常学习的记录与分享

Hive中InputFormat、OutputFormat、SerDe用法

Hive中,默认使用的是TextInputFormat,一行表示一条记录。在每条记录(一行中),默认使用^A分割各个字段。

在有些时候,我们往往面对多行,结构化的文档,并需要将其导入Hive处理,此时,就需要自定义InputFormat、OutputFormat,以及SerDe了。

SerDe

Serde是 Serializer/Deserializer的简写。hive使用Serde进行行对象的序列与反序列化。 看一下官网的说明

SerDe is a short name for "Serializer and Deserializer."
Hive uses SerDe (and FileFormat) to read and write table rows.
HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object
Row object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files

从 hdfs files -> 一个hive对象 经过了InputFileFormat 和Deserializer的转化

从hive对象 -> hdfs files 经过了Serializer和OutputFileFormat转化

序列化作用

序列化是对象转换为字节序列的过程。
序列化是字节序列恢复为对象的过程。
对象的序列化主要有两种用途:对象的持久化,即把对象转换成字节序列后保存到文件中;对象数据的网络传送。
除了上面两点, hive的序列化的作用还包括:Hive的反序列化是对key/value反序列化成hive table的每个列的值。Hive可以方便的将数据加载到表中而不需要对数据进行转换,这样在处理海量数据时可以节省大量的时间。

转化过程

  1. hdfs中的files加载到hive中时,使用InputFormat将数据读取进来,解析成一行一行记录->即一行(Row)。
  2. row通过Deserializer 切分为各个字段
  3. hive -> hdfs反向操作(略)

整个过程中的 InputFormat、OutputFormat、SerDe都可以自定义

点赞
  1. 668说道:

    大佬,可以出一个c语言多文件的吗,最近老师让多文件写程序,很头疼。

    1. 小黑说道:

      比较忙不太有时间做这个事情,百度有很多demo可以参照的。我刚看了下百度搜c语言多文件 挺多例子的 你先看下好了

发表评论

电子邮件地址不会被公开。 必填项已用*标注