Hive 序列化与反序列化:数据的 “打包“ 与 “拆箱“ 艺术

一、序列化与反序列化:数据的 "快递运输" 哲学

(1)大佬的灵魂拷问:对象为啥要序列化?

想象一下:你要把一只活蹦乱跳的兔子从北京快递到上海,直接扔箱子里肯定不行 ------ 对象在内存里是 "活物",但要存硬盘、走网络就得先 "打包" 成字节流。这就是序列化的核心使命!

在 Hive 的世界里:

  • 序列化 = 把对象变成 HDFS 能存的格式(比如 insert 操作,给数据 "穿快递箱")
  • 反序列化 = 把 HDFS 数据变回对象(比如 select 查询,拆包裹取数据)

(2)Java、MapReduce、Hive 的 "序列化内卷"

  • Java 序列化:implements Serializable,就像用棉被裹兔子,包装贼厚(数据量大)
  • MapReduce 的 Writable:自己搞了套轻量级包装,用真空袋压缩(效率更高)
  • Hive 的 Serde:数据界的 "快递分拣中心",按不同格式(分隔符)决定怎么打包拆包

(3)Hive 的 "快递流水线" 工作流程

select 查询(反序列化流水线):

HDFS 文件 → InputFileFormat(拆箱工人)→ <key,value> 包裹 → Deserializer(翻译官)→ Row 对象(还原数据真身)

insert 插入(序列化流水线):

Row 对象 → Serializer(打包机)→ <key,value> 包裹 → OutputFileFormat(快递柜)→ HDFS 存储

划重点:分隔符就是快递单上的 "收件地址",Serde 靠它判断怎么拆包!比如 "1 | 张三 | 20" 里的 "|" 就是告诉 Serde:"这里该拆包分字段了!"

二、Serde 图鉴:从逗号到 JSON 的全格式攻略

(1)Serde 的本质:数据界的 "语言翻译官"

Serde 是 "Serializer and Deserializer" 的缩写,相当于数据的双语翻译:

  • 面对不同格式的数据(csv/tsv/json),用不同的 Serde 类解析
  • 默认翻译官是 LazySimpleSerDe,用的是神秘分隔符 ^A(\001),这玩意儿是 Hive 的 "内部暗号"
sql 复制代码
1001^Azs^A23
1002^Alisi^A24
--这里不要直接复制,必须要手打,不然^A会被识别为字符串
--使用ctrl+v可以输出^   ctrl+A可以输出A

(2)Serde 家族成员大揭秘

① 逗号分隔符 CSV:最接地气的打工人
  • 特点:用逗号 "," 分割字段,像菜市场报菜价 "白菜,3 块,5 斤"
  • 对应 Serde:OpenCSVSerde,支持自定义分隔符(比如用数字 7 当分隔符,玩点花活)
  • 建表语句示范
sql 复制代码
CREATE TABLE csv_table(
  id INT,
  name STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  "separatorChar" = ","--这里引号里的内容可以自定义,输入什么就以什么作为分隔符
);
② JSON Serde:职场里的 "全能型选手"
  • 重要程度:面试必问,工作常用,堪称 Serde 界的 "卷王"
  • 两种实现方式

(1) 将jar包放置在/opt/modules文件夹下,然后在hive中执行如下命令:

add jar /opt/modules/json-serde-1.3.8-jar-with-dependencies.jar;

建表时引用row format serde 'org.openx.data.jsonserde.JsonSerDe';
(2)Hive 自带 JsonSerDe:但有坑!只支持 string 类型,number 会报错(就像只会说普通话的翻译,听不懂方言)

虽然名字一样,但包不一样row format serde 'org.apache.hive.hcatalog.data.JsonSerDe';

  • 实战口诀:遇到 JSON 别慌,先扔 jar 包再配置,报错就查 ClassNotFound(缺 jar 包的经典症状)

假如你不会使用 jsonSerder,而对方确实给了你一个 json 文件,阁下应该如何应对?

答:暴力拆解

sql 复制代码
1、新建一个表,这个表中只有一个字段
create table json3(
  line string
);
load 数据
2、查询时,使用get_json_object 来处理
select get_json_object(line,'$.属性1'),get_json_object(line,'$.属性2')....   from json3;
3、将解析出来的属性,插入另一个表格中。

