有一个场景,比如你们公司集群的hdfs的使用率经常快要不够用了,想删除一些就群上的无用数据,某些数据是否被别的目录依赖使用,这个时候我们就需要解析数据之间的依赖关系,然后从没有下游的数据开始删除,或者设置其生命周期,当某个数据的份数超过其所使用范围,我们就可以将它认为是无用数据,此数据就可以删掉。

因为如果想管理好大数据集群hdfs上的数据合理使用和存在、清理,我们需要二个基本数据,第一就是目录数据的生命周期,第二就是目录之间的依赖关系。

目录级数据的生命周期

这个就要根据具体的也许需要来设置该目录的生命周期,一般情况下,比如阿里的odps上,表的生命周期是按照天来计算的。但是其实纯粹的按照天来设置生命周期是不那么合理的,比如有的表是每个月才产出一份,这时候再按照天来设置生命周期显然不太合理,使用方还要算算那几个月是31天,30天等去计算,其实他们使用数据可能是最近产出的多少份数据。因为对于目录来说,以份为单位来对数据进行生命周期的设置和清理是比较合理的。

数据之间的依赖关系

声明一下:此处的依赖关系就只限于提交任务到yarn上的mr任务,其他不通过mr任务进行数据导入或者导出的数据需要各自系统去注册数据的血缘依赖关系。我们这里只讨论提交到yarn上的mr任务产出的数据之间的依赖关系。此处有几个步骤:

  1. 每天跑的任务都在hdfs上以日期为目录的格式存放任务跑的时候的信息,我们可以每天离线跑任务去解析,更新最新的依赖关系。
  2. 根据以上生成的依赖的关系,我们进行血缘关系的组织。

这里的思路其实不难的,我给大家大概讲解下怎么做。首先我们看下在集群上任务运行历史都是以日期文件夹保存的,具体的列表如下:




Hadoop yarn UI查看任务资源 查看hadoop任务情况_如何查看输入流是否读取

任务运行列表



每个任务都有运行的参数配置和任务输出结果,比如我们关心的任务运行的脚本(当然如果不是hive,就没有脚本),任务的输入输出目录关系,我们都可以看到,比如我们想看某个任务的信息,怎么看呢?点击任务id,会跳到任务详情页面,如下图:




Hadoop yarn UI查看任务资源 查看hadoop任务情况_如何查看本地sql的服务器名_02


Hadoop yarn UI查看任务资源 查看hadoop任务情况_如何查看本地sql的服务器名_03


Hadoop yarn UI查看任务资源 查看hadoop任务情况_水晶报表如何查看sql_04


这边有任务的overview和配置信息,configuration,这里的配置信息在hdfs上是以xml文件保存的,在这有一个可视化的界面,我们只挑自己比较关心的配置项去看好了。

  • hive.query.string是指该任务执行的sql语句。
  • inputformat.inputdir是指该任务的输入路径,多个则以逗号隔开
  • location或者outputformat.dir是指该任务的输出路径,多个则以逗号隔开。

在使用过程中发现也有坑,就是create table select这种语法,输出路径解析不出来。可能需要特别处理,根据拿到的query语句进行sql语法解析的校正。