前一阵我负责的HDFS集群出了一次不大不小的线上事故:数据仓库的定时任务从凌晨开始连续失败,报错指向不是内存不足、不是Yarn资源不够,而是一行扎眼的Permission denied。仔细排查后发现,任务使用的用户从原先的hadoop统一切到了新的data_engine,而Hive任务要写临时文件的目录/tmp/hive,还是之前用hadoop用户创建的,权限是drwx------,新用户根本进不去这个目录。
这个排障过程本身不算难,但它让我意识到一个现实问题:很多搞大数据的人对HDFS权限管理的理解,还停留在chmod 777或者“能通就用”的层面。HDFS的权限体系看着和Linux很像,实际上在分布式架构下有一套完全独立的判断链路,从用户身份、权限位、属主属组到ACL,任何一个环节理解不到位,线上就会出幺蛾子。这篇文章我想把HDFS权限管理的脉络完整捋一遍,把我这些年踩过的坑、用过的排查手段、沉淀下来的规范都写出来,适合正在搭集群、维护数据平台或者准备大数据方向面试的工程师。
1. 权限管理在 HDFS 里到底管住了什么
1.1 权限检查发生在 NameNode,而不是 DataNode
HDFS的数据分散存储在多个DataNode上,但文件与目录的元数据集中在NameNode内存里。权限管理管的是“哪些用户能对哪个路径做什么操作”,这些判断全部发生在NameNode上,DataNode本身不做文件级权限判断。也就是说,你可以把HDFS权限简单理解成:所有用户通过同一个入口(NameNode)申请操作,NameNode根据路径上的属主、属组和权限位来决定放不放行。
在大数据平台里,HDFS权限的核心作用是分边界和防误操作。比如多个业务单元共用一套集群,订单域的数据只能让订单团队读写,算法团队只能访问特征目录。没有权限管理,任何用户都可以读走别人的数据、删掉别人的目录,这在多租户场景下是完全不可接受的。注意,它和Linux基于内核强制、基于uid的权限模型不同,HDFS的权限信息只是元数据的一部分,校验逻辑在NameNode的
