2017-01-24 33 views
0

查询以下,使用在自身上产生了以下的异常表中的一个连接表:蜂房的Snappy未压缩的长度必须小于

java.lang.IllegalArgumentException: Uncompressed length 222258 must be less than 131072 
at org.iq80.snappy.SnappyInternalUtils.checkArgument(SnappyInternalUtils.java:116) 
     at org.iq80.snappy.SnappyDecompressor.uncompress(SnappyDecompressor.java:72) 
     at org.iq80.snappy.Snappy.uncompress(Snappy.java:43) 
     at org.apache.hadoop.hive.ql.io.orc.SnappyCodec.decompress(SnappyCodec.java:71) 
     at org.apache.hadoop.hive.ql.io.orc.InStream$CompressedStream.readHeader(InStream.java:214) 
     at org.apache.hadoop.hive.ql.io.orc.InStream$CompressedStream.available(InStream.java:251) 

有问题的查询是以下内容:

select a.* 
from events a 
inner join 
(
    SELECT asset_id, time, max(hive_insert_ts) 
    FROM events 
    GROUP BY asset_id, time 
) b on a.time = b.time 
and a.asset_id = b.asset_id 
limit 10; 

表存储为ORC并使用SNAPPY压缩:

create table events(
    asset_id varchar(15), 
    time timestamp, 
    hive_insert_ts timestamp) 
PARTITIONED BY (
    country varchar(4), 
    site varchar(4), 
    year int, 
    month int) 
STORED as ORC 
TBLPROPERTIES (
'orc.compress'='SNAPPY', 
'orc.create.index'='true', 
'orc.bloom.filter.columns'='asset_id, time', 
'orc.bloom.filter.fpp'='0.05', 
'orc.stripe.size'='268435456', 
'orc.row.index.stride'='10000'); 

我搜索了很多,但找不到任何提示。你有什么想法可以解决问题吗?

非常感谢!

回答

1

我找到了解决方案(以防万一有人遇到同样的问题)。 它是由配置错误导致:

的 “orc.compress.size” tableproperty被默认设置为

'orc.compress.size'= '262144',这是256K字节

但“ core-site.xml中的“io.file.buffer.size”设置为“131072”,是128kbytes。

流式读取器想要读取131072字节,这在解压缩后不适合文件缓冲器。

解决方法是增加文件缓冲区大小或减小ORC表的压缩大小。

我希望这有助于某一天也有人。

+0

感谢您的分享。 –