2017-01-24 13 views
0

해야합니다 :하이브 뭐 이따위 압축 길이는 자체가 다음과 같은 예외가 결과 테이블에 조인을 사용 아래 표를 쿼리 덜

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; 

표 :

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) 

문제가있는 쿼리는 다음과 같다 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은 기본적으로 설정되어 256kbytes

그러나 "인

'orc.compress.size'= '262144'

에 io.file.buffer.size "는 core-site.xml에서"131072 "로 설정되고 whis는 128kbytes입니다.

streamreader는 압축 해제 후 파일 버퍼에 맞지 않는 131072 바이트를 읽으려고합니다.

해결 방법은 파일 버퍼 크기를 늘리거나 ORC 테이블의 압축 크기를 줄이는 것입니다.

언젠가 다른 사람에게도 도움이되기를 바랍니다.

+0

공유해 주셔서 감사합니다. –