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

Я нашел решение (на всякий случай кто-то сталкивается с той же проблемой). Это было вызвано неправильной настройкой:

tableproperty "orc.compress.size" по умолчанию устанавливается в

'orc.compress.size' = '262144', который является 256kbytes

но " io.file.buffer.size "в файле core-site.xml установлено значение" 131072 ", то есть 128 кбайт.

Поток предназначен для чтения 131072 байт, который не вставляется в файлбуфер после декомпрессии.

Решение состоит в том, чтобы либо увеличить размер файлового буфера, либо уменьшить размер сжатия таблицы ORC.

Я надеюсь, что это когда-нибудь поможет кому-то еще.

+0

Спасибо за обмен. –

Смежные вопросы