Hive错误 - 从表中选择*;

时间:2016-06-14 17:27:02

标签: hadoop hive bigdata

我在hive中创建了一个已成功创建的外部表。

create external table load_tweets(id BIGINT,text STRING)
     ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
     LOCATION '/user/cloudera/data/tweets_raw';

但是,当我这样做时:

hive> select * from load_tweets;

我收到以下错误:

  

异常java.io.IOException失败:org.apache.hadoop.hive.serde2.SerDeException:org.codehaus.jackson.JsonParseException:意外字符('O'(代码79)):预期有效值(数字) ,String,array,object,'true','false'或'null')    at [来源:java.io.ByteArrayInputStream@5dfb0646; line:1,column:2] **

请建议我如何解决这个问题。是使用flume创建的twitter o / p文件是否已损坏或其他任何内容?

1 个答案:

答案 0 :(得分:0)

您还需要做两件事。

1)将数据放入文件中(可能使用INSERT)。或许它已经存在了。在任何一种情况下,您都需要

2)来自Hive,msck repair table load_tweets;

对于Hive表,有关数据的模式和其他元信息存储在称为Hive Metastore的内容中 - 它实际上是一个封闭的关系数据库。当您对没有LOCATION关键字(即内部表,而不是外部表)创建的Hive表执行操作时,Hive将自动更新Metastore。

但是大多数Hive用例会导致数据附加到使用其他进程更新的文件,因此外部表很常见。如果在外部创建新分区,则在使用Hive查询它们之前,您需要使用msck repair table <tablename>;强制Metastore与数据的当前状态同步。