4

一連の .gz ファイルを HDFS にロードしました。それらの上に生のテーブルを作成すると、行数をカウントするときに奇妙な動作が見られます。gz テーブルと圧縮されていないテーブルの count(*) の結果を比較すると、最大 85% の差が生じます。ファイル gz が圧縮されたテーブルのレコードは少なくなります。誰もこれを見たことがありますか?

CREATE EXTERNAL TABLE IF NOT EXISTS test_gz(
  col1 string, col2 string, col3 string)
ROW FORMAT DELIMITED
   LINES TERMINATED BY '\n'
LOCATION '/data/raw/test_gz'
;

select count(*) from test_gz;    result 1,123,456
select count(*) from test;  result 7,720,109
4

1 に答える 1

2

この問題を解決することができました。どういうわけか、gzipファイルはmap / reduceジョブ(hiveまたはカスタムjava map / reduce)で完全に解凍されていませんでした。Mapreduceジョブは約450MBのgzipファイルのみを読み取り、3.5GZファイルを完全に読み取らずにデータをHDFSに書き込みます。奇妙なことに、エラーはまったくありません!

ファイルは別のサーバーで圧縮されているため、手動で解凍し、hadoopクライアントサーバーで再圧縮しました。その後、新しく圧縮された3.5GZファイルをHDFSにアップロードすると、ハイブはファイル全体を読み取るすべてのレコードを完全にカウントすることができました。

マーシン

于 2013-02-04T21:02:06.397 に答える