热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hadoop命令操作hdfs目录权限管理

由于公司的大数据平台搭建的比较简陋,还要让之前根本没有接触过hadoop平台的开发算法人员使用,他们的错误操作经常给你带来意外的惊喜和感动的泪水

由于公司的大数据平台 搭建的比较简陋,还要让 之前根本没有接触过 hadoop平台的开发 算法人员使用,他们的错误操作 经常给你带来 意外的惊喜和 感动的泪水,我心里有十万个 MMP。。。

所以刚开始就想干脆像 初中小学那样写个班规似的 使用规范吧,但是规范的约束力是有限的,需要大家相互信任,但是总有人会错误操作的风险,怎么办 怎么办,只能通过强制的方法 解决这个局面。
好汉 大部分都是被逼上梁山的,平台的演进大多也是根据眼前出现的问题 不断精益求精的。所以搭建 权限管理 势在必行。

先简单 介绍一下 思想,其实 有两种 方式 ,
一种是配置 ugi 的xml ,
一种是 直接在 linux 创建相应的用户和组 ,然后把 hdfs 的某一文件夹的操作权限 赋予 该用户和组,
第一种侵入性小,配置简单 ,第二种则简单粗暴 好操作 但如果有成百上千的hadoop操作用户 则是一个不简单 的力气活,最好有一个脚本可以自动化 操作这些。为了 尽快见效,我选择了第二种,而且 还要搭配着与我们的hadoop 任务提交机器 使用。

我们数据算法小组 现在 一共五个人 ,人少就给每个人 设置了一个账号 权限 ,还另外设置了一个 dev 及guests 的账号,方便 其他组和 新加入的小伙伴临时使用
下面开始操作 了
1.在 hadoop master 的节点 创建 这些账户 ,为了这些账户好管理,也要创建一个 组,组可以先用户创建 也可以在用户之后创建

useradd medev && echo da@opo#8N5 | passwd --stdin medev
echo “medev ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers
groupadd datadev
usermod -a -G datadev medev
这些命令 需要在 root 用户下使用

2.登录到每个用户 的shell 中,然后 把 原来 java hadoop path 的环境变量 粘贴复制到 新创建的用户的 ~/.bashrc,保存并退出,然后
vi ~/.bashrc

export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export PATH=PATH:PATH:PATH:JAVA_HOME/bin:HADOOPHOME/bin:HADOOP_HOME/bin:HADOOPHOME/bin:HADOOP_HOME/sbin
export SCALA_HOME=/usr/local/scala
export SQOOP_HOME=/usr/local/sqoop
export PATH=$SQOOP_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/java/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/java/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/root/bin:/usr/local/java/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/scala/bin

source ~/.bashrc
【注意,第二步 我们只给 dev 和guests 两个用户这样在 Master设置了,其他个人账号没有设置 ,主要是防止这些同事 无意登录到 Master 节点 错误操作,但是 所有新创建的 用户,我们在 任务提交机器都这样配置了】

3.使用hadoop fs -chown user:group /dirpath ,为 hdfs 上的 用户分配 目录操作权限,大前提是这样的原来的日志流目录还是 hadoop 管理员 hadoop 和组 supergroup 的,在 hdfs根目录下创建 一个总的 /outputs目录,dev 用户 可以操控这个 目录 及子目录,然后 其他的个人账号,只可以操控 在 /outputs/下的 各自的子目录集,比如 muller 只可以操作
/outputs/mulleroutput,整个 /outputs目录都属于 该用户组

hadoop fs -chown -R medev:datadev /Outputs/devoutput

这个操作需要在 hadoop管理员的身份执行

然后可以在 Master 使用 hadoop fs -put -get -mkdir -rm -r 命令 来测试,果然都可以实现目录权限的管理,不属于你的 只有查看 和mapreduce的权限,不能创建 不能删除 不能下载, 只能在自己的目录下肆意妄为。
rm: Permission denied: user=meDev, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x
put: Permission denied: user=medev, access=WRITE, inode="/xial":hadoop:supergroup:drwxr-xr-x

mkdir: Permission denied: user=medev, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x

