Hive动态分区导致的Jobtracker Hang

简介:

昨天下午有20多分钟Hadoop平台无法跑HiveJobtracker的页面也打不开,hadoop job –listhang住没有响应,过了10分钟后恢复了,查看gc日志发现Jobtracker没有进行full gc,查看这段时间的Job日志发现一个可疑的Hive SQL: Insert into table t(dt) as select xxx,dt from txx,是一个用了动态分区的查询.这个查询和Jobtracker Hang住有什么关系呢?

熟悉Jobtracker的都知道,在进行Job初始化时EagerTaskInitializationListener会锁住JobInProgress然后进行InitTask,细节请各位查看代码,这里有一步就是需要向hdfs写入初始数据并flush,而FairschedulerUpdate Thread在更新资源池的资源时是在持有JobTrackerFairscheduler的独占锁然后再去计算每个资源池的资源情况,而计算running_map/running_reduce的时候要去获取相应的JobInProgress锁,各位读者可能不明白,我为啥要讲这块呢,问题就出现在这里.

Hive在处理动态分区的时候,主要经历这么几个步骤tablescan->filesink->movetask

在进行filesink的时候是根据记录来处理的,会起Npart)个record writer然后开始处理动态分区字段,即这里的dt,如果dt是连续的那么打开一个block开始写,否则关闭当前block,打开新dirblock继续写,这里如果dt是不连续的出现并且记录数量巨大的情况下会产生大量的文件,导致hdfs的负载标高,和当时的hdfs的监控是匹配的:

当时的集群负载:

wKiom1Mr3syTM-zOAAMWZ6-2LOo698.jpg

当时产生的文件数:

wKioL1Mr3rOSDZwoAANEo5qPywU667.jpg

进而导致JobInProgress被锁住,从而JobTracker被锁住,导致JobTracker Hang住了!

那怎么解决呢?利用distributeby dt把相同的dt排列到一起再进行filesink就不会造成大量的小文件产生了.

update:虽然Hive0.13(https://issues.apache.org/jira/browse/HIVE-6455)提供了参数来解决这个问题,但是又引入了bug(https://issues.apache.org/jira/browse/HIVE-8151),因此0.13建议还是使用distribute by的方式来解决这个问题;



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1380981,如需转载请自行联系原作者


相关文章
|
SQL HIVE
Hive分区+根据分区查询
Hive分区+根据分区查询
|
4月前
|
SQL 存储 HIVE
hive分区与分桶
hive分区与分桶
56 1
|
5月前
|
SQL DataWorks 监控
DataWorks产品使用合集之同步数据到Hive时,如何使用业务字段作为分区键
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在进行Hive分区truncate操作时遇到权限不足,怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
79 0
|
7月前
|
SQL 存储 HIVE
Hive中的动态分区是什么?请解释其作用和使用场景。
Hive中的动态分区是什么?请解释其作用和使用场景。
135 0
|
SQL 分布式计算 大数据
Hive动态分区
Hive动态分区
131 0
|
SQL 存储 分布式计算
大数据技术基础实验十一:Hive实验——Hive分区
大数据基础实验十一,学习有关Hive分区的相关知识。
303 0
大数据技术基础实验十一:Hive实验——Hive分区
|
SQL 存储 数据库
hive 删除某个分区中部分数据
hive 删除某个分区中部分数据
|
SQL HIVE
hive清空表删除分区
hive清空表删除分区
|
SQL HIVE
hive插入分区报错SemanticException Partition spec contains non-partition columns
hive插入分区报错SemanticException Partition spec contains non-partition columns