码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Hive中常用SerDe介绍


    SerDe 是Serializer 和 Deserializer 的简称。它是 Hive用来处理记录并且将它们映射到 Hive 表中的字段数据类型。为了更好的阐述使用 SerDe 的场景,我们需要了解一下 Hive 是如何读写数据的(类似于 HDFS 中数据的读写操作):

    读取数据:

    1. 从 HDFS 读取数据
    2. 通过 InputFormat 来处理数据,根据定义的数据类型来将文件分割成键值对记录。在 Hive 中,我们可以通过 Create Table。。。Stored As <File_Format> 来指定使用哪种 InputFormat 来读取数据。
    3. SerDe 中 JAVA 的 Deserializer 会被调用来格式化数据并且映射到表中对应的字段和数据类型。
      对于数据读取,我们希望使用 JSON SerDe 来从 HDFS 中读取文本文件格式数据,并且根据正确的schema将JSON每一行的属性和值与Hive表中的行进行转换。

    写入数据:

    1. 写入的数据(例如 Insert 语句)会通过 SerDe 定义的 Serlializer 类进行转换成 OutputFormat 类能够读取的格式。
    2. 数据会被OutputFormat 继承类进行处理,创建 RecordWrite 对象。类似于 InputFormat 的实现。OutputFormat 的实现方法跟表写入数据的方式相同。
    3. 将数据写入到表中(数据将保存在 HDFS)
      在实际写入数据的时候,我们可以使用 JSON SerDe来 Hive 表中一个 行列转数据转换成 JSON 文本,保存到 HDFS 中。

    接下来我们将详细介绍一下 Hive中常用的 SerDe :

    1. LazySimpleSerDe: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe,用来处理文本文件格式:TEXTFILE
    CREATE TABLE test_serde_lz STORED AS TEXTFILE AS
    SELECT  name
    FROM employee;
    
    • 1
    • 2
    • 3
    1. ColumnarSerDe: org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe用来处理 RCFile
    CREATE TABLE test_serde_cs 
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' 
    STORED AS RCFile AS
    SELECT  name
    FROM employee
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. OrcSerde:org.apache.hadoop.hive.ql.io.orc.OrcSerde 用来处理 ORCFile
    CREATE TABLE test_serde_parquet
    STORED AS ORCFILE AS
    SELECT name from employee;
    
    • 1
    • 2
    • 3
    1. ParquetHiveSerDe: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe用来在 Hive 中读写 Parquet 数据格式的内置 SerDe。从 Hive 0.13.0 版本开始本地支持。
    CREATE TABLE test_serde_parquet
    STORED AS PARQUET AS
    SELECT name from employee;
    
    • 1
    • 2
    • 3
    1. JSONSerDe: org.openx.data.jsonserde.JsonSerDe这是一个第三方的 SerDe,用来利用 Hive 读取 JSON 数据记录。你可以通知下载源码进行安装(https://github.com/rcongiu/Hive-JSON-Serde)
    CREATE TABLE test_serde_js(
    name string,
    sex string,
    age string
    )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    STORED AS TEXTFILE;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. HBaseSerDe: org.apache.hadoop.hive.hbase.HBaseSerDe内置的 SerDe,可以让 Hive 跟 HBase 进行集成。我们可以利用 HBaseSerDe 来将 Hive 表存储到 HBase 中。
      注意:前提是 HBase 已经安装
    CREATE TABLE test_serde_hb(
    id string,
    name string,
    sex string,
    age string
    )
    ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,info:name,info:sex,info:age")
    TBLPROPERTIES("hbase.table.name" = "test_serde");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    最后,为了应对目前存在的各式各样的数据格式以及数据存储系统。Hive 允许用户可以自定义 SerDe 来处理自己的文件格式。更多关于 自定义SerDe 请参考: https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HowtoWriteYourOwnSerDe .

    当然,为了呼应本次主题,特地跑到 Jira 上搜了一些各个 SerDe 的使用情况,随着大家对这些SerDe的深入研究,需求也越来越多,功能也逐渐被完善着:

    LazySimpleSerDe :https://issues.apache.org/jira/browse/HIVE-292?jql=text%20~%20%22LazySimpleSerDe%22
    ColumnarSerDe : https://issues.apache.org/jira/browse/HIVE-756?jql=text%20~%20%22ColumnarSerDe%22
    HBaseSerDe :https://issues.apache.org/jira/browse/HIVE-6677?jql=text%20~%20%22HBaseSerDe%22
    ParquetHiveSerDe:https://issues.apache.org/jira/browse/HIVE-9333?jql=text%20~%20%22ParquetHiveSerde%22
    JSONSerDe : https://issues.apache.org/jira/browse/HIVE-6166?jql=text%20~%20%22JSONSerDe%22

  • 相关阅读:
    windows编程之TextOut与DrawText -- 文本输出实验
    Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议
    RAG、数据隐私、攻击方法和安全提示
    ExcelBDD Python指南
    大学毕业一年 - 北漂生活
    Google-Spyder:Google搜索引擎关键词检索结果抓取
    SwiftUI 导航教程之如何实现没有 Navigation View的 SwiftUI 导航功能
    [JAVAee]SpringBoot-AOP
    厨卫电器行业S2B2C系统网站解决方案:打造S2B2C平台全渠道商业系统
    (表格固定尾列)bower安装的相关问题
  • 原文地址:https://blog.csdn.net/leen0304/article/details/125610016
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号