关于hive:Hive作业产生的临时数据占用HDFS空间大问题处理

11次阅读

共计 1559 个字符,预计需要花费 4 分钟才能阅读完成。

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 作业临时文件和目录时须要留神,不能将正在运行的作业文件和目录革除,否则会导致作业运行失败。

关键词:大数据培训

正文完
 0