java hdfs kerberos 认证超时 Receive timed out
背景
cdh6 集群为阿里服务器,三台机器搭建而成,并且开启了 kerberos,现在想尝试一下用 java api 读取 hdfs 数据。
代码如下:
public class ReadHdfsOnKerberos {public static void main(String[] args) throws IOException {String krbConfigPath = "D:\\Code\\kk-architecture-bigdata-practice\\Hadoop-Practice\\src\\main\\resources\\";System.setProperty("java.security.krb5.conf", krbConfigPath + "krb5.conf");Configuration conf = new Configuration();conf.set("hadoop.security.authentication", "Kerberos");conf.set("java.security.krb5.conf", krbConfigPath + "krb5.conf");UserGroupInformation.setConfiguration(conf);System.out.println("开始登录 kerberos");UserGroupInformation.loginUserFromKeytab("hdfs/admin@KKARCH.COM", krbConfigPath + "root.keytab");System.out.println("登录结束");String file = "hdfs://ip1:8020";FileSystem fs = FileSystem.get(URI.create(file), conf);System.out.println(fs.exists(new Path("/")));}
}
报错如下:
[2021-11-28 00:30:43 上午]:DEBUG org.apache.hadoop.security.UserGroupInformation$HadoopLoginModule.login(UserGroupInformation.java:222)hadoop login
Exception in thread "main" java.io.IOException: Login failure for hdfs/admin@KKARCH.COM from keytab D:\Code\kk-architecture-bigdata-practice\Hadoop-Practice\src\main\resources\root.keytab: javax.security.auth.login.LoginException: Receive timed outat org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:983)at com.kkarch.hadoop.rpc.kerberos.ReadHdfsOnKerberos.main(ReadHdfsOnKerberos.java:29)
Caused by: javax.security.auth.login.LoginException: Receive timed outat com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:808)at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)at javax.security.auth.login.LoginContext.login(LoginContext.java:587)at org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:974)... 1 more
Caused by: java.net.SocketTimeoutException: Receive timed outat java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)at java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:124)at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143)at java.net.DatagramSocket.receive(DatagramSocket.java:812)at sun.security.krb5.internal.UDPClient.receive(NetClient.java:206)at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:411)at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:364)at java.security.AccessController.doPrivileged(Native Method)at sun.security.krb5.KdcComm.send(KdcComm.java:348)at sun.security.krb5.KdcComm.sendIfPossible(KdcComm.java:253)at sun.security.krb5.KdcComm.send(KdcComm.java:229)at sun.security.krb5.KdcComm.send(KdcComm.java:200)at sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:316)at sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:361)at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:776)... 14 moreProcess finished with exit code 1
真是百思不得其解,初步怀疑是阿里云的端口没开。
kerberos 用了两个端口,一个是 88 ,kdc 在用;另一个是 749 , kadmin 在用,但是都开了:
打开 cmd ,telnet 88 和 749 端口,都是可以通的,但是报错始终提示,接收数据异常。
我一想,是不是出的方向我没配啊。但是它提示我,出方向始终是放行的
于是继续去服务器上看日志:
/var/log/krb5kdc.log
/var/log/kadmind.log
都没有新增的日志。
一筹莫展…陷入了僵局…
继续看本地的日志,突然发现,咦,这个 UDPClient,好像是在接收 udp 的请求,说明发出去的也是一个 udp 请求!
然而,阿里云的安全配置是区分 tcp 和 udp 的,我配的是一个 tcp 的策略。
于是赶紧改成了 udp
然后就特么可以了,搞了好久!!!
最后把 749 端口去掉,发现也是可以的,说明客户端认证只请求了 kdc 就可以完成认证了。
java hdfs kerberos 认证超时 Receive timed out相关推荐
- java通过kerberos认证连接hdfs并写数
通过查阅,得知UserGroupInformation这个类JAAS 框架上封装了Hadoop的用户信息 有两种方法:loginUserFromKeytab:调用checkTGTAndReloginF ...
- 通过java api操作hdfs(kerberos认证)
参考代码如下 import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs ...
- python调用hive与java调用区别_python3.6.5基于kerberos认证的hive和hdfs连接调用方式
1. Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证.具体请查阅官网 2. 需要安装的包(基于centos) yum install libsasl2 ...
- hadoop java client_hadoop3 Java client客户端kerberos认证
hadoop集群升级hadoop3,并需要Kerberos认证,hadoop3代码包做了合并,引用jar包如下: org.apache.hadoop hadoop-hdfs 3.1.1 org.apa ...
- Java代码使用Spark on Yarn 方式提交任务到带Kerberos认证的Hadoop集群
2019独角兽企业重金招聘Python工程师标准>>> 项目中遇到Spark Yarn方式提交到Hadoop集群,访问集群HDFS时发现使用的当前用户,没有访问权限,经过排查后发现H ...
- HDFS配置Kerberos认证
为什么80%的码农都做不了架构师?>>> 本文主要记录 CDH Hadoop 集群上配置 HDFS 集成 Kerberos 的过程,包括 Kerberos 的安装和 Hadoo ...
- hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期限后异常
hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期限后异常 参考文章: (1)hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期 ...
- Java API连接Kerberos认证的HBASE
网上关于 Java 代码连接启用了Kerberos认证的HBASE资料很多,但是总感觉不够准确,总是出现各种问题.经过整合网上资料和亲自试验,得出连接成功的最小配置项如下: java.security ...
- 关于星环TDH产品的Java通过Kerberos安全认证连接hyperbase
博主是Java实习生最近在做关于星环大数据方面的工作,碰到一些问题,费了很大的劲才搞通,记录一下,希望可以帮到大家. Kerberos 术语 Kerberos 中有以下一些概念需要了解: 1)KDC( ...
最新文章
- html目录怎么搞出来,webpack怎么把html搬到输出目录里?
- 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别
- 转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
- ZH奶酪:Python按行读取文件
- sqlite 二进制字段 (zz)
- 坚持,这两个字非常重要!
- springboot 拦截器的坑 WebMvcConfigurationSupport 失效
- ipconfig命令指南
- php 5.4 安装xcache,安装xcache为你的PHP加速
- 数据结构 3-0 栈与队列总结
- 基于matlab的FFT滤波,可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除
- 【Android】常用对话框大全(一)Android Dialog
- 3t中文 studio_studio 3t免费版
- PS笔记:调色之通道混合器
- go 服务器压力测试,Go的单元测试与压力测试
- js的onfocus与onblur的用法
- 高中物理应用计算机教学心得,高中物理教学心得
- CAN总线CSV格式报文转ASC格式报文
- Python - yamail - 进阶之路 - Day08
- nodejs学习笔记--Unexpected end of JSON input while parsing near ‘...“解决方法
热门文章
- 安卓开发投屏反控实现方式
- QT 无法定位程序输入点
- ubuntu下发射wifi热点
- sql事务的定义以及使用
- element菜单组件样式修改NavMenu导航菜单
- python100day - 07day-集合、字符串和字符
- 【愚公系列】用友系列之YonBuilder低代码平台概论和基本使用
- c语言 复制文件并重命名文件,VS2010 重命名文件:源文件名和目标文件名相同 的解决方案...
- Redis 持久化 v1.0 文章作者:哇塞大嘴好帥(哇塞大嘴好帅)
- vue/react前端面试题整理——HTTP/HTTPS