2016-06-30 5 views
1

ハイブバケットソートテーブルに挿入しようとしていて、レデューサーによってネガティブアレイサイズ例外が発生しました。以下のスタックトレースを見つけてください。 ハイブバケットテーブルに挿入中にネガティブ配列サイズ例外が発生しました

Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#3 
    at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
Caused by: java.lang.NegativeArraySizeException 
    at org.apache.hadoop.io.BoundedByteArrayOutputStream.<init>(BoundedByteArrayOutputStream.java:56) 
    at org.apache.hadoop.io.BoundedByteArrayOutputStream.<init>(BoundedByteArrayOutputStream.java:46) 
    at org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput.<init>(InMemoryMapOutput.java:63) 
    at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.unconditionalReserve(MergeManagerImpl.java:305) 
    at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.reserve(MergeManagerImpl.java:295) 
    at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:514) 
    at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:336) 
    at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:193) 

そして、私のテーブルのDDLは です(のみ読みやすさのために列のサブセットを示す。実際のDDLは100列があります)

CREATE TABLE clustered_sorted_orc(conv_type string, 
            multi_dim_id int, 
            multi_key_id int, 
            advertiser_id bigint, 
            buy_id bigint, 
            day timestamp 
PARTITIONED BY(job_instance_id int) 
CLUSTERED BY(conv_type) SORTED BY (day) INTO 8 BUCKETS 
STORED AS ORC; 

INSERT文がハイブのプロパティを後

FROM not_clustered_orc 
INSERT OVERWRITE TABLE clustered_sorted_orc PARTITION(job_instance_id) 
SELECT conv_type ,multi_dim_id ,multi_key_id ,advertiser_id,buy_id ,day, job_instance_id 

です設定されている

set hive.enforce.bucketing = true; 
set hive.exec.dynamic.partition.mode=nonstrict; 

これはMergerManagerImplのログスニペットで、ioSortFactor、mergeThresholdなどを指定すると役立ちます。

2016-06-30 05:57:20,518 INFO [main] org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl: MergerManager: memoryLimit=12828540928, maxSingleShuffleLimit=3207135232, mergeThreshold=8466837504, ioSortFactor=64, memToMemMergeOutputsThreshold=64 

私はCDH 5.7.1、Hive1.1.0、Hadoop 2.6.0を使用しています。誰も前に同様の問題に直面していますか?どんな助けでも本当に感謝しています。

+0

を設定した後、作業それを得ました。 –

答えて

1

私はそれがはめ込み時の1時間をソートするんされている場合

hive.optimize.sort.dynamic.partition=true 
+0

あなたの答えの詳細を詳しく教えてください。私は同じ問題を抱えていますが、Apache Crunchを使用しています。 – dbustosp

関連する問題