背景

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相关推荐

  1. java通过kerberos认证连接hdfs并写数

    通过查阅,得知UserGroupInformation这个类JAAS 框架上封装了Hadoop的用户信息 有两种方法:loginUserFromKeytab:调用checkTGTAndReloginF ...

  2. 通过java api操作hdfs(kerberos认证)

    参考代码如下 import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs ...

  3. python调用hive与java调用区别_python3.6.5基于kerberos认证的hive和hdfs连接调用方式

    1. Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证.具体请查阅官网 2. 需要安装的包(基于centos) yum install libsasl2 ...

  4. hadoop java client_hadoop3 Java client客户端kerberos认证

    hadoop集群升级hadoop3,并需要Kerberos认证,hadoop3代码包做了合并,引用jar包如下: org.apache.hadoop hadoop-hdfs 3.1.1 org.apa ...

  5. Java代码使用Spark on Yarn 方式提交任务到带Kerberos认证的Hadoop集群

    2019独角兽企业重金招聘Python工程师标准>>> 项目中遇到Spark Yarn方式提交到Hadoop集群,访问集群HDFS时发现使用的当前用户,没有访问权限,经过排查后发现H ...

  6. HDFS配置Kerberos认证

    为什么80%的码农都做不了架构师?>>>    本文主要记录 CDH Hadoop 集群上配置 HDFS 集成 Kerberos 的过程,包括 Kerberos 的安装和 Hadoo ...

  7. hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期限后异常

    hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期限后异常 参考文章: (1)hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期 ...

  8. Java API连接Kerberos认证的HBASE

    网上关于 Java 代码连接启用了Kerberos认证的HBASE资料很多,但是总感觉不够准确,总是出现各种问题.经过整合网上资料和亲自试验,得出连接成功的最小配置项如下: java.security ...

  9. 关于星环TDH产品的Java通过Kerberos安全认证连接hyperbase

    博主是Java实习生最近在做关于星环大数据方面的工作,碰到一些问题,费了很大的劲才搞通,记录一下,希望可以帮到大家. Kerberos 术语 Kerberos 中有以下一些概念需要了解: 1)KDC( ...

最新文章

  1. html目录怎么搞出来,webpack怎么把html搬到输出目录里?
  2. 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别
  3. 转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
  4. ZH奶酪:Python按行读取文件
  5. sqlite 二进制字段 (zz)
  6. 坚持,这两个字非常重要!
  7. springboot 拦截器的坑 WebMvcConfigurationSupport 失效
  8. ipconfig命令指南
  9. php 5.4 安装xcache,安装xcache为你的PHP加速
  10. 数据结构 3-0 栈与队列总结
  11. 基于matlab的FFT滤波,可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除
  12. 【Android】常用对话框大全(一)Android Dialog
  13. 3t中文 studio_studio 3t免费版
  14. PS笔记:调色之通道混合器
  15. go 服务器压力测试,Go的单元测试与压力测试
  16. js的onfocus与onblur的用法
  17. 高中物理应用计算机教学心得,高中物理教学心得
  18. CAN总线CSV格式报文转ASC格式报文
  19. Python - yamail - 进阶之路 - Day08
  20. nodejs学习笔记--Unexpected end of JSON input while parsing near ‘...“解决方法

热门文章

  1. 安卓开发投屏反控实现方式
  2. QT 无法定位程序输入点
  3. ubuntu下发射wifi热点
  4. sql事务的定义以及使用
  5. element菜单组件样式修改NavMenu导航菜单
  6. python100day - 07day-集合、字符串和字符
  7. 【愚公系列】用友系列之YonBuilder低代码平台概论和基本使用
  8. c语言 复制文件并重命名文件,VS2010 重命名文件:源文件名和目标文件名相同 的解决方案...
  9. Redis 持久化 v1.0 文章作者:哇塞大嘴好帥(哇塞大嘴好帅)
  10. vue/react前端面试题整理——HTTP/HTTPS