8

ディストリビューション: CDH-4.6.0-1.cdh4.6.0.p0.26 Hive バージョン: 0.10.0 Parquet バージョン: 1.2.5

圧縮と列指向ストレージを利用するために、最近 Parquet に変換したログ ファイルでいっぱいの 2 つの大きな日付パーティション化された外部 Hive テーブルがあります。これまでのところ、私はパフォーマンスにとても満足しています。

最近、開発チームがログにフィールドを追加したため、両方のログ テーブルに列を追加する必要がありました。1つは完全に機能しましたが、もう1つは破損しているようです。変更を元に戻しましたが、まだテーブルをクエリできません。

データは (変更されていないため) 問題ないと確信していますが、メタストアに何か問題があります。msck 修復テーブルは、ドロップ/作成後にパーティションを再作成しますが、以下のエラーを処理しません。それを修正できることが 2 つありますが、どちらも私を満足させるものではありません。

  1. データを再挿入します。
  2. 本番クラスターからテーブルにデータをコピーして戻します。

上記の2つのオプションに頼らなくてもテーブルを修正できる、私が知らないコマンドがあることを本当に望んでいます。おっしゃる通り、データは問題ありません。私はエラーから抜け出し、いくつかの結果を得ましたが、それらはすべて、使用していたものではないImpalaに関連しています。

select * from upload_metrics_hist where dt = '2014-07-01' limit 5;

問題はこれです:

原因: 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: hdfs://hdfs-dev/data/prod/upload-metrics/upload_metrics_hist/dt=2014-07-01/000005_0 is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [1, 92, 78, 10]
at parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:263)
at parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:229)
at parquet.hive.DeprecatedParquetInputFormat$RecordReaderWrapper.getSplit(DeprecatedParquetInputFormat.java:327)
at parquet.hive.DeprecatedParquetInputFormat$RecordReaderWrapper.<init>(DeprecatedParquetInputFormat.java:204)
at parquet.hive.DeprecatedParquetInputFormat.getRecordReader(DeprecatedParquetInputFormat.java:108)
at org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.<init>(CombineHiveRecordReader.java:65)
... 15 more
4

0 に答える 0