美文网首页
Hive JsonSerde

Hive JsonSerde

作者: TTTing听 | 来源:发表于2018-02-04 19:49 被阅读0次

数据直接写入HDFS,通过Hive External关联数据源是一种常见的数据写入方案。本文介绍通过Hive External表关联HDFS json数据源的方案和一些常见问题。

Serde

Hive Serde 是一个HiveDeserializer and HiveSerializer接口的集合, 负责将输入的数据序列化成规定的数据格式,或则将输入的数据反序列化成规定的格式。JsonSerde就是实现了Serde接口

image.png

hive执行sql查询,加载数据的时候会通过Serde将本地数据序列化成HCatRecord返回给Hive.

image.png

JsonSerde的deserialize的函数实现通过JsonParser类,解析json数据,填充DefaultHCatRecord.

使用Hive自带的Jsonserde

修改hive-site.xml,增减jsonserde jar包

<property>
   <name>hive.aux.jars.path</name>
   <value>[file:///Users/titengjiang/Documents/DeveloperTool/hive/apache-hive-1.2.2-bin/lib/hive-hcatalog-core-1.2.2.jar</value>](http://file:///Users/titengjiang/Documents/DeveloperTool/hive/apache-hive-1.2.2-bin/lib/hive-hcatalog-core-1.2.2.jar</value>)
</property>

创建表

CREATE EXTERNAL TABLE if not exists hiveJsonserdeDemo (
    col1 string,
    col2 string,
    col3 string,
    col4 string,
    col5 string,
    col6 bigint,
    col7 bigint,
    col8 bigint,
    col9 bigint,
    col10 bigint
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 'hdfs://localhost:9000/demo/hive-jsonserde-demo/';

如果没有添加hive.aux.jars.path路径会出现如下错误

Cannot validate serde: org.apache.hive.hcatalog.data.jsonSerde

image.png

写入正常测试数据,每个json通过\n分割

image.png

通过hive beeline查询刚才写入的数据

image.png

发现数据正常写入

hive jsonserde常见的问题

hive查询时候遇到错误JSON格式数据整个任务会终止

意思说如果插入数据中有某个json发生损坏整个查询会发生异常导致中断,下面例子我们模拟写入一个错误格式的json数据看下会出现什么问题。

image.png

写入完成后再次查询出现如下异常

Error: java.io.IOException: org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: Unexpected character

image.png

解决办法是通过替换Jsonserde实现来完成,因为数据写入中难免会出现异常数据。会再之后详细介绍。

写入的每条JSON必须分割,否者无法解析
image.png

通过模拟写入不分割JSON数据测试

image.png

发现写入的数据都已经损坏无法独读出###使用Hive自带的Jsonserde

使用Hive自带的org.openx.data.jsonserde.JsonSerDe替换重新测试

下载org.openx.data.jsonserde.JsonSerDe jar 按照上面办法添加到Aux path中

CREATE EXTERNAL TABLE if not exists hiveJsonserdeDemo (
    col1 string,
    col2 string,
    col3 string,
    col4 string,
    col5 string,
    col6 bigint,
    col7 bigint,
    col8 bigint,
    col9 bigint,
    col10 bigint
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 'hdfs://localhost:9000/demo/hive-jsonserde-demo/';

测试写入错误格式json数据

image.png

发现错误数据不会影响sql正常运行

相关资源

org.openx.data.jsonserde.JsonSerDe下载地址:https://github.com/rcongiu/Hive-JSON-Serde

测试demo下载地址:https://github.com/ttting/hive-jsonserde-demo

相关文章

  • Hive JsonSerde

    数据直接写入HDFS,通过Hive External关联数据源是一种常见的数据写入方案。本文介绍通过Hive Ex...

  • 数据仓库Hive

    Hive产生背景 Hive概述 HIve体系架构 Hive部署架构 Hive和RDBMS区别 Hive部署以及快速...

  • 数据查询-Hive基础

    outline 什么是Hive 为什么需要Hive Hive的架构 Hive的常用操作 什么是Hive Hive由...

  • 大数据知识 | hive初识

    hive简介 hive架构 hive是什么 官网这样说:https://hive.apache.org/ hive...

  • Hive | Hive 安装详解

    一、Hive 介绍 二、准备工作 三、Hive下载 四、Hive 安装 五、Hive 启动 一、Hive 介绍 H...

  • Hive日常使用

    hive 创建表: hive 执行: =========================hive 调用Python...

  • Hive常用的几种交互操作

    查看hive下的交互命令方式 -help(hive 外) 命令:bin/hive -helpusage: hive...

  • 【Hive】

    Hive的安装 Hive官网地址 http://hive.apache.org/[http://hive.apac...

  • Hive进阶

    hive配置,命令 hive查询显示列名 hive默认分隔符 \001 hive命令行中查看当前hive环境变量 ...

  • Hive 入门

    Hive官网 Hive概述 Hive 的底层执行引擎有 :MapReduce,Tez,Spark- Hive on...

网友评论

      本文标题:Hive JsonSerde

      本文链接:https://www.haomeiwen.com/subject/dgqvzxtx.html