实战演示:
load data local inpath '/home/hivedata/json1.txt' into table json3;
select * from json3;
select get_json_object(line,'$.uid') uid,
       get_json_object(line,'$.uname') uname,
       get_json_object(line,'$.age') age
from json3;
③ 正则 Serde:数据界的 "找茬大师"
  • 技能:按正则表达式解析数据,专治格式不规范的 "刺头数据"
  • 使用场景:日志文件解析(比如 "2025-05-28 10:00:00 INFO [hive] query success")
  • 建表核心 :用正则表达式定义字段分割规则,比如'^([^,]+),([^,]+),([^,]+)$'

(3)默认分隔符 ^A 的 "神秘面纱"

  • 真面目:ASCII 码中的控制字符,八进制表示为 \001,长得像 "^A"
  • 使用场景:Hive 表默认用它当分隔符,比如原生表加载数据时
  • 注意事项:用其他分隔符时一定要显式声明,否则 Hive 会拿 ^A 硬拆包,结果就是数据错乱(好比用菜刀拆巧克力包装,拆是拆开了但全碎了)

三、大佬经验之谈:Serde 避坑指南

  1. JSON 坑王警告:Hive 自带 JsonSerde 只认 string,遇到数字会报错,解决方案:

    • 要么用第三方 jar(推荐)
    • 要么提前把数字转成 string(麻烦但能凑活)
  2. 分隔符冲突处理 :如果数据里本身有分隔符(比如 CSV 里的字段包含逗号),记得用ESCAPE '\\'设置转义字符,不然 Serde 会拆错包

  3. jar 包部署规范:第三方 Serde 的 jar 包必须放 hive/lib 下,然后重启 metastore 和 hiveserver2 服务(相当于让 Hive 重启后认识新翻译官)

四、灵魂拷问:为什么 Serde 这么重要?

打个比方:Hive 是数据餐厅,Serde 就是厨师的刀工 ------

  • 不管是 CSV 的 "土豆丝"(逗号分隔)
  • 还是 JSON 的 "宫保鸡丁"(嵌套结构)
  • 亦或正则的 "雕花萝卜"(复杂格式解析)

Serde 决定了 Hive 能不能把数据 "切" 成正确的字段。记住:建表时指定 Serde,就是告诉 Hive 用什么刀工处理你的数据

最后送大家一句口诀:

"序列化打包发快递,反序列化拆包取东西,Serde 分隔符是关键,JSON 正则各显神通~"

相关推荐
yumgpkpm4 小时前
CMP(类Cloudera CDP 7.3 404版华为Kunpeng)与其他大数据平台对比
大数据·hive·hadoop·elasticsearch·kafka·hbase·cloudera
陈辛chenxin9 小时前
【大数据技术06】大数据技术
大数据·hadoop·分布式·python·信息可视化
yumgpkpm9 小时前
Hadoop在AI时代如何实现生态协同? CMP 7.13(或类 Cloudera CDP7.3 的 CMP 7.13 平台,如华为鲲鹏 ARM 版)
大数据·hadoop·elasticsearch·zookeeper·kafka·hbase·cloudera
piepis17 小时前
Doris Docker 完整部署指南
数据仓库·docker·doris·容器部署
qqxhb1 天前
系统架构设计师备考第68天——大数据处理架构
大数据·hadoop·flink·spark·系统架构·lambda·kappa
yumgpkpm1 天前
Hadoop大数据平台在中国AI时代的后续发展趋势研究CMP(类Cloudera CDP 7.3 404版华为鲲鹏Kunpeng)
大数据·hive·hadoop·python·zookeeper·oracle·cloudera
凯子坚持 c1 天前
基于VMware与CentOS 7的Hadoop集群部署全景指南
linux·hadoop·centos
KANGBboy2 天前
ES 总结
hive·elasticsearch
FeelTouch Labs2 天前
数据仓库和数据集市之ODS、CDM、ADS、DWD、DWS
数据仓库
大数据CLUB2 天前
酒店预订数据分析及预测可视化
大数据·hadoop·分布式·数据挖掘·数据分析·spark·mapreduce