我们在使用hadoop集群过程中,发现网上很少有具体的数据使用分析案例,也就是说 我们不知道多少个节点处理多少大小的数据量耗费多少时间是合理的哪些是需要优化的。
为了增加这方面的相关经验,我们会记录一下实际的使用案例。以供大家参考。
配置如图:
耗费时间如图:
执行语句
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=100000;
set hive.exec.max.dynamic.partitions.pernode.Maximum=100000;
set hive.exec.max.dynamic.partitions=100000;
set hive.exec.max.created.files=100000;
set mapred.max.split.size=1024000000;
set mapred.min.split.size.per.node=1024000000;
set mapred.min.split.size.per.rack=1024000000;
set mapred.reduce.tasks=100;
set hive.map.aggr=true;
set hive.groupby.skewindata=true;
set hive.enforce.bucketing = true;
create table table_p(id string, chromosome string,position string,type string,createdate string) partitioned by (type string) CLUSTERED BY (id) SORTED BY (id ASC) INTO 6 BUCKETS;
insert overwrite table table_p
partition(type)
select id,chromosome,position,createdate,type from genotype;
相关参数
未分区前
select count(1)得到数量37362145755,370多亿条数据,耗时5237秒,1个小时45分钟。
使用presto查询耗费273秒,5分钟
查询单条记录带where精确查询耗时6800秒
使用presto查询单条记录带where精确查询耗时272秒,5分钟
分区后
查询单条记录带where精确查询耗时18秒
使用单台presto查询单条记录带where精确查询耗时0.01秒
总结
2T的数据进行分区分桶一共耗费了14个小时。这个时间有点长,后期我们会进行尝试优化。