hadoop – 无法对Hive中的大型数据集应用动态分区

我有一个test_details表,有大约400万条记录.使用此表中的数据,我必须创建一个新的分区表test_details_par,其中记录在visit_date上分区.创建表不是一个挑战,但是当我来到使用动态分区来插入数据的部分时,当我尝试插入数据更多天时,Hive放弃了.如果我执行2或3天,Map Reduce作业会成功运行,但是在更多天内它无法提供JAVA堆空间错误或GC错误.

我的DDL的简化快照如下:

CREATE TABLE test_details_par(visit_id INT,visit_date DATE,store_id SMALLINT);

INSERT INTO TABLE test_details_par PARTITION(visit_date)SELECT visit_id,store_id,visit_date FROM test_details DISTRIBUTE BY visit_date;

我已经尝试设置这些参数,以便Hive以更好的方式执行我的工作:

set hive.exec.dynamic.partition.mode=nonstrict; 
set hive.exec.dynamic.partition=true; 
set hive.exec.max.dynamic.partitions.pernode = 10000;

有没有什么我缺少运行INSERT完整批次而没有具体指定日期?

尼尔斯,

Hive 12及以下版本具有动态分区的众所周知的可伸缩性问题,将通过Hive 13解决.问题是Hive尝试为其写出的每个分区保持文件句柄打开,这会导致内存不足和崩溃. Hive 13将按分区键排序,这样它一次只需要打开一个文件.

我看到你有3个选项

>将作业更改为一次只插入几个分区.>等待Hive 13被释放并尝试(2-3个月等待).>如果你知道如何,从trunk创建Hive并使用它来完成数据加载.

相关文章
相关标签/搜索