1、KDC创建principal

1.1、创建认证用户

登陆到kdc服务器,使用root或者可以使用root权限的普通用户操作:

# kadmin.local -q “addprinc -randkey hbase/yjt”

# kadmin.local -q “addprinc -randkey zookeeper/yjt”

# kadmin.local -q “addprinc -randkey zkcli/yjt”

其中hbase集群有几台,上面的第一台命令就需要执行几次,每次执行的时候请把yjt修改成你机器对应的主机名

同理,zookeeper也是一样

1.2、生成密钥文件

生成hbase密钥文件

# kadmin.local -q “xst  -norankey  -k  /etc/hbase.keytab hbase/yjt”

生成zookeeper密钥文件

# kadmin.local -q “xst  -norankey  -k  /etc/zk.keytab zookeeper/yjt zkcli/yjt”

拷贝hbase.keytab到所有的hbase集群节点的conf目录下

拷贝zk.keytab到所有zookeeper集群节点的conf目录下

2、zookeeper操作

2.1、创建jaas.conf文件

在zookeeper的conf目录下创建或者修改jaas.conf,没有就创建,配置信息如下:

Server {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/data1/hadoop/zookeeper/conf/zk.keytab"

storeKey=true

useTicketCache=false

principal="zookeeper/yjt@HADOOP.COM";  #这里注意,如果是多个zookeeper,那么这个principal里面的域名改成对应的主机名,同时在这个server里面,principal必须以zookeeper开头,也就是principal='zookeeper/hostname@xxx.COM',否则会报服务不能找到错误。

};

Client {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/data1/hadoop/zookeeper/conf/zk.keytab"

storeKey=true

useTicketCache=false

principal="zkcli/yjt@HADOOP.COM";

};

2.2、创建java.env文件

在zookeeper的conf目录下创建或者修改java.env文件,配置信息如下:

export JVMFLAGS="-Djava.security.auth.login.config=/data1/hadoop/zookeeper/conf/jaas.conf"

2.3、修改zoo.cfg文件

添加如下属性:

kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true authProvider.=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=

2.4、测试zookeeper kerberos

首先启动zookeeper集群,然后使用zkcli -server IP:端口(注意,一定要以这种方式)测试

如下:zkCli.sh -server yjt:2181

在输出的信息中,最下面如果能找到类似下面这样的信息,就代表配置成功:

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

WATCHER::

WatchedEvent state:SaslAuthenticated type:None path:null

在使用zkCli.sh连接zookeeper的时候,这里贴一下错误信息:

WatchedEvent state:SyncConnected type:None path:null
-- ::, [myid:] - ERROR [main-SendThread(rslog084:):ZooKeeperSaslClient@] - An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database () - LOOKING_UP_SERVER)]) occurred when evaluating Zookeeper Quorum Member's received SASL token. Zookeeper Client will go to AUTH_FAILED state.
-- ::, [myid:] - ERROR [main-SendThread(rslog084:):ClientCnxn$SendThread@] - SASL authentication with Zookeeper Quorum member failed: javax.security.sasl.SaslException: An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database () - LOOKING_UP_SERVER)]) occurred when evaluating Zookeeper Quorum Member's received SASL token. Zookeeper Client will go to AUTH_FAILED state.

造成上述原因是由于服务端principal主体错误,可能错误的原因如下:

、在jaas.conf文件中,principal主体错误,正确的主体名称格式: zookeeper/<hostname>@<realm>
2、当采用zkCli.sh 的方式请求中,默认的host应该是localhost,因此在kdc中才会发现客户端的请求和  zookeeper/localhost@NETEASE.COM 这个principal进行认证,但是在kerberos的database中却没有这个principal。
解决方法: 使用zkCli.sh -server host:port 访问。 同时zookeeper配置文件中sever部分的principal必须为zookeeper/<hostname>@<your realm>

3、hbase配置

3.1、配置hbase-site.xml

