Hive中使用LZO压缩的方式

版权声明:学习交流为主,未经博主同意禁止转载,禁止用于商用。 https://blog.csdn.net/u012965373/article/details/83034738

1.创建表的时候指定为lzo格式

CREATE EXTERNAL TABLE foo (
     columnA string,
     columnB string
) PARTITIONED BY (date string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY "\t"
STORED AS
INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
LOCATION '/path/xxxx/foo';

2.对于已经创建好的表,可以使用alter语句,修改为lzo存储格式。
ALTER TABLE foo
SET FILEFORMAT 
INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";


3.当使用insert语句往lzo表里插入数据时,需要加入下面两个参数:

SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;

4.查询使用count(*)有数据,但是select * 是没有数据的?
若发生将一个使用LZO压缩过的表数据导入一个没有被压缩过表内,
查询将出现这种状况,hdfs目录下明明有数据,count(*)有数据总量,但是select就是查询不出来,
具体原因:
表的结构是未压缩过的,但是数据是压缩过的,通过select(此处查询的方法跟表的结构有关系)查询压缩过的结果,肯定不会显示,

具体解决办法:
使用select的时候指定对应的压缩方法就可以查询出来压缩过的数据,类似于如下:

SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;

猜你喜欢

转载自blog.csdn.net/u012965373/article/details/83034738
今日推荐