2017-01-24 32 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

感謝您的分享。 –