添加如下配置:

<property>

<name>hbase.security.authorization</name>

<value>true</value>

</property>

<property>

<name>hbase.security.authentication</name>

<value>kerberos</value>

</property>

<property>

<name>hbase.rpc.engine</name>

<value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>

</property>

<property>

<name>hbase.regionserver.kerberos.principal</name>

<value>hbase/_HOST@HADOOP.COM</value>

</property>

<property>

<name>hbase.regionserver.keytab.file</name>

<value>/data1/hadoop/hbase/conf/hbase.keytab</value>

</property>

<property>

<name>hbase.master.kerberos.principal</name>

<value>hbase/_HOST@HADOOP.COM</value>

</property>

<property>

<name>hbase.master.keytab.file</name>

<value>/data1/hadoop/hbase/conf/hbase.keytab</value>

</property>

3.2、启动hbase

# start-hbase.sh

进去到hbase的客户端

# hbase shell

查看当前存在的表

hbase(main):001:0> list

TABLE

0 row(s) in 0.3550 seconds

=> []

如果上述的输出没有报错,说明配置成功

注:hadoop版本在2.6以上数据传输才能使用sasl方式,而hbase又得版本集成Hadoop的版本低于2.6,会导致hbase失败,我在使用hadoop2.9.2,hbase1.3.1测试的时候,就报如下错误:

2019-10-24 15:04:12,325 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to read expected SASL data transfer protection handshake from client at /192.168.0.230:48326. Perhaps the client is running an older version of Hadoop which does not support SASL data transfer protection

2019-10-24 15:05:02,352 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to read expected SASL data transfer protection handshake from client at /192.168.0.230:48346. Perhaps the client is running an older version of Hadoop which does not support SASL data transfer protection

2019-10-24 15:05:12,418 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to read expected SASL data transfer protection handshake from client at /192.168.0.230:48352. Perhaps the client is running an older version of Hadoop which does not support SASL data transfer protection

2019-10-24 15:05:22,461 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to read expected SASL data transfer protection handshake from client at /192.168.0.230:48356. Perhaps the client is running an older version of Hadoop which does not support SASL data t

解决办法:

(1) 、使用高版本的hbase

(2) 、把高版本的hbase下面的lib库里面的文件拷贝到低版本的hbase lib库里面,当然,先要删除低版本hbase lib库里面的关于hadoop相关的软件报。

3.2、测试

(1)、在集群内部进入到shell,输入命令为 hbase shell

创建表:

# create ‘test’, ‘c1’

如果能成功创建说明没问题

(2)、咋集群内部使用phoenix连接测试

在使用Kerberos以后,phoenix连接hbase的方式有两种:

第一种:查看当前是否存在票据

出现上面的信息,说明是存在票据的,所以,这个时候可以使用:

jdbc:phoenix:<quorom>:<port>  方式连接

如下:

# ./sqlline.py yjt:2181   其实就跟原先的连接方法一样。

第二种:不存在票据

jdbc:phoenix:<quorom>:<port>:[zk_rootNode]:<principal>:<keytab>

#  ./sqlline.py yjt:2181:hbase/yjt:/data1/hadoop/hbase/conf/hbase.keytab

如果出现上述,说明成功。

在测试的时候,由于配置不当,导致在集群内部测试时失败,错误日志如下:

解决办法:这是由于配置完hbase Kerberos以后,没有把hbase-iste.xml拷贝到phoenix的bin目录下覆盖原来的配置文件,导致失败。

(3) 、hbase客户端测试

  1. 从集群拷贝hbase的目录到客户端,注意:hbase的根目录最好一致,这样就不用修改hbase-site.xml文件里面的密钥路径了。如下:

Hbase集群(随便选一台)上面操作,操作用户为hduser,下面的192.168.0.9为集群的客户端:

# scp -r /data1/hadoop/hbase 192.168.0.9:/data1/hadoop

  1. 拷贝zookeeper密钥