get: /usr/local/hadoop/part-00000.deflate.COPYING (Permission denied)
5.然后在 hadoop 任务提交机器 继续 创建同名的用户 和配置环境变量 即可,然后测试 完全没有压力

但是 我们还是 太天真了 ,我们 做好了 hdfs 目录 权限管理,却发现无法 进行 mapreduce了 ,在运行 hadoop 自带的 wordcount ,也报 权限不足,细细的看,发现 问题的严重性,独自的用户因为不属于 supergroup 组,无法rwx hadoop的根目录的 /tmp目录,此目录 是 放置 map 中间值得目录,难道你忘记了吗,hadoop 在进行 mapreduce时,会把中间结果保存在硬盘 上,实际是hdfs的 /tmp目录中,如果 操作用户 没有权限操作 /tmp也是无法进行mapReduce的,
17/10/27 19:52:21 INFO client.RMProxy: Connecting to ResourceManager at hadoop-master/194.168.255.155:8032 org.apache.hadoop.security.AccessControlException: Permission denied: user=linkedmeGuests, access=EXECUTE, inode="/tmp/hadoop-yarn":hadoop:supergroup:drwx------
所以 要 把 /tmp 目录的权限设置为 777,单单 /tmp设置了还不可以,还要把 其子目录都要配置为777的权限,切换到hadoop 管理员操作

hadoop fs -chmod -R 777 /tmp

然后 再运行 发现又失败了,发现 对output的目录没有操作权限,
17/10/27 19:56:30 INFO mapreduce.Job: Job job_1508742787565_0140 running in uber mode : false
17/10/27 19:56:30 INFO mapreduce.Job: map 0% reduce 0%
17/10/27 19:56:30 INFO mapreduce.Job: Job job_1508742787565_0140 failed with state FAILED due to: Job setup failed : org.apache.hadoop.security.AccessControlException: Permission denied: user=meGuests, access=WRITE, inode="/Outputs/DannyOutputs":Danny:datadev:drwxr-xr-x

这个当然了,我们规定了 每个账号用户的可以操作的output目录,其他别人的目录都不允许操作,所以 只要把output 的目录设置成自己的output目录 创建子目录才可以正常操作,结果运行成功了

另外的 重点 !!!
我们还要配置 一下 hdfs 相关 output目录的存储大小上限,这样 方便管理,不然有人 的output太大,都不晓得 竟然会超过 源日志 大小,这就尴尬了
》bin/hdfs dfs -put readme.txt /finance

》bin/hdfs dfs -du -s /finance
》3901 /finance

》bin/hdfs dfsadmin -setSpaceQuota 4000 /finance
设置/finance的大小上限为4000个字节

》bin/hdfs dfs -put readme1.txt /finance
由于已经超出4000个字节,则会报错
》bin/hdfs dfsadmin -clrSpaceQuota /finance 将配额清除掉
》bin/hdfs dfs -put readme1.txt /finance 这次上传就不会错了~

[apache-nutch-1.2.rar 大约248M]
bin/hdfs fsck /finance/apache-nutch-1.2.rar
参考 http://www.cnblogs.com/i80386/p/3580107.html

这样 把 这些 用户账号 分配并告知 使用者,并 告知 禁止使用root 和管理者用户角色 并不可使用他人账号 ,这样就可以愉快的进行 hdfs 的文件 权限管理了,


推荐阅读
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • Kylin 单节点安装
    软件环境Hadoop:2.7,3.1(sincev2.5)Hive:0.13-1.2.1HBase:1.1,2.0(sincev2.5)Spark(optional)2.3.0K ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop 源码学习笔记(4)Hdfs 数据读写流程分析
    Hdfs的数据模型在对读写流程进行分析之前,我们需要先对Hdfs的数据模型有一个简单的认知。数据模型如上图所示,在NameNode中有一个唯一的FSDirectory类负责维护文件 ... [详细]
  • 对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例为了方便查看源代码,关联导入源代 ... [详细]
  • CentOS 7配置SSH远程访问及控制
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
  •        在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下:       1、CentOS6.7下安装JDK,地址:http:b ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
author-avatar
淡漠少_341
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有