我正在尝试通过Hive Sink将JSON数据加载到Hive。 但它失败并出现以下错误:
WARN org.apache.hive.hcatalog.data.JsonSerDe: Error [java.io.IOException: Field name expected] parsing json text [{"id": "12345", "url": "https://mysite", "title": ["MyTytle"]}].
INFO org.apache.flume.sink.hive.HiveWriter: Parse failed : Unable to convert byte[] record into Object : {"id": "12345", "url": "https://mysite", "title": ["MyTytle"]}
数据示例:
{"id": "12345", "url": "https://mysite", "title": ["MyTytle"]}
Hive表的描述:
id string
url string
title array<string>
time string
# Partitions
time string
如果JSON数据不包含数组(以及Hive表),它的工作方式也一样。
Flume版本:1.7.0(Cloudera CDH 5.10)
是否可以通过Flume Hive sink加载带阵列的JSON数据?
答案 0 :(得分:0)
是否可以通过Flume Hive sink加载带阵列的JSON数据?
我认为这是可能的,尽管我从未尝试过。从:
https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.0/bk_HDP_RelNotes/content/ch01s08s02.html
为Hive sink提供了以下序列化程序:
JSON:处理UTF8编码的Json(严格语法)事件,并且不需要 组态。 JSON中的对象名称直接映射到列 在Hive表中具有相同的名称。内部使用 org.apache.hive.hcatalog.data.JsonSerDe但是独立于 蜂巢表的Serde。此序列化程序需要HCatalog 安装。
所以也许你在SerDe中实施了一些错误。该用户通过执行先前的regexp解决了使用数组序列化JSON的问题:
你可以尝试的另一件事是改变SerDe。至少你有这两个选项(可能还有一些):