Hbase依赖与zookeeper连接,所以,需要把zookeeper的密钥文件从zookeeper集群拷贝到客户端(当然,可以拷贝整个目录到客户端,这样还可以测试zookeeper的客户端是否可以正常使用,当hbase错问题的时候,可以排查是否是zookeeper导致的),zookeeper的密钥存放与客户端的/data1/hadoop/zookeeper/conf下(这个目录随意,只需要这个目录与hbase/conf下面的zk-jaas.conf文件里面的密钥存放路径统一就行),如下:

# scp /data1/hadoop/zookeeper/conf/zk.keytab 192.168.0.9:/data1/hadoop/zookeeper/conf

  1. 拷贝hadoop到客户端

同理,hbase依赖与Hadoop存储数据,所以需要与Hadoop进行交互,这里拷贝Hadoop的配置到客户端,如下:

# scp -r /data1/hadoop/hadoop  192.168.0.9:/data1/hadoop

同时,还需要拷贝jdk(如果客户端存在,也可以不用拷贝,但是,jdk的目录不一样的话,需要修改hbase,hadoop环境变量内部的java属性)

# scp -r /data1/hadoop/jdk 192.168.0.9:/data1/jdk

  1. 配置hbase、zookeeper、Hadoop的环境变量

修改当前用户的.bashrc文件,我当前的用户是hduser

# vim /home/hduser/.bashrc    修改如下:

export HBASE_HOME=/data1/hadoop/hbase

export PATH=${HBASE_HOME}/bin:${PATH}

export ZOOK_HOME=/data1/hadoop/zookeeper

export PATH=${ZOOK_HOME}/bin:$PATH

export HADOOP_HOME=/data1/hadoop/hadoop

export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

注意:这里一定要设置Hadoop的环境变量,如果Hadoop环境变量设置错误,或者没有设置,将会报如下的错误:

Caused by: GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)

FATAL [main] ipc.RpcClientImpl: SASL authentication failed. The most likely cause is missing or invalid credentials. Consider 'kinit'.

javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

出现上述错误的原因有如下几点:

第一点:没有使用kinit获取tgt;

第二点:没有正确配置kerberos配置文件;

第三点:客户端与集群时间不一致(时间相差超过5分钟);

第四点:客户端使用的jar包与集群不一致;

第五点:Hadoop环境变量未正确设置。

如果在集群内部可以正常的使用hbase shell,但是在客户端不行,可以在客户端打开调试模式,如下:

在测试之前,先获取票据:

# kinit /data1/hadoop/hbase/conf/hbase.keytab hbase/yjt

# klist (查看票据)

# exprot HBASE_ROOT_LOGGER=DEBUG,console

# hbase shell

使用list列出当前存在的表,如果正常列出,说明客户端配置成功。当然也可以使用创建表的方式测试,如下:

hbase(main):002:0> create 'ns1:t2', 'f2'

注:ns1是表空间,如果不存在,可以使用create_namespace 'ns1'  创建

(4) 、客户端使用phoenix连接测试

  1. 客户端Phoenix配置(不多说),可以从集群内部拷贝。
  2. 测试phoenix,使用 ./sqlline.py yjt:2181 连接到集群。

注:上述用户都是使用hduser用户测试的,这个用户同时也是启动集群的用户,接下来创建不同的用户测试。

3.3、客户端使用不同用户测试

测试hbase shell

(1)、创建普通用户yujt

(2)、echo ‘123456’ |passwd --stdin ‘yujt’

(3)、su - yujt

(4)、配置hadoop、jdk环境变量

(5)、hbase shell  测试

测试phoenix

Ok

