经销:CDH-4.6.0-1.cdh4.6.0.p0.26 Hive版本:0.10.0实木复合地板版本:1.2.5
我有两个大的日期分区外部Hive表,其中充满了我最近转换为Parquet的日志文件,以利用压缩和列式存储.到目前为止,我对表现非常满意.
我们的开发团队最近在日志中添加了一个字段,因此我负责向两个日志表添加一个列.它完美适用于一个,但另一个似乎已经损坏.我还原了这个改变,但我仍然无法查询该表.
我确信数据很好(因为它没有改变)但是在Metastore中有些错误.删除/创建后,msck修复表会重新填充分区,但不会处理下面的错误.有两件事可以解决它,但都没有让我开心:
我真的希望有一个我不知道的命令可以修复表而不需要求助于上述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) 我搜索了论坛,看到很多人有类似的问题,但不是这个问题.
我认为我的问题是最简单的形式,必须有一些我不知道的东西,因为没有人问它.
我有一个调用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)
任何帮助非常感谢.