【问题标题】:Not able to apply dynamic partitioning for a huge data set in Hive无法对 Hive 中的庞大数据集应用动态分区
【发布时间】:2014-02-19 09:53:36
【问题描述】:

我有一张表test_details,有大约 400 万条记录。使用此表中的数据,我必须创建一个新的分区表test_details_par,其中记录分区在visit_date。创建表不是挑战,但是当我谈到必须使用动态分区插入数据的部分时,当我尝试插入数据更多天数时,Hive 放弃了。如果我这样做 2 或 3 天,Map Reduce 作业会成功运行,但如果再多天,它就会失败,给出 JAVA Heap Space ErrorGC Error

我的 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 是否缺少什么?

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    尼尔斯,

    Hive 12 及更低版本在动态分区方面存在众所周知的可伸缩性问题,这些问题将在 Hive 13 中得到解决。问题是 Hive 尝试为它写出的每个分区保持打开文件句柄,这会导致内存不足和崩溃。 Hive 13 将按分区键排序,因此一次只需要打开一个文件。

    在我看来,你有 3 个选项

    1. 更改您的工作,一次只插入几个分区。
    2. 等待 Hive 13 发布并尝试(等待 2-3 个月)。
    3. 如果您知道如何从主干构建 Hive 并使用它来完成数据加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多