轉自 http://lookqlp.iteye.com/blog/2189119 。 配置起來較復雜,需要在有測試環境之后再進行配置測試。 之后是有上HUE的計划的,所以這個也是一定要做的。
目標:
給各個業務組提供不同用戶及用戶組,並有限制的訪問hdfs路徑,及hive數據庫。
前提:
cloudera
cloudera manager
kerberos
ldap
sentry
問題與解決:
-
hive client直走hive的本地模式,沒有經過hiveserver2,所以此種方式能訪問所有的數據庫,具有超級管理員權限;考慮使用beeline形式。
登陸方式例如:
- beeline -u "jdbc:hive2://172.20.0.74:10000/data_system" -nhive -p111111(ldap賬戶及密碼)
或者
- beeline
- !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
https://issues.cloudera.org/browse/HUE-2484
https://issues.cloudera.org/browse/HUE-2566(option1方法可以解決)
具體步驟:- cd /opt/cloudera/parcels/CDH/lib/hue
- patch -p1 < /path/to/downloaded/hue-2484.patch
- <property>
- <name>hive.server2.authentication</name>
- <value>LDAP</value>
- </property>
未解決問題:hue賬戶未能與ldap賬戶同步。
步驟:
- 收集用戶及用戶組,及對個個庫的訪問權限。例如bi組對bi庫有讀寫權限及對其他庫具有讀權限。
- 所有節點增加用戶和用戶組
- useradd bi -u 1001
- usermod -a -G bi bi
- ldap增加賬戶及賬戶組
- grep -E "dsp:|dmp:" /etc/passwd >/opt/passwd.txt
- /usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif
- ldapadd -x -D "uid=ldapadmin,ou=people,dc=yeahmobi,dc=com" -w secret -f /opt/passwd.ldif
- grep -E "dsp:|dmp:" /etc/group >/opt/group.txt
- /usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif
- ldapadd -x -D "uid=ldapadmin,ou=people,dc=yeahmobi,dc=com" -w secret -f /opt/group.ldif
- ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=yeahmobi,dc=com' -w secret "uid=dsp,ou=people,dc=yeahmobi,dc=com" -S
- ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=yeahmobi,dc=com' -w secret "uid=dmp,ou=people,dc=yeahmobi,dc=com" -S
- ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=yeahmobi,dc=com' -w secret "uid=bi,ou=people,dc=yeahmobi,dc=com" -S
- hadoop中增加相應用戶的目錄及權限
- hadoop fs -mkdir /user/dsp
- hadoop fs -chmod -R 755 /user/dsp
- hadoop fs -chown -R dsp:dsp /user/dsp
- hive配置ldap
若之前啟用了sentry file形式的服務,需要將policy file based sentry enabled 設置成false,並且service wide中選擇sentry service。
service wide advanced safed value
- <property>
- <name>hive.server2.authentication</name>
- <value>LDAP</value>
- </property>
- <property>
- <name>hive.server2.authentication.ldap.url</name>
- <value>ldap://ip-10-1-33-20.ec2.internal</value>
- </property>
- <property>
- <name>hive.server2.authentication.ldap.baseDN</name>
- <value>ou=people,dc=yeahmobi,dc=com</value>
- </property>
- <property>
- <name>hive.server2.authentication</name>
- <value>LDAP</value>
- lt;/property>
- 如上問題2
- hue設置ldap
hue server advanced hue_safety_value_server.ini
- [desktop]
- ldap_username=hive
- ldap_password=111111
- hdfs kerberos配置中增加hdfs的權限
service wide security
authorized user、groups設置成* 也行 - yarn增加用戶的使用權限
nodemanger group security allowed system users - 重啟相關服務,cloudera manager會提示重啟整個集群。
- hive server2和metastore啟動失敗,奇怪現象,測試環境中沒有問題,正式環境中出現認證異常,只要加上ldap認證就會失敗。
解決辦法,重新再別的節點配置新的hive sever2和metastore並且cm上創建新的group。
注意此種解決方案,hue的配置中需要修改hive server2的路徑。 - 授權,beeline中使用hive賬戶登陸和授權
- beeline -u "jdbc:hive2://172.20.0.74:10000/default" -nhive -p111111
- CREATE ROLE admin_role ;
- GRANT ALL ON SERVER server1 TO ROLE admin_role;
- GRANT ROLE admin_role TO GROUP hive;
- 權限測試,使用新賬戶登陸測試
beeline -u "jdbc:hive2://172.20.0.74:10000/default" -nbi -p111111
或者通過hue,新建對應賬戶,beeswax測試。(此處hue與ldap賬戶沒有同步,同步失敗,后續解決) - 新增加的賬戶,若需要訪問/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 - kerberos對新用戶(bi)授權
- addprinc -randkey krbtgt/new_hostname@YEAHMOBI.COM
- addprinc -randkey host/new_hostname@YEAHMOBI.COM
- addprinc -randkey HTTP/new_hostname@YEAHMOBI.COM
- addprinc -randkey bi/new_hostname@YEAHMOBI.COM
- xst -norandkey -k bi.keytab host/new_hostname@YEAHMOBI.COM
- xst -norandkey -k bi.keytab HTTP/new_hostname@YEAHMOBI.COM
- xst -norandkey -k bi.keytab bi/new_hostname@YEAHMOBI.COM
- mapreduce測試
- kinit -kt bi.keytab bi/new_hostname@YEAHMOBI.COM
- jdbc測試,參見 git clone https://github.com/firecodeman/Cloudera-Impala-Hive-JDBC-Example.git
- mvn clean compile
- mvn exec:java -Dexec.mainClass=com.cloudera.example.ClouderaHiveJdbcExample