开发者社区 问答 正文

flink on yarn 入Hbase时有Kerberos限制无法写入,应有的配置都有,本地能写入

Flink On Yarn 这是集群A,没有Kerberos;想写入到集群B的Hbase中,但是这个是有Kerberos的;本地跑可以写入集群B的Hbase,但是由A集群写入B就写入不成功。

A集群是否需要安装Kerberos,与B集群的Kerberos进行互信呢?如果不需要安装,如何解决呢?

展开
收起
1043050690816634 2019-10-18 16:55:05 1141 分享 版权
阿里云 AI 助理回答

为了解决Flink on Yarn集群A无需直接安装Kerberos但仍需向启用了Kerberos的HBase集群B写入数据的问题,您可以通过以下步骤配置和操作:

概述

  • 问题背景:您的场景涉及两个集群,其中Flink运行在未启用Kerberos的安全模式下的Yarn集群A中,而目标HBase集群B则要求Kerberos认证。本地开发环境能够成功写入HBase集群B,说明客户端配置正确,但通过集群A执行时遇到权限问题。
  • 解决思路:虽然集群A不需要全面部署Kerberos,但需要确保Flink作业在提交和执行时能够携带正确的Kerberos凭证(如keytab文件)以及配置(krb5.conf),以实现与集群B的Kerberos安全环境兼容。

详细步骤

  1. 上传Kerberos配置文件至集群A

    • 登录Flink控制台。
    • 导航至文件管理区域,上传krb5.conf和针对HBase服务的keytab文件(例如,属于具有HBase访问权限的用户)。
    • 记录上传后资源的路径,如/flink/usrlib/krb5.conf/flink/usrlib/hbase.keytab
  2. 配置Flink作业以使用Kerberos认证

    • 对于DataStream或SQL作业,需在作业配置中指定Kafka或HBase连接器的Kerberos相关参数。
    • 设置sasl.jaas.config指向上传的keytab文件路径,并正确设置principal名称(格式如user@YOUR_REALM.COM)。
    • 配置sasl.kerberos.service.name为HBase服务名(通常为hbase而非kafka)。
    • 在作业提交时,通过JVM参数-Djava.security.krb5.conf=/flink/usrlib/krb5.conf指定Kerberos配置文件路径。
  3. 确保跨域信任(如果适用)

    • 如果集群A和B位于不同的Kerberos领域且需要互信,需在双方的KDC上添加跨域认证Principal,如同文档中跨域互信部分所述。这一步可能需要管理员权限并进行细致的规划。

注意事项

  • Keytab权限:确保Flink作业运行用户对上传的keytab文件有读取权限。
  • 时间同步:所有涉及的服务器应保持时间同步,以免因时间偏差导致Kerberos认证失败。
  • Realm一致性:配置中的realm名称必须与HBase集群的Kerberos realm严格匹配。
  • 无须全局安装Kerberos:仅需在作业层面配置Kerberos认证信息,集群A整体无需安装Kerberos。

总结

Flink集群A本身不需要安装Kerberos,关键在于作业配置中正确集成Kerberos认证信息,包括上传必要的Kerberos配置文件和keytab文件到Flink作业可访问的位置,并在作业提交时通过配置指定这些文件的路径及相应的Kerberos参数。如有跨域需求,则还需完成跨域互信配置。这样,即便集群A未启用Kerberos,也能成功地向受Kerberos保护的HBase集群B写入数据。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答