Hive 解析 JSON 数据

发布于 2024-05-16 03:49:50 字数 2372 浏览 36 评论 0

这里使用 Read - Write JSON SerDe for Apache Hive 来在 hive 里使用 JSON​。

分两个 theme:

  • hive
  • hadoop

Hive 这块安装:

$ cd $HIVE_HOME/lib
$ wget  http://www.congiu.net/hive-json-serde/1.3.8/cdh5/json-serde-1.3.8-jar-with-dependencies.jar 
$ wget  http://www.congiu.net/hive-json-serde/1.3.8/cdh5/json-udf-1.3.8-jar-with-dependencies.jar 

数据结构是这样的:

{
    "_ip":"39.107.245.223",
    "ua":"Windows NT 6.1; WOW64",
    "timestamp":1536649070251,
    "message":{
        "event":"trace"
    },
    "uid":"abcde"
}

创建 schema

CREATE EXTERNAL TABLE `demo`( 
    `ua` string,
    `timestamp` string,
    `message` map<string, string>,
    `uid` string
)
PARTITIONED BY (`dt` string) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("ignore.malformed.json" = "true")
STORED AS TEXTFILE;

添加 jar 到 hive classpath 中

hive> add jar /opt/hive/apache-hive-2.2.0-bin/lib/json-udf-1.3.8-jar-with-dependencies.jar;
hive > add jar /opt/hive/apache-hive-2.2.0-bin/lib/json-serde-1.3.8-jar-with-dependencies.jar;

添加分区:

alter table demo add partition(dt=20180911) LOCATION '/data/events/demo/dt=20180911'

Hadoop 需要直接把 jar 包放在 $HADOOP_HOME/share/hadoop/mapreduce/ 下即可,否则会出现如下问题,如聚合查询 hive

hive> SELECT count(*) FROM demo WHERE dt='20181010';

Caused by: java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not found
        at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2103)
        at org.apache.hadoop.hive.ql.plan.PartitionDesc.getDeserializer(PartitionDesc.java:177)
        at org.apache.hadoop.hive.ql.exec.MapOperator.getConvertedOI(MapOperator.java:295)
        ... 24 more

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

中二柚

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文