c语言sscanf函数的用法是什么
388
2022-11-22
Hive Staging目录占用大量HDFS空间问题分析
问题现象
测试环境
1.Redhat7.4
2.CDH5.16.1
在HDFS上有许多Hive Staging目录,占用了大量的空间,有些目录占用的空间甚至比原始表还大,如下截图显示:
异常重现及分析
1.使用beeline、hive、spark-shell等多种方式执行Hive SQL语句验证产生的hive staging目录是否不会被清除,结果发现在SQL执行结束后产生的staging文件均会自动被移除。
2.使用Hue上的Hive Editor来进行验证,发现执行的SQL产生的staging目录在SQL执行完成后并不会被清除,在Hue上执行一个Hive的Insert语句
使用hadoop命令看到在相应表下生成的hive-staging_hive_xxx的临时目录一直存在并未因为SQL执行完成而清除掉。
根据上述分析发现,出现上述问题的原因主要是由于在Hue上使用Hive Editor执行查询导致。Hue为了让用户能够查看历史执行SQL及返回结果,所以必须确保每个查询的结果是可以打开的。
因此,Hue上在查询执行期间创建的staging目录,Hive的清除事件永远不会被调用,也就导致了所有通过Hue运行的查询创建的staging目录永远不会被删除。
接下来针对上述问题进行提出两种解决方案,具体看如下说明。
问题解决
解决方案一
通过设置用户离开Hive的查询界面时强制Hue关闭查询,可以通过如下方式操作:
1.登录CM进入Hue的配置界面
2.在搜索栏输入“hue*.ini”在配置项中增加如下内容
[beeswax]close_queries=true
3.完成上述配置后重启Hue服务即可
注意:上述解决方法也存在弊端,用户无法再通过Hue查看历史执行的SQL语句及查询结果,且用户在执行查询时离开Hive的编辑页面,则正在执行的查询也会关闭(查询不会后台运行)。
3.2
解决方案二
通过设置HiveServer2的以下参数来控制会话和操作/查询的超时时间。
hive.server2.session.check.interval = 1 hourhive.server2.idle.operation.timeout = 1 dayhive.server2.idle.session.timeout = 3 days
hive.server2.idle.operation.timeout:表示执行的操作及查询超过1天将会被关闭。
参数hive.server2.idle.operation.timeout:调试HiveServer2会话在空闲状态超过3天将会关闭。
hive.server2.session.check.interval:每个小时检查一次。
1.登录CM进入Hive的配置界面
2.根据自己当前集群使用情况和查询时间适当的修改这些值,如下截图为Fayson测试修改的参数
总结
1.在Hue上的Hive编辑器执行SQL查询时,由于Hue上需要保存历史查询SQL及结果,所以会导致执行SQL过程中查询的staging目录没有被Hive的清除事件删除。
2.可以通过修改Hue的配置,指定close_queries=true,当用户离开Hive的编辑器页面后Hue会强制关闭查询,该解决方法会有一定的弊端。
3.也可以通过配置HiveServer2的会话、操作/查询的超时时间来关闭查询,该方法可以根据集群的使用情况及查询时间适当的调整。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~