gpt4 book ai didi

hadoop - Hive(0.12.0)-使用分区,存储桶和附加索引将数据加载到表中

转载 作者:行者123 更新时间:2023-12-02 20:06:22 25 4
gpt4 key购买 nike

使用Hive 0.12.0,我正在寻找一个已分区的表,并使用存储在HDFS上的数据的存储桶。我还想在外键上创建该表的索引,在连接表时将使用很多索引。

我有一个可行的解决方案,但有一点告诉我它效率很低。

这是我的工作:
我将数据加载到“平面”中间表(无分区,无存储桶)中:

LOAD DATA LOCAL INPATH 'myFile' OVERWRITE INTO TABLE my_flat_table;

然后,从此平面表中选择所需的数据,并将其插入到最终的分区表和存储表中:
FROM my_flat_table
INSERT OVERWRITE TABLE final_table
PARTITION(date)
SELECT
col1, col2, col3, to_date(my_date) AS date;

当我创建最终表时,便已定义了存储分区:
 CREATE TABLE final_table
(col1 TYPE1, col2 TYPE2, col3 TYPE3)
PARTITIONED BY (date DATE)
CLUSTERED BY (col2) INTO 64 BUCKETS;

最后,我在用于存储分区的同一列上创建索引(这甚至有用吗?):
CREATE INDEX final_table_index ON TABLE final_table (col2) AS 'COMPACT';

所有这些显然很慢,所以我将如何优化加载过程?

谢谢

最佳答案

每当我有类似要求时,由于找不到有效的替代方法,因此我使用的方法几乎与您相同。

但是,为了使Dynamic Partitioning的处理速度更快,我尝试设置一些配置参数,例如:

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

我确定您必须使用前两个,并且可以根据数据大小设置后两个。

您可以 check out Configuration Properties这个页面,并自行决定哪些参数可能有助于加快您的流程,例如使用的 reducer 数量增加。

我不能保证使用这种方法可以节省您的时间,但可以肯定的是,您将充分利用群集设置。

关于hadoop - Hive(0.12.0)-使用分区,存储桶和附加索引将数据加载到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22699327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com