hue 用户权限分配
一、问题背景
CDH集群原来在使用hue部署oozie工作流的时候发现不能够运行工作流,因为当时hue创建用户时设置root为初始用户,而root用户不属于supergroup组,不能够调用集群中任何组件,为了解决这个问题,当时查参考了CDH权限不够,修改用户和用户组为root
这篇文章的做法后面来看,只是治标不治本,并没有完全解决后面hue中如果设置其他用户后,其他用户所具有的权限问题,也没有深入讲解CDH组件用户权限问题。
今天这篇文章讲解的几个点:
- 如何将集群内部组件恢复到原来的设置,并且让现在拥有的root用户继续能够调用工作流
- 在hue中添加新的用户,并让新的用户具有调用其他组件的权限
- 那个用户才是hue默认的初始用户
二 、恢复集群默认设置
1. 各个组件目录所属用户以及权限恢复到默认
/var/log 目录下涉及目录所属用户修改
sudo chown -R hdfs:hadoop /var/log/hadoop-hdfs
sudo chown -R mapred:hadoop /var/log/hadoop-mapreduce
sudo chown -R yarn:hadoop /var/log/hadoop-yarn
sudo chown -R httpfs:httpfs /var/log/hadoop-httpfs
sudo chown -R impala:impala /var/log/impalad
sudo chown -R hive:hive /var/log/hive
/var/lib 目录下所需文件夹所属用户修改
sudo chown -R hdfs:hadoop /var/lib/hadoop-hdfs
sudo chown -R mapred:hadoop /var/lib/hadoop-mapreduce
sudo chown -R yarn:hadoop /var/lib/hadoop-yarn
sudo chown -R httpfs:httpfs /var/lib/hadoop-httpfs
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
sudo chown -R impala:impala /var/lib/impalad
sudo chown -R hive:hive /var/lib/hive
部分组件目录所属用户修改
sudo chown -R zookeeper:zookeeper /var/log/zookeeper/*
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper/*
sudo chown -R impala:impala /var/log/impala-minidumps
2. 集群系统用户,以及系统组恢复默认
依次将原来所有修改过的用户,组恢复默认,然后重启集群。
3. 重启集群中碰到的error
bind(2) error:Permission denied when trying to bind to '/var/run/hdfs-sockets/dn’ ——datanode
解决办法:
sudo chown -R hdfs:hadoop /var/run/hdfs-sockets
datanode data存储目录所属目录修改
sudo chown -R hdfs:hadoop /data1/dfs /data10/dfs /data11/dfs /data12/dfs /data13/dfs /data14/dfs /data15/dfs /data16/dfs /data2/dfs /data3/dfs /data4/dfs /data5/dfs /data6/dfs /data7/dfs /data8/dfs /data9/dfs
sudo chown -R hdfs:hadoop /data1/dfs/* /data10/dfs/* /data11/dfs/* /data12/dfs/* /data13/dfs/* /data14/dfs/* /data15/dfs/* /data16/dfs/* /data2/dfs/* /data3/dfs/* /data4/dfs/* /data5/dfs/* /data6/dfs/* /data7/dfs/* /data8/dfs/* /data9/dfs/*
sudo chown -R yarn:hadoop /data1/yarn/* /data10/yarn/* /data11/yarn/* /data12/yarn/* /data13/yarn/* /data14/yarn/* /data15/yarn/* /data16/yarn/* /data2/yarn/* /data3/yarn/* /data4/yarn/* /data5/yarn/* /data6/yarn/* /data7/yarn/* /data8/yarn/* /data9/yarn/*
4. 如何给root等新建用户赋予相应权限
这里说一下,如果hue中创建第一个用户是hdfs用户,hdfs用户是可以调用其他组件的,也就是说默认可以调用其他的组件的用户是hdfs,用如果添加新用户,需要将新用户添加到hdfs用户所属组supergroup组,再将其他组件的用户也添加到supergroup组,并将该用户所属目录权限放开到组权限,那么组内的其他用户就可以调用这个用户目录文件,因为他们同属于一个组。
root在hdfs目录所属用户,组修改
sudo su - hdfs -s /bin/bash -c "hadoop fs -chown root:supergroup /user/root/*"
集群所有机器添加supergroup组
sudo groupadd supergroup
然后将所有组件用户添加到该组,包括一些hue新建的用户,以root为例
sudo usermod -a -G supergroup root
sudo usermod -a -G supergroup yarn
sudo usermod -a -G supergroup hive
sudo usermod -a -G supergroup zookeeper
sudo usermod -a -G supergroup mapred
sudo usermod -a -G supergroup oozie
sudo usermod -a -G supergroup sqoop
sudo usermod -a -G supergroup impala
同步系统的权限信息到HDFS
sudo su - hdfs -s /bin/bash -c "hdfs dfsadmin -refreshUserToGroupsMappings"
将/user/root目录的权限由700,修改为770
sudo su - hdfs -s /bin/bash -c "hadoop fs -chmod 770 /user/root"
sudo su - hdfs -s /bin/bash -c "hadoop fs -chmod 770 /user/root/*"
5. root用户测试调用工作流遇到问题
运行工作流时,报错,信息如下:
Job init failed : org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.io.FileNotFoundException: File does not exist: hdfs://nns1/user/root/.staging/job_1576825280845_0017/job.splitmetainfo
at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl$InitTransition.createSplits(JobImpl.java:1582)
at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl$InitTransition.transition(JobImpl.java:1446)
at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl$InitTransition.transition(JobImpl.java:1404)
at org.apache.hadoop.yarn.state.StateMachineFactory$MultipleInternalArc.doTransition(StateMachineFactory.java:385)
at org.apache.hadoop.yarn.state.StateMachineFactory.doTransition(StateMachineFactory.java:302)
at org.apache.hadoop.yarn.state.StateMachineFactory.access$300(StateMachineFactory.java:46)
at org.apache.hadoop.yarn.state.StateMachineFactory$InternalStateMachine.doTransition(StateMachineFactory.java:448)
at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl.handle(JobImpl.java:998)
at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl.handle(JobImpl.java:138)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster$JobEventDispatcher.handle(MRAppMaster.java:1366)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.serviceStart(MRAppMaster.java:1142)
at org.apache.hadoop.service.AbstractService.start(AbstractService.java:193)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster$5.run(MRAppMaster.java:1573)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.initAndStartAppMaster(MRAppMaster.java:1569)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1502)
Caused by: java.io.FileNotFoundException: File does not exist: hdfs://nns1/user/root/.staging/job_1576825280845_0017/job.splitmetainfo
at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1270)
at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1262)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1262)
at org.apache.hadoop.mapreduce.split.SplitMetaInfoReader.readSplitMetaInfo(SplitMetaInfoReader.java:51)
at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl$InitTransition.createSplits(JobImpl.java:1577)
来源: http://10.6.23.2:8000/hue/jobbrowser#!id=job_1576825280845_0017
需要添加工作流运行环境变量参数:
hadoop用户名:工作流用户
HADOOP_USER_NAME=${wf:user()}
如果碰见执行复杂sql查询时报错:
Could not find any valid local directory for nmPrivate/container_1576825280845_0076_02_000010.tokens
需要检查一下/data*/yarn/nm/nmPrivate 用户组是否是yarn:hadoop,如果不是,需要改成yarn:hadoop
sudo chown -R yarn:hadoop /data1/yarn/* /data10/yarn/* /data11/yarn/* /data12/yarn/* /data13/yarn/* /data14/yarn/* /data15/yarn/* /data16/yarn/* /data2/yarn/* /data3/yarn/* /data4/yarn/* /data5/yarn/* /data6/yarn/* /data7/yarn/* /data8/yarn/* /data9/yarn/*
本篇所涉及的权限问题,仅限于新用户配置,调用工作流等hue用户权限,如果涉及到操作具体HIVE表或者数据库,需要配置Sentry+Kerberos,或者CDH官方推荐的LDAP,来进行更加细化的权限分配。
附上官方文档链接,英文好的朋友可以点楼下传送门:
如果有什么不清楚的,可以再文章下方留言,希望对你有帮助。
来源:CSDN
作者:爱划水的快乐风男HASAI
链接:https://blog.csdn.net/weixin_42885843/article/details/103682326