1

我的数据存储在 HDFS 目录 /tmp/kafka/alert 的多个文件中。每个文件都包含换行符分隔的 JSON 对象,如下所示。

{"alertHistoryId":123456,"entityId":123,"deviceId":"123","alertTypeId":1,"AlertStartDate":"Dec 28, 2016 12:05:48 PM"}
{"alertHistoryId":123456,"entityId":125,"deviceId":"125","alertTypeId":5,"AlertStartDate":"Dec 28, 2016 11:58:48 AM"}

我使用下面添加了配置单元 JSON SerDe jar

ADD JAR /usr/local/downloads/hive-serdes-1.0-SNAPSHOT.jar;

我创建了以下表格

CREATE EXTERNAL TABLE IF NOT EXISTS my_alert (
alertHistoryId bigint, entityId bigint, deviceId string, alertTypeId int,  AlertStartDate string
)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/tmp/kafka/alert';

表创建成功。但是当我获取数据时,我得到了所有空值。有人知道如何解决这个问题吗?

4

2 回答 2

1

不要使用Serde添加 Jar 并转换它们总是开销。而不是您可以使用内置的get_json_objectjson_tuple读取 JSON。如果您正在寻找如何使用的示例,请参阅此博客querying -json-records-via-hive

如果您只想使用 JSON Serde,请查看此Hive-JSON-Serde。在测试之前首先验证JSON Validator

于 2016-12-29T08:59:01.093 回答
0

您正在使用旧版本的 JSON Serde。您的 JSON Serde 和 Hadoop 发行版可能存在问题。请在下面的链接中找到新版本的 Json Serde。按照链接中的步骤,根据您的 Hadoop 发行版构建它。

https://github.com/rcongiu/Hive-JSON-Serde

请参阅下面的工作示例。

hive> add jar /User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar;
Added [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar] to class path
Added resources: [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar]
hive> use default;
OK
Time taken: 0.021 seconds
hive> CREATE EXTERNAL TABLE IF NOT EXISTS json_poc (
    > alertHistoryId bigint, entityId bigint, deviceId string, alertTypeId int,  AlertStartDate string
    > )
    > ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    > LOCATION '/User/User1/sandeep_poc/hive_json';
OK
Time taken: 0.077 seconds
hive> select * from json_poc;
OK
123456  123     123     1       Dec 28, 2016 12:05:48 PM
123456  125     125     5       Dec 28, 2016 11:58:48 AM
Time taken: 0.052 seconds, Fetched: 2 row(s)
hive>

如何构建罐子。

Maven 应该安装在您的 PC 上,然后像这样运行命令。

C:\Users\User1\Downloads\Hive-JSON-Serde-develop\Hive-JSON-Serde-develop>mvn -Phdp23 clean package

就我而言,我使用的是 hdp2.3,所以我提供了-Phdp23

如果您愿意使用 Hive JSON Serde,希望它会有所帮助。

于 2016-12-29T09:57:59.000 回答