zoukankan      html  css  js  c++  java
  • 【转】cloudera新增用户权限配置

    转自 http://lookqlp.iteye.com/blog/2189119  。   配置起来较复杂,需要在有测试环境之后再进行配置测试。  之后是有上HUE的计划的,所以这个也是一定要做的。

    目标:

    给各个业务组提供不同用户及用户组,并有限制的访问hdfs路径,及hive数据库。

    前提:

    cloudera

    cloudera manager

    kerberos

    ldap

    sentry

    问题与解决:
    • hive client直走hive的本地模式,没有经过hiveserver2,所以此种方式能访问所有的数据库,具有超级管理员权限;考虑使用beeline形式。

      登陆方式例如:

      Java代码  收藏代码
      1. beeline -u "jdbc:hive2://172.20.0.74:10000/data_system" -nhive -p111111(ldap账户及密码)  

      或者

      Java代码  收藏代码
      1. beeline  
      2. !connect jdbc:hive2://172.20.0.74:10000/data_system;principal=hive/slave-74@YEAHMOBI.COM  

       输入kerberos账户及密码。

    • hue版本3.6.0不支持hive ldap,hue会提示不没有hive server2服务,参考issue

      Java代码  收藏代码
      1. cd /opt/cloudera/parcels/CDH/lib/hue  
      2. patch -p1 < /path/to/downloaded/hue-2484.patch  
       hive所有advanced safety value中加上配置:
      Java代码  收藏代码
      1. <property>  
      2.   <name>hive.server2.authentication</name>  
      3.   <value>LDAP</value>  
      4. </property>  
       restart Hue

      未解决问题:hue账户未能与ldap账户同步。

    步骤:
    1. 收集用户及用户组,及对个个库的访问权限。例如bi组对bi库有读写权限及对其他库具有读权限。
    2. 所有节点增加用户和用户组
      Java代码  收藏代码
      1. useradd bi -u 1001  
      2. usermod -a -G bi bi  
       (所有节点都需要创建,而且uid必须一致)
    3. ldap增加账户及账户组
      Java代码  收藏代码
      1. grep -E "dsp:|dmp:" /etc/passwd  >/opt/passwd.txt      
      2. /usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif  
      3. ldapadd -x -D "uid=ldapadmin,ou=people,dc=yeahmobi,dc=com" -w secret -f /opt/passwd.ldif  
      4. grep -E "dsp:|dmp:" /etc/group  >/opt/group.txt  
      5. /usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif  
      6. ldapadd -x -D "uid=ldapadmin,ou=people,dc=yeahmobi,dc=com" -w secret -f /opt/group.ldif  
      7. ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=yeahmobi,dc=com' -w secret "uid=dsp,ou=people,dc=yeahmobi,dc=com" -S    
      8. ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=yeahmobi,dc=com' -w secret "uid=dmp,ou=people,dc=yeahmobi,dc=com" -S     
      9. ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=yeahmobi,dc=com' -w secret "uid=bi,ou=people,dc=yeahmobi,dc=com" -S     
    4. hadoop中增加相应用户的目录及权限
      Java代码  收藏代码
      1. hadoop fs -mkdir /user/dsp  
      2. hadoop fs -chmod -R 755 /user/dsp  
      3. hadoop fs -chown -R dsp:dsp /user/dsp  
    5. hive配置ldap
      若之前启用了sentry file形式的服务,需要将policy file based sentry enabled 设置成false,并且service wide中选择sentry service。
      service wide advanced safed value
      Java代码  收藏代码
      1. <property>  
      2.   <name>hive.server2.authentication</name>  
      3.   <value>LDAP</value>  
      4. </property>  
      5. <property>  
      6.   <name>hive.server2.authentication.ldap.url</name>  
      7.   <value>ldap://ip-10-1-33-20.ec2.internal</value>  
      8. </property>  
      9. <property>  
      10.   <name>hive.server2.authentication.ldap.baseDN</name>  
      11.   <value>ou=people,dc=yeahmobi,dc=com</value>  
      12. </property>  
       gateway/metastory/hiveserver2 advanced safed value分别加上
      Java代码  收藏代码
      1. <property>  
      2.  <name>hive.server2.authentication</name>  
      3.  <value>LDAP</value>  
      4. lt;/property>  
       hue依赖于hive gateway的配置,即必须配置gateway,且修改后hue需要重启。
    6. 如上问题2
    7. hue设置ldap
      hue server advanced hue_safety_value_server.ini
      Java代码  收藏代码
      1. [desktop]  
      2.  ldap_username=hive  
      3.  ldap_password=111111  
       并且选择sevice wide sentry service
    8. hdfs kerberos配置中增加hdfs的权限
      service wide security
      authorized user、groups设置成* 也行
    9. yarn增加用户的使用权限
      nodemanger group  security allowed system users
    10. 重启相关服务,cloudera manager会提示重启整个集群。
    11. hive server2和metastore启动失败,奇怪现象,测试环境中没有问题,正式环境中出现认证异常,只要加上ldap认证就会失败。
      解决办法,重新再别的节点配置新的hive sever2和metastore并且cm上创建新的group。
      注意此种解决方案,hue的配置中需要修改hive server2的路径。
    12. 授权,beeline中使用hive账户登陆和授权
      Java代码  收藏代码
      1. beeline -u "jdbc:hive2://172.20.0.74:10000/default" -nhive -p111111  
      2. CREATE ROLE admin_role ;  
      3. GRANT ALL ON SERVER server1 TO ROLE admin_role;  
      4. GRANT ROLE admin_role TO GROUP hive;   
    13. 权限测试,使用新账户登陆测试
      beeline -u "jdbc:hive2://172.20.0.74:10000/default" -nbi -p111111
      或者通过hue,新建对应账户,beeswax测试。(此处hue与ldap账户没有同步,同步失败,后续解决)
    14. 新增加的账户,若需要访问/user/hive/warehouse,即可能需要读取db下的表数据,进行mapreduce job,如上配置后,由于该目录设置的是771(sentry service要求的),新增账户没有访问权限,想到如下解决办法:
      a.将新增账户赋予hive为附加组(所有节点),经过测试可以访问该目录了,但sentry的grant授权没有效果了,即该账户继承了hive的超级权限,此方法失败。
      b.采用acl,hdfs开启dfs.namenode.acls.enabled,并hdfs执行如下命令:
         hadoop fs -setfacl -R -m user:bi:r-x  /user/hive/warehouse,测试是通过的,而且权限都正确。此步骤需要重启整个集群。参考http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_sg_hdfs_ext_acls.html
    15. kerberos对新用户(bi)授权
      Java代码  收藏代码
      1. addprinc -randkey krbtgt/new_hostname@YEAHMOBI.COM  
      2. addprinc -randkey host/new_hostname@YEAHMOBI.COM   
      3. addprinc -randkey HTTP/new_hostname@YEAHMOBI.COM   
      4. addprinc -randkey bi/new_hostname@YEAHMOBI.COM  
      5. xst -norandkey -k bi.keytab host/new_hostname@YEAHMOBI.COM   
      6. xst -norandkey -k bi.keytab HTTP/new_hostname@YEAHMOBI.COM  
      7. xst -norandkey -k bi.keytab bi/new_hostname@YEAHMOBI.COM  
    16. mapreduce测试
      Java代码  收藏代码
      1. kinit -kt bi.keytab bi/new_hostname@YEAHMOBI.COM  
      执行hadoop jar 测试
    17. jdbc测试,参见 git clone https://github.com/firecodeman/Cloudera-Impala-Hive-JDBC-Example.git
      Java代码  收藏代码
      1. mvn clean compile  
      2. mvn exec:java -Dexec.mainClass=com.cloudera.example.ClouderaHiveJdbcExample  
  • 相关阅读:
    [转载]c,c++及数据结构笔试题2(转)
    [转载]C,C++及数据结构笔试题1(转)
    C++指针详细解析
    [转载]转载一篇好文章:《海量数据处理常用思路和方法》
    [转载]c,c++及数据结构笔试题2(转)
    [转载]C++ 面试
    [转载]转载一篇好文章:《海量数据处理常用思路和方法》
    [转载]C,C++及数据结构笔试题1(转)
    BizTalk手动清除MessageBox数据库
    Linux中的时间和时间管理
  • 原文地址:https://www.cnblogs.com/hark0623/p/5039853.html
Copyright © 2011-2022 走看看