赞
踩
用户可以通过ThriftServer来访问HBase服务,它的特点如下:
如果HBase集群开启了Kerberos认证(E-MapReduce可一键创建安全集群,非常方便
),那么用户怎么通过ThriftServer访问HBase服务呢?
ThriftServer其实是HBase服务的客户端,既然HBase开启了Kerberos认证,那么ThrifServer也必须配置Kerberos的信息才能正常访问HBase集群服务。
在ThriftServer的hbase-site.xml文件中添加新配置:
- <property>
- <name>hbase.security.authentication</name>
- <value>kerberos</value>
- </property>
- <property>
- <name>hbase.thrift.kerberos.principal</name>
- <value>hbase/_HOST@EMR.123456.COM</value>
- </property>
- <property>
- <name>hbase.thrift.keytab.file</name>
- <value>/etc/ecm/hbase-conf/hbase-thrift.keytab</value>
- </property>
上述配置中实际值以用户为准(principle和keytab需对应)。
用户使用python/java/php等Thrift客户端访问ThrifServer有两种方式:
任何用户都可以通过ThriftServer访问HBase服务,而且都是以ThriftServer本身配置的hbase.thrift.kerberos.principal
中的用户名去访问HBase服务,即对HBase服务来说只有一个固定的用户来访问。
如下图所示:
这种方式使得HBase集群的Kerberos认证无效,不适合使用开启了Kerberos的场景。
ThriftServer可以开启对Client进行身份认证,而且以实际的用户身份访问HBase服务。
需要做如下配置:
- <property>
- <name>hbase.thrift.security.qop</name>
- <value>auth</value>
- </property>
其中hbase.thrift.security.qop
可以是auth/auth-init/auth-conf中的一个
- <property>
- <name>hadoop.proxyuser.$user.hosts</name>
- <value>*</value>
- </property>
- <property>
- <name>hadoop.proxyuser.$user.groups</name>
- <value>*</value>
- </property>
备注:
a) $user为ThriftServer本身配置的hbase.thrift.kerberos.principal中的用户
b) 重启HBase集群(无需重启HDFS)
上述2.2.2节
的场景代码
参考github上一个项目:
https://github.com/joshelser/hbase-thrift1-python-sasl
使用方式在README.md
中:
- -> 在客户端运行的账号下kinit初始化好Kerberos的TGT
- -> ./setup.sh
- -> python get_row.py
备注: get_row.py
需要根据实际集群的配置修改相关参数
HBase官方的example jar有示例代码:
https://github.com/apache/hbase/tree/master/hbase-examples
- -> 在客户端运行的账号下kinit初始化好Kerberos的TGT
- ->
- export HBASE_EXAMPLE_CLASSPATH=`hbase classpath`;
-
- java -cp /usr/lib/hbase-current/lib/hbase-examples-1.1.1.jar:$HBASE_EXAMPLE_CLASSPATH org.apache.hadoop.hbase.thrift.DemoClient $thrift_server_host $thrift_serve_port true
有兴趣或者有需求的用户可以关注一下E-MapReduce的安全相关的功能,有问题及时联系和反馈。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。