zookeeper、hbase集成kerberos的更多相关文章

  1. hive与hbase集成

    http://blog.csdn.net/vah101/article/details/22597341 这篇文章最初是基于介绍HIVE-705.这个功能允许Hive QL命令访问HBase表,进行读 ...

  2. 3.12-3.16 Hbase集成hive、sqoop、hue

    一.Hbase集成hive https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration 1.说明 Hive与HBase整合在一起 ...

  3. 新闻实时分析系统Hive与HBase集成进行数据分析

    (一)Hive 概述 (二)Hive在Hadoop生态圈中的位置 (三)Hive 架构设计 (四)Hive 的优点及应用场景 (五)Hive 的下载和安装部署 1.Hive 下载 Apache版本的H ...

  4. 新闻网大数据实时分析可视化系统项目——12、Hive与HBase集成进行数据分析

    (一)Hive 概述 (二)Hive在Hadoop生态圈中的位置 (三)Hive 架构设计 (四)Hive 的优点及应用场景 (五)Hive 的下载和安装部署 1.Hive 下载 Apache版本的H ...

  5. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  6. Ambari集成Kerberos报错汇总

    Ambari集成Kerberos报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看报错的配置信息步骤 1>.点击Test Kerberos Client,查看相 ...

  7. HDP安全之集成kerberos/LDAP、ranger(knox自带LDAP)

    ----------------------目录导航见左上角------------------------------- 环境 HDP 3.0.1.0 (已有) JDK   1.8.0_91 (已有 ...

  8. Hadoop学习---Zookeeper+Hbase配置学习

    软件版本号: JDK:jdk-8u45-linux-i586.tar.gz Zookeeper:zookeeper-3.4.6 Hbase:hbase-1.0.0-bin 一.JDK版本更换 由于之前 ...

  9. Hadoop及Zookeeper+HBase完全分布式集群部署

    Hadoop及HBase集群部署 一. 集群环境 系统版本 虚拟机:内存 16G CPU 双核心 系统: CentOS-7 64位 系统下载地址: http://124.202.164.6/files ...

随机推荐

  1. SpringCloud中服务发现-Eureka

    1.Eureka服务端集群开发 1.先创建一个父工程 若是不是普通demo,还有别的配置时,需要注意若是服务开不起来可能就是父类依赖中可能会需要<dependencyManagement> ...

  2. Nginx配置Yii:backend&frontend

    #My vlson.top project #frontend server { listen 80; server_name www.vlson.com; #charset koi8-r; set ...

  3. iOS学习——(转)解决iOS App打包后dSYM文件找不到的问题

    dSYM文件缺失通常有两种情况**: 情况一:配置错误导致打包时没有生成dSYM文件 针对这种情况,通常是因为Project -> Build Settings下的Debug Informati ...

  4. centos7 docker安装nginx

    1.查询nginx最新镜像 docker search nginx 2.下载镜像 docker pull nginx 3.创建目录 mkdir -p /software/nginx/html mkdi ...

  5. JAVA-JNI调用使用

    准备工作: 1.打开eclipse,新建c++项目,编写c++ jni接口如下图: 2.编译运行生成dll文件,导入到java项目,在java中创建调用使用,如下图: C文件定义: 头文件 /* DO ...

  6. 一个.Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  7. [转载]Mysql数据库千万级数据处理优化

    转载:http://blog.sina.com.cn/s/blog_6dcd17320100tm6o.html 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by ...

  8. <? extends T> 及 <? super T> 重温

    <? extends T> 及<? super T> 重温 本文针对泛型中<? extends T> 及<? super T>的主要区别及使用用途进行讨 ...

  9. 项目Beta冲刺(团队)——凡事预则立

    项目Beta冲刺(团队)--凡事预则立 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:Beta冲刺前对冲刺阶段的总体规划 ...

  10. wordpress非管理员看不到数据需有manage_options权限

    今天ytkah在调试一个新功能的时候发现wordpress非管理员看不到一些插件的数据,比如editor,添加一些用户权限还是不行,不得已直接把administrator所有的权限都添加测试一遍,最后 ...