在设计一种HDFS模式时,首先应该决定文件的位置.标准化的位置会使得团队之间更容易查找和共享数据.
推荐HDFS目录结构实例.目录结构简化了不同组和用户的权限分配
/user/{username}
只属于特定用户的数据,JAR包和配置文件.通常是用户在试验中使用的非正式数据,不属于业务流程./user下的目录通常只能由所有者进行读取和写入
/etl
ETL(Extract, Transform and Load,提取,转化,加载)工作流正在处理的.处于不同阶段的数据./etl目录由ETL过程(通常是在各自的user目录下进行)与ETL团队的成员读取和写入.拥有ETL过程的不同组别(如业务分析,欺诈识别,以及市场营销)在/etl目录树中都有对应的子目录.
/tmp
工具生成或者用户共享的临时数据.该目录通常通过程序自动清除,不会存储生命周期长的数据.通常每个人都能读取或写入该目录
/data
经过处理并且在整个组织内共享的数据集.这些通常是待分析数据的重要来源,可以促成业务决策,所以不能不分身份角色,任人读取和写入.通常用户只能读取数据,数据由自动化的ETL过程写入.而且需要审计./data目录下的数据通常对于业务非常重要,所以一般只允许自动化的ETL过程写入数据,改变都是要受到控制和审计的.不同的业务团队对于/data目录下的目录拥有不同的读取权限.
/app
几乎囊括Hadoop应用运行所需要的一些,但不包括数据,这里有Jar文件,OOzie工作流定义,Hive HQL文件,等等.应用的代码目录/app用于存储应用所需要的依赖.各版本的目录应该类似于如下结构:
/app/<组>/<应用>/<版本>/<包目录>/<包>
/metadata
存储元数据,尽管大多数表元数据都存储在Hive metastore中,但是还是可能会有一些元数据(如Avro模式文件)可能需要存储在HDFS中.该目录是存储此类元数据的最佳位置.该目录通常对ETL任务可读,而采集数据到Hadoop中的用户(如Sqoop用户)则拥有写权限.