Hdfs的ACL测试

Hadoop从2.4.0版本开始支持hdfs的ACL,在CDH5.0当中也集成了该特性,下面对其进行一些测试:

unnamed user (file owner)
文件的拥有者
unnamed group (file group)
文件的所属
named user
除了文件的拥有者和拥有组之外,的其它用户
named group
除了文件的拥有者和拥有组之外,的其它用户
mask 
权限掩码,用于过滤named user和named group的权限

一、启用ACL:

<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>

二、测试ACL:


[hadoop@master ~]$ groups
hadoop
创建目录并上传文件:
[hadoop@master ~]$ hadoop fs -mkdir /input/acl
[hadoop@master hadoop]$ hadoop fs -put conf/yarn-site.xml /input/acl
[hadoop@master hadoop]$ hadoop fs -ls /input/acl
Found 1 items
-rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml
[hadoop@master ~]$ hadoop fs -getfacl /input/acl
# file: /input/acl
# owner: hadoop
# group: supergroup
user::rwx
group::r-x
other::r-x

同一组的成员有读权限,没有写权限:
[mapred@master ~]$ groups
hadoop
[mapred@master ~]$ hadoop fs -ls /input/acl
Found 1 items
-rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml
[mapred@master hadoop]$ hadoop fs -put conf/capacity-scheduler.xml /input/acl
put: Permission denied: user=mapred, access=WRITE, inode="/input/acl":hadoop:supergroup:drwxr-xr-x

设置mapred用户只读:
[hadoop@master ~]$ hdfs dfs -setfacl -m user:mapred:r-- /input/acl
[hadoop@master ~]$ hdfs dfs -getfacl /input/acl
# file: /input/acl
# owner: hadoop
# group: supergroup
user::rwx
user:mapred:r--
group::r-x
mask::r-x
other::r-x


执行权限被拒绝:
[hadoop@master ~]$ logout
[root@master ~]# su - mapred
[mapred@master ~]$ hadoop fs -ls /input/acl
ls: Permission denied: user=mapred, access=READ_EXECUTE, inode="/input/acl":hadoop:supergroup:drwxr-xr-x:user:mapred:r--,group::r-x

移除acl:
[hadoop@master ~]$ hdfs dfs -setfacl -x user:mapred /input/acl
[hadoop@master ~]$ hdfs dfs -getfacl /input/acl
# file: /input/acl
# owner: hadoop
# group: supergroup
user::rwx
group::r-x
mask::r-x
other::r-x

重新拥有执行权限,因为mapred是hadoop用户组中的:
[mapred@master ~]$ hadoop fs -ls /input/acl/yarn-site.xml
Found 1 items
-rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml

定义在owner、other里的权限一直都是有效的,其它权限可能用效或者被隐蔽。

named user与named group的值是否生效,还要看其值与mask的“与”值,即mask也要有该权限,才能生效。

mask是用于过滤named user与named group的权限的,可以通过chmod改变

如:在给同组的其它用户,其它组的用户或组添加acl时,如果给的权限比当前mask大,则mask会随之更新:

[hadoop@master ~]$ hdfs dfs -getfacl /input/acl        【初始权限】
# file: /input/acl
# owner: hadoop
# group: supergroup
user::rwx
group::r-x
mask::r-x
other::r-x
[hadoop@master ~]$ hdfs dfs -setfacl -m user:mapred:rwx /input/acl
[hadoop@master ~]$ hdfs dfs -getfacl /input/acl            【mapred用户拥有rwx权限,但mask为r-x,则mask自动改为rwx】
# file: /input/acl
# owner: hadoop
# group: supergroup
user::rwx
user:mapred:rwx
group::r-x
mask::rwx
other::r-x

但所属组的用户权限不受影响:

[hadoop@master ~]$ hadoop fs -chmod g-x /input/acl        【取消同一用户组的可执行权限,并更新mask的值】
[hadoop@master ~]$ hdfs dfs -getfacl /input/acl
# file: /input/acl
# owner: hadoop
# group: supergroup
user::rwx
group::r-x	#effective:r--
group:apache:rwx	#effective:rw-
mask::rw-
other::r-x
[hadoop@master ~]$ logout
[root@master ~]# su - mapred
[mapred@master ~]$ hadoop fs -ls /input/acl                【上一步取消同一用户组的可执行权限,但没有生效,因为mapred和hadoop属于同一组】
Found 1 items
-rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml




<think>好的,我现在需要解决用户提到的HDFS DFS命令在Cron中不执行的问题。首先,我需要理解用户的问题场景。用户可能在Cron作业中设置了hdfs dfs相关的命令,比如上传或下载文件,但发现这些命令没有按预期执行。接下来,我需要考虑可能的原因,并逐一分析可能的解决方案。 首先,环境变量的问题。Cron执行任务时,环境可能与用户登录时的环境不同。用户可能在终端中可以正常执行hdfs命令,因为终端加载了用户的bashrc或profile中的环境变量,比如HADOOP_HOME、HADOOP_CONF_DIR等。但Cron默认使用最小环境,可能缺少这些变量,导致找不到hdfs命令。因此,解决方案可能是在Cron脚本中显式设置这些环境变量,或者在执行命令时使用绝对路径。 其次,权限问题。Cron任务通常以当前用户的身份运行,但如果权限不足,比如用户没有写入HDFS权限,或者HDFS目录的权限设置不正确,会导致命令执行失败。用户可能需要检查HDFS权限设置,或者使用适当的用户身份运行Cron任务,比如通过sudo或者设置HDFSACL。 第三,路径问题。hdfs命令可能位于特定的目录下,如/usr/local/hadoop/bin,而这个目录不在Cron的PATH环境变量中。因此,用户需要指定hdfs的全路径,或者在Cron脚本中设置PATH变量。 第四,错误处理与日志记录。Cron任务如果没有正确捕获输出和错误信息,用户可能无法看到具体的错误原因。建议用户将标准输出和错误重定向到日志文件,以便后续排查。例如,在Cron命令中添加 >> /path/to/logfile 2>&1。 另外,可能需要检查HDFS服务本身的运行状态。如果Cron执行时HDFS服务未启动,或者存在网络问题,命令也会失败。用户可以在脚本中添加检查服务状态的步骤,或者在执行前等待服务启动。 还有,SELinux或防火墙设置可能阻止Cron执行某些命令。需要检查这些安全设置是否允许hdfs命令的执行。 最后,用户提供的引用中有提到HDFS权限不足的问题[^4],这可能与当前情况相关。需要确保执行Cron任务的用户有足够的权限访问HDFS中的目标路径,可能需要修改目录权限或使用合适的用户身份执行命令。 总结可能的原因和对应的解决方案: 1. 环境变量缺失:设置PATH和Hadoop相关变量,或使用绝对路径。 2. 权限问题:检查HDFS目录权限和用户权限。 3. 路径问题:使用全路径执行hdfs命令。 4. 日志记录:重定向输出以查看错误信息。 5. 服务状态:确保HDFS服务在Cron执行时可用。 6. 安全策略:检查SELinux或防火墙设置。 接下来,需要将这些分析整理成结构化的回答,确保用户能逐步排查问题。</think>### HDFS DFS命令在Cron中不执行的原因及解决方案 #### 原因分析 1. **环境变量缺失** Cron任务默认使用最小化环境变量,可能缺少Hadoop相关配置(如`HADOOP_HOME`、`JAVA_HOME`等),导致无法定位`hdfs`命令[^2][^4]。 2. **绝对路径未指定** `hdfs`命令可能未加入系统`PATH`变量,Cron执行时无法找到该命令[^2]。 3. **权限问题** - **用户权限**:Cron任务可能以其他用户身份(如`root`)运行,而该用户无权限执行`hdfs`命令或访问HDFS路径。 - **HDFS权限**:目标目录的HDFS权限不足(如用户无写权限),导致操作失败[^4]。 4. **日志输出未捕获** Cron任务的错误信息未记录到日志文件,难以定位具体问题[^2]。 5. **服务依赖问题** Cron执行时HDFS服务未启动,或网络不可达。 --- #### 解决方案步骤 1. **指定完整命令路径** 使用`hdfs`命令的绝对路径(如`/usr/local/hadoop/bin/hdfs`),避免依赖环境变量。 **示例Cron任务**: ```bash * * * * * /usr/local/hadoop/bin/hdfs dfs -put /local/file /hdfs/path >> /tmp/hdfs_cron.log 2>&1 ``` 2. **显式设置环境变量** 在Cron脚本中加载Hadoop环境变量,例如: ```bash * * * * * source /home/hadoop/.bashrc && /usr/local/hadoop/bin/hdfs dfs -ls / ``` 3. **检查权限配置** - **系统用户**:确保Cron任务以Hadoop服务用户(如`hadoop`)运行。可通过`crontab -u hadoop -e`配置。 - **HDFS权限**: 使用`hdfs dfs -chmod`或`hdfs dfs -chown`调整目标目录权限。例如: ```bash hdfs dfs -chmod 777 /target_dir # 开放所有用户权限测试环境建议) ``` 4. **记录详细日志** 在Cron命令中重定向标准输出和错误到文件: ```bash * * * * * /path/to/hdfs dfs -command >> /path/to/logfile 2>&1 ``` 5. **验证服务状态** 在脚本中添加服务检查逻辑: ```bash #!/bin/bash if hdfs dfsadmin -report > /dev/null; then hdfs dfs -command else echo "HDFS服务不可用" >> /tmp/hdfs_error.log fi ``` --- #### 附加排查建议 - **手动测试Cron环境** 临时添加一个Cron任务输出环境变量,检查关键路径是否包含Hadoop配置: ```bash * * * * * env > /tmp/cron_env.log ``` - **检查SELinux/防火墙** 若系统启用了SELinux或防火墙,需确认其未拦截HDFS操作: ```bash setenforce 0 # 临时关闭SELinux(仅测试用) systemctl stop firewalld # 临时关闭防火墙 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值