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 作业只会读取大约 450 MB 的 gzip 文件并将数据写出到 HDFS,而不会完全读取 3.5GZ 文件。奇怪,完全没有错误!

由于文件是在另一台服务器上压缩的,所以我手动解压缩并在 hadoop 客户端服务器上重新压缩它们。之后,我将新压缩的3.5GZ文件上传到HDFS,然后hive就可以完全统计出读取整个文件的所有记录。

马尔钦

于 2013-02-04T21:02:06.397 回答