Flume Hive sink无法使用数组

时间:2017-02-22 13:45:40

标签: hadoop hive flume flume-ng

我正在尝试通过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数据?

1 个答案:

答案 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的问题:

Parse json arrays using HIVE

你可以尝试的另一件事是改变SerDe。至少你有这两个选项(可能还有一些):