# 数仓规范

# 概述

合理的规范,是一种有效的沟通方式,可以降低大家在使用过程中的沟通成本。严格的执行规范,可以减少我 们后续管理的复杂度。规范无法一步到位,也不会一层不变的,随着技术发展;平台规模扩张;用户认知提升, 规范也会跟着不断调整,不断完善。规范流程不是形式,是为了解决那些无法单纯的通过技术来解决的问题。

# 命名规范

参考七牛

# 仓库命名规范

良好的仓库命名规范会帮助用户更好的理解数据的业务和含义,我们对仓库的命名有如下建议,其中基础规范是 必须遵守,可选规范是根据业务情况酌情选择的。

# 命名的硬性要求

仓库名称:仓库名称命名规则:^[a-z][a-z0-9_]{0,127}$,1-128 个字符,支持小写字母、数字、下划线; 并且必须以小写字母开头。

# 应该避免的名称

单字符名称, 单字符无法明确表义 过长(如超过 40 个字符以上)的仓库名字,仓库名称过长会导致阅读和搜索不便 下划线开头的名称(Pandora 系统保留, 代表有特殊用途, 例如 _internal, _audit 等)

# 命名约定

采用类似 comp1_comp2_comp3 的命名方式,用下划线分隔开不同的命名分块 分块命名的大致顺序是,从左到右依次是,概括性高的分组命名,更加细致的分组命名。更细致的分组能够表 达上一级分组中部分数据的特征。如 network_firewall_cisco_asa,表达了网络、防火墙、具体品牌、具体产品名。

命名便于进行搜索的范围指定,比如可以指定 network** 查看所有网络数据,network*cisco 查看所有 cisco 品牌的设备数据命名尽量采取英语或者国际通用的缩写,尽量避免使用拼音或者难以理解的数字代号,比如 firewall 优于 fanghuoqiang。

# 命名举例:

按照设备的树状分类进行仓库命名:it_network_firewall_cisco_asa 使用 app 环境(生产和开发)区分不同数据:service_prod_app_myapp 、 service_dev_app_myapp

# HDFS 目录规范

HDFS 存储规范,根目录规划如下:

# /source

主要存储原始采集的日志,存储规则如下: /顶级目录/产品线/{业务名称}/日志名称/日期/文件名称,其中日期格式统一为 yyyyMMdd。文件名称按 照 hhip 进行存储,这样方便后续能满足小时统计的需求。另外我们的日志是实时上传,刚写上去的小 时文件会在前面加上"",如_18_127.0.0.1 用来表示 127.0.0.1 这台机器 18 点的文件正在被写入。等待 18 点的文件全部写完,才把文件名重新命名成 18_127.0.0.1。如果你想知道这么做还有什么好处,可 以给我发消息。

# /logdata

存储的规范和 source 一模一样,只是 source 下采集的日志都统一按照小时来拆分,每种日志量 的大小不一,source 下的数据经常会出现一些小文件,所以我们定义这一层对 source 的数据做统一压缩, 且让每个文件的大小和存储块大小相当。source 下的数据则会定期删除。

# /logdata

下的数据是每日计算的主要入口,数据可以有更长的保留策略。根据不同的业务线将数据资源分 配不同的权限组,用户若要访问相应的数据则需要提交申请。

  • 产品线: 根据每个企业的产品不同可以划分出不同的产品线,比如 web(网站),ad(广告),search(搜索), app 等,若后续新增产品线可需系统管理员添加相应的目录。
  • 业务名称:每个产品下可能包含多个业务,业务名称主要是用于区分那些比较庞大的产品线,这个看企业具 体情况,并不是一定需要的。
  • 日志名称:为实际业务所对应的日志名称,与传统数据库相对应的话,这个名称可以把他看成就是一个表名.

# /commons

一些集群共用的基础数据,比如 ip 库、省份信息、经纬度数据等。 存储规则如下: /顶级目录/数据类别/文件名称。这部分数据根据使用情况,集群规模,你需要设置更多 的备份数,像一些 ip 库数据,文件不大,我们设置的备份策略为(集群节点数/3)。该数据由平台统一维护, 平台用户拥有只读权限。

# /workspace

工作空间,该目录下存储的各团队计算出来的结果数据,按照子团队名称划分目录,存储的数据 即为各产品线上的生产数据。

该工作空间类似于团队间协作的空间,这里给出一个参考规范,具体规范可按照本团队的业务进行调整。 存 储规则如下:/workspace/团队名称/{业务名称}/数据名称。该空间下的数据只允许开放给组内用户,不允许 对外共享。每个团队允许一个默认的配额空间,当空间使用超过这个配额 90%则给用户报警,让用删除数据, 或进行必要压缩。若不及时处理超过配额将无法继续写入数据。若确实是因为业务增长需要扩大存储,可以 提交申请。

# /user

用户空间,存储用户私有数据,仅用户自己可以访问。

按照开发人员自己的习惯组织存储文件,用于存储用户的测试数据,严禁将实际生产的业务数据存储在该空间, 该空间下数据会不定期清理,会限制空间大小,当存储空间超过这个配额的 90%则会给用户报警。当成员离职 账户注销,空间存储回收。

# /warehouse

存储 hive 仓库,按照团队创建库;公共日志按照业务名进行创建。

每个团队可以创建一个属于团队的 hive 库,团队账户拥有该库的管理权限,组内账户拥有只读权限,允许授 权开放库里表给其他用户。公共日志库由平台统一管理维护,允许授权开放给平台用户。

# /share

共享存储,每个团队可以在这个空间下共享一些临时文件。

# /tmp

用来存储一些临时文件,每周清理一遍

# 其它