如何在 HBase 中续订过期的 Kerberos 票证?

2024-03-30

我有一个小型 spring 服务,它提供基本功能,例如从 hbase 表中放入/删除/获取。一切似乎都正常,但有一个问题。启动 Tomcat 服务器 10 小时后,我的 kerberos 票证过期,因此我应该更新它。我尝试对 hbase 使用 java api,并在连接到 hbase 的每个方法的代码中添加了这一行:

UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();

我也尝试过:

UserGroupInformation.getLoginUser().reloginFromKeytab()

and:

SecurityUtil.login(configuration, keytabFilePath, kerberosUser)

但这没有帮助,我在服务器重新启动后 10 小时收到此异常:

javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(Unknown Source)
at org.apache.hadoop.hbase.security.HBaseSaslRpcClient.saslConnect(HBaseSaslRpcClient.java:179)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.setupSaslConnection(RpcClientImpl.java:617)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.access$700(RpcClientImpl.java:162)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection$2.run(RpcClientImpl.java:743)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection$2.run(RpcClientImpl.java:740)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.setupIOstreams(RpcClientImpl.java:740)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.writeRequest(RpcClientImpl.java:906)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.tracedWriteRequest(RpcClientImpl.java:873)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1241)
at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:227)
at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:336)
at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.multi(ClientProtos.java:34142)
at org.apache.hadoop.hbase.client.MultiServerCallable.call(MultiServerCallable.java:128)
at org.apache.hadoop.hbase.client.MultiServerCallable.call(MultiServerCallable.java:53)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
at org.apache.hadoop.hbase.client.AsyncProcess$AsyncRequestFutureImpl$SingleServerRequestRunnable.run(AsyncProcess.java:733)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我还在日志中发现了这几行:

2017-01-03 19:09:16 DEBUG UserGroupInformation:1638 - PrivilegedAction as:[email protected] /cdn-cgi/l/email-protection (auth:KERBEROS) from:org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.setupIOstreams(RpcClientImpl.java:740)
2017-01-03 19:09:16 DEBUG UserGroupInformation:1618 - PrivilegedActionException as:[email protected] /cdn-cgi/l/email-protection (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
2017-01-03 19:09:16 DEBUG UserGroupInformation:1638 - PrivilegedAction as:[email protected] /cdn-cgi/l/email-protection (auth:KERBEROS) from:org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.handleSaslConnectionFailure(RpcClientImpl.java:643)
2017-01-03 19:09:16 WARN  UserGroupInformation:1113 - Not attempting to re-login since the last re-login was attempted less than 600 seconds before.

有什么点击或提示我做错了什么吗?

编辑: 我使用此代码通过 kerberos 进行身份验证:

Configuration configuration = HBaseConfiguration.create();
configuration.addResource("some config file");
UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(kerberosUser, keytabFilePath);

我在项目中将 hadoop 依赖项的版本更改为 2.6.5。


最终的解决方案似乎有效: 1.将Hadoop依赖项升级到2.6.5版本(hadoop-auth、hadoop-mapreduce-client-core、hadoop-common)。 2. 创建简单的调度程序,每 5-6 分钟执行一次下面的代码。 3. 在对 HBase 数据库执行每个操作之前执行以下代码。

UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 HBase 中续订过期的 Kerberos 票证? 的相关文章

随机推荐

  • 如何从大气噪声中获得随机数?

    我最近讨论了寻找一种生成真正随机数的方法 讨论最终讨论了使用大气噪声 有人这样做过吗 这个过程涉及什么 有人创建了一个返回从噪声中获得的随机数的网络服务吗 整个网站基于使用大气噪声生成的 真正随机 数字 他们有一个 API 如果您愿意 您可
  • 如何在 Python 中进行按位非运算?

    为了测试使用更基本的构建块 在我的例子中使用 Nand Or 和 And 构建 Xor 操作 我需要能够执行 Not 操作 内置的not似乎只用单个位来做到这一点 如果我做 x 0b1100 x not x 我应该得到0b0011但我只是得
  • sql查询获取已删除的记录

    你有一张桌子table1其中包含id列 即int 11 not null auto increment并从 1 开始 假设您有 10 000 条记录 可以看出最后一条记录的id是10000 一旦删除了 3 条记录 表中就有 9 997 条记
  • HttpWebRequest 的 URL 被特殊字符截断

    我需要调用的 Web 服务的 URL 包含一个包含自由格式文本的参数 我不知道为什么它是这样设计的 因为它是使用 POST 发送的 并且包含许多字段作为 POST 的一部分 但是 这给我带来了一个问题 对于井号和 等某些字符 URL 在遇到
  • 如何在ireport中为堆积条形图中的条形设置不同的颜色?

    我需要为堆积条形图中的每个条形设置唯一的颜色 无论我在一个条中看到什么颜色 它都不应该在任何其他条或任何其他堆栈中重复 例如 我的报告中有 5 个栏 每个栏有 3 个不同的堆栈 我想将红色相关颜色应用于第一个条形及其堆栈 第二条应该有蓝色相
  • JTextField - setColumns() 方法对我不起作用

    我的问题是我的 JTextField setColumns int field1 setColumns 5 不起作用 我猜这是布局管理器的问题 不过 我正在从练习册上学习 我所知道的唯一布局是 flowLayout borderLayout
  • JQuery同步动画

    在很多情况下我希望动画能够同步执行 特别是当我想制作一系列连续的动画时 有没有一种简单的方法来制作 jQueryanimate函数调用同步 我想到的唯一方法是在动画完成时将标志设置为 true 并等待该标志 jQuery 无法制作同步动画
  • response.sendRedirect() 和 request.getRequestDispatcher().forward(request,response) 有什么区别[重复]

    这个问题在这里已经有答案了 我使用JAVA时出现页面跳转的问题 如果我使用 response sendRedirect login jsp 然后我得到这个网址 http localhost 8080 login jsp 但如果我使用 req
  • Android:寻找不同的 TimePicker 样式

    大家好 一个简短的问题 我一直在寻找这种风格的 TimePicker 但到目前为止没有结果 如图所示 机器人绘图 http www droiddraw org widgetguide html 我开始怀疑这种风格的存在 P 任何知道如何获得
  • 在 Helm 值属性中传递数组

    我想将数组作为 Helm 中 yaml 值文件 中的属性传递 我尝试过的 Attempt elasticsearch uri 127 0 0 1 9200 127 0 0 2 9200 Error ReadString 期望 或n 但发现
  • 阻止设计者调用 getter(VS 2008,WinForms)

    我有一个简单的用户控件 其中包含一个最初为空的组合框 该 CB 的 setter 向其添加项目 而 getter 返回选定的项目 当将此 UC 添加到 Form 时 设计者会自动调用空 CB 的 getter 稍后会调用用项目填充 CB 的
  • 获取下周一的日期

    如何在 JavaScript 中获取下周一 我在互联网上找不到任何相关内容 我也尝试了很多代码并对此有所了解 但我无法真正做到这一点 这是我的代码 var d new Date var day d getDay d new Date d s
  • 访问 PHP 中的活动会话

    如何获取服务器上所有活动 PHP 会话的列表并从一个用户的实例中访问它们 激励案例是显示网站上所有当前活动用户的列表 其中用户名存储在每个用户的 PHP 会话中 注意 我知道我可以通过数据库 甚至文件系统 创建自己的状态 但我正在寻找一种利
  • Elasticsearch - 合并多个文档中的字段

    假设我有一堆这样的文档 foo 1 2 3 foo 3 4 5 对于针对这些文档运行的查询 我正在寻找一种方法来返回所有值的数组foo 最好是唯一的值 但重复也可以 foo 1 2 3 3 4 5 我研究了聚合 API 但我不知道如何实现这
  • 缩略图点击后消失,FancyBox

    我创建了 FancyBox 画廊 但现在 当我单击缩略图时 它会按计划显示图像库 但在后台我可以看到所有缩略图都一一消失 F5 或页面重新加载后 所有缩略图都会恢复 My code a class fancybox title a a cl
  • Visual Studio 2015 预览版中的 Windows Phone 8.0 应用程序打包

    我通过我的学生 Dreamspark 帐户安装了 Visual Studio 2015 Ultimate Preview 我将其安装在更新的 Windows 8 1 之上 工作站 我有 Windows Phone 8 0 应用程序 需要将其
  • 如何冻结所有可冻结的 WPF 对象?

    我想冻结窗口中的所有可冻结对象 以获得更好的性能 为此 我使用了几个像这样的循环 foreach Brush item in FindLogicalChildren
  • 如何绘制方向箭头

    我有很多方向和角度的线条 我使用它们来绘制它们UIBezierpath 我需要在线的一端画一个箭头 动态地取决于给定点 Edit Edit 2 杰克的回答是我的代码 let y2 line point2Y let path UIBezier
  • 将自然数转换为特定基数并将其作为列表返回

    我想将函数的结果显示为列表而不是数字 我的结果是 define lst list define num gt base n b if zero n append lst list 0 append lst list 10 num gt ba
  • 如何在 HBase 中续订过期的 Kerberos 票证?

    我有一个小型 spring 服务 它提供基本功能 例如从 hbase 表中放入 删除 获取 一切似乎都正常 但有一个问题 启动 Tomcat 服务器 10 小时后 我的 kerberos 票证过期 因此我应该更新它 我尝试对 hbase 使