小编Mat*_*t R的帖子

Parquet支持的表被破坏 - HIVE - 尾部预期的幻数[80,65,82,49],但发现[1,92,78,10]

经销:CDH-4.6.0-1.cdh4.6.0.p0.26 Hive版本:0.10.0实木复合地板版本:1.2.5

我有两个大的日期分区外部Hive表,其中充满了我最近转换为Parquet的日志文件,以利用压缩和列式存储.到目前为止,我对表现非常满意.

我们的开发团队最近在日志中添加了一个字段,因此我负责向两个日志表添加一个列.它完美适用于一个,但另一个似乎已经损坏.我还原了这个改变,但我仍然无法查询该表.

我确信数据很好(因为它没有改变)但是在Metastore中有些错误.删除/创建后,msck修复表会重新填充分区,但不会处理下面的错误.有两件事可以解决它,但都没有让我开心:

  1. 重新插入数据.
  2. 将数据从生产群集复制回表中.

我真的希望有一个我不知道的命令可以修复表而不需要求助于上述2个选项.就像我说的,数据很好.我已经用Google搜索了错误,我得到了一些结果,但它们都与Impala有关,而不是正在使用的.

select * from upload_metrics_hist where dt = '2014-07-01' limit 5;
Run Code Online (Sandbox Code Playgroud)

问题是这样的:

引起:java.lang.RuntimeException:hdfs:// hdfs-dev/data/prod/upload-metrics/upload_metrics_hist/dt = 2014-07-01/000005_0不是Parquet文件.尾部的预期幻数[80,65,82,49],但发现[1,92,78,10]

完全错误

2014-07-17 02:00:48,835 WARN org.apache.hadoop.mapred.Child: Error running child
java.io.IOException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97)
at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57)
at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:372)
at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.<init>(HadoopShimsSecure.java:319)
at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getRecordReader(HadoopShimsSecure.java:433)
at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:540)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:394)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:358)
... 10 more
Caused by: java.lang.RuntimeException: …
Run Code Online (Sandbox Code Playgroud)

hive hdfs parquet

7
推荐指数
0
解决办法
4411
查看次数

为什么MongoDB产生无效的JSON?没有引用ObjectId,打破了jq解析器

我搜索了论坛,看到很多人有类似的问题,但不是这个问题.

我认为我的问题是最简单的形式,必须有一些我不知道的东西,因为没有人问它.

我有一个调用MongoDB脚本的shell脚本,并将结果存入文件中.然后我想用jq解析该文件.

jq正在崩溃,因为查询的输出不是有效的JSON.罪犯是ObjectId.关于"ALL JSON ALL THE TIME"产生无效JSON的事情我完全失去了.

我很确定我缺少一些基本的东西.

我有一个名为MyMongoScript.js的文件.其内容如下:

db.WorkflowJobs.find().sort({"STATUS":1}).forEach(printjson)
Run Code Online (Sandbox Code Playgroud)

我使用以下命令调用MyMongScript.js:

mongo -u $MONGO_U -p $MONGO_P $MONGO_DB -quiet --eval "var DATE_TO_RUN=\"$DATE_TO_RUN\"" MyMongoScript.js  
Run Code Online (Sandbox Code Playgroud)

这是STDOUT的结果:

{
"_id" : ObjectId("52816fd50bc9efc3e6d8e33f"),
"WORK_TYPE" : "HIVE",
"Script_Name" : "upload_metrics_LANDING_to_HIST.sql",
"Stop_On_Fail" : true,
"STATUS" : "READY",
"START_TS" : "NULL",
"END_TS" : "NULL",
"DURATION" : "NULL",
"INS_TS" : "Mon Nov 11 2013 16:01:25 GMT-0800 (PST)"
}
Run Code Online (Sandbox Code Playgroud)

以下是jsonlint.com所说的内容:

Parse error on line 2:
{    "_id": ObjectId("52816fd50b
------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

json mongodb

5
推荐指数
1
解决办法
4566
查看次数

标签 统计

hdfs ×1

hive ×1

json ×1

mongodb ×1

parquet ×1