Hive作业在运行时会在HDFS的长期目录产生大量的数据文件,这些数据文件会占用大量的HDFS空间。这些文件夹用于存储每个查问的长期或两头数据集,并且会在查问实现时通常由Hive客户端清理。然而,如果Hive客户端异样终止,可能会导致Hive作业的长期或两头数据集无奈清理,从而导致Hive作业长期目录占用大量的HDFS空间。本篇文章Fayson次要介绍如何解决清理Hive作业产生的临时文件。
测试环境
1.CM和CDH版本为5.15
2.Hive作业长期目录阐明
Hive作业在运行时会在HDFS的指定目录下生成作业长期或两头数据集存储目录,大数据培训此长期目录门路有hive-site.xml配置中的hive.exec.scratchdir参数定义:
Hive 0.2.0到0.8.0版本中默认值为:/tmp/${user.name}
Hive0.8.1到0.14.0版本中默认值为:/tmp/hive-${user.name}
Hive0.14.1及更高版本中默认值为:/tmp/hive/${user.name}
以后Fayson的CDH5.15.0中Hive版本为1.1.0,Hive作业的长期或两头数据集在HDFS的/tmp/hive/${user.name}目录下:
3.清理Hive作业长期及目录
因为Hive客户端的作业异样退出客户端无奈失常的清理HDFS的长期目录,从而导致长期数据文件占用了大量的HDFS空间。因而,须要在Hive作业长期目录中删除不须要的目录和已实现作业的目录文件。
留神:清理长期Hive作业产生的长期目录时,不能删除任何正在运行的Hive作业这样可能会导致作业运行失败。只能够删除不再与以后正在执行的Hive作业相关联的文件和目录。
1.创立一个定时清理作业的脚本hive_clean.sh内容如下:
[root@cdh3 clean]# vim hive-clean.sh
!/bin/bash
kinit -kt /opt/cloudera/clean/hdfs.keytab hdfs/cdh3.fayson.com@FAYSON.COM
yarn jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr--job.jar org.apache.solr.hadoop.HdfsFindTool -find '/tmp/hive/' -type d -name '' -mtime +7 | xargs hdfs dfs -rm -r -f -skipTrash
2.将hive-clean.sh脚本放在/opt/cloudera/clean目录下
留神:Fayson的集群启用了Kerberos,所以这里应用了hdfs用户的keytab,确保执行HDFS命令时有权限删除不必用户创立的临时文件和目录。
3.在Linux中配置crontab定时工作,脚本如下:
[root@cdh3 ~]# chmod +x /opt/cloudera/clean/hive-clean.sh
[root@cdh3 ~]# crontab -e
/1 * /opt/cloudera/clean/hive-clean.sh > /opt/cloudera/clean/clean.log 2>&1 &
这里配置的crontab为每分钟执行一次脚本能够将执行频率调整至1天即“ /1 *”
4.查看执行日志
总结
1.Hive作业在运行时会将长期或两头后果存储HDFS,如果Hive客户端作业异样退出会导致HDFS上存储的长期数据不能被革除而导致HDFS空间被占用。
2.能够通过创立定时工作定期的将Hive作业的临时文件和目录删除
3.清理Hive作业临时文件和目录时须要留神,不能将正在运行的作业文件和目录革除,否则会导致作业运行失败。
关键词:大数据培训