[Kerberos] Java client访问kerberos-secured cluster
使用java client访问kerberos-secured cluster,最重要的是先从admin那里拿到可用的keytab文件,用来作认证。接下来就是调整连接的配置。以下先用连接hdfs为例进行说明。
申请可用的keytab文件
1. 申请可认证的keytab文件,keytab文件用来存储principal的key。由KDC那边生成的principal,最终可以存储在keytab文件中。
2. 安装Kerberos client常用命令,并熟悉kerberos认证原理。
3. 配置/etc/krc5.conf,作为kerberos client端需要指明KDC的位置。
配置连接参数
由于直接用java应用程序去测试链接不太方便,这里推荐通过执行Hadoop command来测试是否能连接成功。
1. kinit 认证
kinit -kt path-to-keytab principalName
先认证principalName是否合法。如果合法,KDC会返回initial TGT。该TGT有效期通常是几个小时。
2. 执行Hadoop命令
hadoop fs -ls hdfs://namenode1:8020
执行这个命令之后,会返回儿各种exception,按照exception的提示,逐步添加配置,如下:
1) 配置使用kerberos认证
hadoop.security.authentication: kerberos
2)Failed to specify server's Kerberos principal name
dfs.namenode.kerberos.principal
3)Server has invalid Kerberos principal
配置完2)后,如果返回 Server has invalid Kerberos principal,这个时候可以从以下三个方面考虑:
- Server principal是否合法或者配置正确,正常情况下将dfs.namenode.kerberos.principal设置成namenode configuration一致就可以了。
- DSN resolver是否一致。The HDFS client will initiate an RPC call to the namenode to get the hdfs service principal. Then the client with compare the hostname from the service princpal to the canonical name of the namenode hostname. In this case the namenode canonical name on the client machine resolved to a different hostname then what was in DNS.
- 如果以上两种情况都正常,exception无法帮助我们锁定问题,可用尝试排除最大限度排除不定因素,缩小问题搜索范围。比如安装和server一样的Hadoop版本,并且保持配置一致。如果command能执行成功,那么可用逐步减去lib, conf属性,从而锁定exception的本质原因。
Java Kerberos认证代码
public class HadoopSecurityUtil { public static final String EAGLE_KEYTAB_FILE_KEY = "eagle.keytab.file";
public static final String EAGLE_USER_NAME_KEY = "eagle.kerberos.principal"; public static void login(Configuration kConfig) throws IOException {
if (kConfig.get(EAGLE_KEYTAB_FILE_KEY) == null || kConfig.get(EAGLE_USER_NAME_KEY) == null) return; kConfig.setBoolean("hadoop.security.authorization", true);
kConfig.set("hadoop.security.authentication", "kerberos");
UserGroupInformation.setConfiguration(kConfig);
UserGroupInformation.loginUserFromKeytab(kConfig.get(EAGLE_USER_NAME_KEY), kConfig.get(EAGLE_KEYTAB_FILE_KEY));
}
}
配置示例
- HDFS
{
"fs.defaultFS":"hdfs://nameservice1",
"dfs.nameservices": "nameservice1",
"dfs.ha.namenodes.nameservice1":"namenode1,namenode2",
"dfs.namenode.rpc-address.nameservice1.namenode1": "hadoopnamenode01:8020",
"dfs.namenode.rpc-address.nameservice1.namenode2": "hadoopnamenode02:8020",
"dfs.client.failover.proxy.provider.apollo-phx-nn-ha": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
"eagle.keytab.file":"/EAGLE-HOME/.keytab/b_eagle.keytab_apd",
"eagle.kerberos.principal":"eagle@EXAMPLE.COM"
}
- HBase
{
"hbase.zookeeper.property.clientPort":"",
"hbase.zookeeper.quorum":"localhost",
"hbase.security.authentication":"kerberos",
"hbase.master.kerberos.principal":"hadoop/_HOST@EXAMPLE.COM",
"zookeeper.znode.parent":"/hbase",
"eagle.keytab.file":"/EAGLE-HOME/.keytab/eagle.keytab",
"eagle.kerberos.principal":"eagle@EXAMPLE.COM"
}
References
- https://github.com/randomtask1155/HadoopDNSVerifier
- https://support.pivotal.io/hc/en-us/articles/204391288-hdfs-ls-command-fails-with-Server-has-invalid-Kerberos-principal
[Kerberos] Java client访问kerberos-secured cluster的更多相关文章
- Java client 访问 memcached
在测试项目中引入了memcached作为缓存层,以下是memcached的缓存配置和调用过程. linux下memcached安装过程 直接参考以前的博文linux下安装memcached过程 不再 ...
- Hbase之Java API远程访问Kerberos认证
HbaseConnKer.java package BigData.conn; import BigData.utils.resource.ResourcesUtils; import org.apa ...
- JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32
Java使用API访问Hbase报错: 我的hbase主节点是spark1 java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名 修改主机hosts文 ...
- 【Tech】CAS多机部署Server和Java Client端
昨天尝试把cas的java client端部署到另外一台机器,结果就有问题了.(localhost部署cas server和java client端参见:http://www.cnblogs.com/ ...
- elasticsearch Java Client用户指南
这里使用的Java客户端版本是5.1.2,Elasticsearch的版本号也要是5.1.2,否则一些功能可能不支持. 之前介绍过Spring Data Elasticsearch,那里也是使用了本文 ...
- 使用poco 的NetSSL_OpenSSL 搭建https 服务端,使用C++客户端,java 客户端访问,python访问(python还没找到带证书访问的代码.)
V20161028 由于项目原因,需要用到https去做一些事情. 这儿做了一些相应的研究. 这个https 用起来也是折腾人,还是研究了一周多+之前的一些积累. 目录 1,java client 通 ...
- Java ssh 访问windows/Linux
Java ssh 访问windows/Linux 工作中遇到的问题: Java code运行在一台机器上,需要远程到linux的机器同时执行多种命令.原来采用的方法是直接调用ssh命令或者调用pli ...
- 5 weekend01、02、03、04、05、06、07的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点
weekend01.02.03.04.05.06.07的分布式集群的HA测试 1) weekend01.02的hdfs的HA测试 2) weekend03.04的yarn的HA测试 1) wee ...
- elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...
随机推荐
- nginx 日志相关配置总结
设置位于nginx.conf: log_format main '$server_name $remote_addr - $remote_user [$time_local] &q ...
- WPF Tranform-Flip Image
Use a ScaleTransform with a ScaleX of -1 for horizontal and ScaleY of -1 for vertical flipping, appl ...
- OpenStack 企业私有云的若干需求(10):OpenStack 的前景和钱景
本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...
- Counting Bits -leetcode
introduction: Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num ...
- UINavigationController的创建和相关设置---学习笔记四
导航控制器 一.设置字体大小,背景等. 二.自定义返回按钮. 三.设置手势. 一.导航中也有个appearance属性,通过它可以设置所有导航的颜色. 二.自定义返回按钮. 1.首先需要知道的是,要把 ...
- Autofac手动注入及自动注入示例
参考:http://www.cnblogs.com/xinchuang/archive/2013/05/07/3065433.html#2911661 一.环境 vs2012.mvc4..Net Fr ...
- 51Nod--1015 水仙花数
51Nod: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1015 1015 水仙花数 基准时间限制:1 秒 空间 ...
- C#时间戳转时间-时间转时间戳
/// <summary> /// 时间戳转为C#格式时间 /// </summary> /// <param name=”timeStamp”></para ...
- SharePoint远程发布Solution
1.在本地修改好代码,选择publish,将.wsp文件保存到本地: 2.将wsp文件上传到目标网站,停止原解决方案并删除,上传新解决方法并且激活: 停止原来的解决方案 上传解决方案 3.激活Solu ...
- [转]Hibernate延迟加载与opensessioninviewFilter
原文地址:http://blog.csdn.net/a19881029/article/details/7916702 hibernate延迟加载: 一个person对应多个school,使用hibe ...