我在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文件是否已损坏或其他任何内容?
答案 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与数据的当前状态同步。