2017-01-24 3 views
0

小さくなければならない次の例外をもたらす:ハイブスナッピー非圧縮長がテーブル自体にジョインを使用して、以下の表の問合せ

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として保存され、てきぱき使用して圧縮されています

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が256Kバイト

ある

'orc.compress.size' = '262144' にデフォルトで設定されている

をしかし: これは設定ミスによって引き起こされましたcore-site.xmlのio.file.buffer.sizeは "131072"に設定され、whisは128kバイトです。

ストリームリーダーは、解凍後にファイルバッファに収まらない131072バイトを読み込みたいとします。

解決策は、ファイルバッファサイズを大きくするか、ORCテーブルの圧縮サイズを小さくすることです。

いつか他の人にもこれが役立つことを願っています。

+0

共有いただきありがとうございます。 –

関連する問題