hive catalog认证失败

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】
sr正常使用,在sr中创建hive catalog

CREATE EXTERNAL CATALOG hive_catalog
PROPERTIES(
“type” = “hive”,
“hive.metastore.uris” = “thrift://cdp02.:9083”,
“hadoop.security.authentication” = “kerberos”,
“hadoop.kerberos.keytab” = “/home/bsmp/portal/.keytab/hive.keytab”,
“hadoop.kerberos.principal” = “hive/admin@AOTAIN.COM”
);

【背景】在fe和be中添加了core-site.xml、hdfs-site.xml、hive-site.xml、krb5.conf 在fe/conf/fe.conf 文件中添加了export HADOOP_USER_NAME = hive
【业务影响】
【StarRocks版本】3.1.11
【机器信息】
【联系方式】电话号码:z13672289825@163.com
【附件】
报错信息:查询所有的表报这个
mysql> select * from test_with_gzip_compression limit 1;
ERROR 1064 (HY000): hdfsOpenFile failed, file=hdfs://nameservice1/user/hive/warehouse/starrocks_test20260119_db.db/test_with_gzip_compression/000000_0. err_msg: error=Error(255): Unknown error 255, root_cause=GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt): file = hdfs://nameservice1/user/hive/warehouse/starrocks_test20260119_db.db/test_with_gzip_compression/000000_0
mysql>

错误信息核心:

ERROR 1064 (HY000): hdfsOpenFile failed, file=hdfs://nameservice1/.../000000_0. err_msg: error=Error(255): Unknown error 255, root_cause=GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt): file = hdfs://nameservice1/.../000000_0

GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt) 表明 StarRocks 尝试访问 HDFS 时,Kerberos 认证失败,没有找到有效的 Kerberos Ticket Granting Ticket (TGT)。

问题分析与排查步骤:

您已经采取了一些正确的 Kerberos 配置步骤,但 HDFS 访问仍然失败,这通常意味着 Kerberos 认证信息没有正确地传递或加载到 BE 节点(因为 HDFS 访问是在 BE 节点进行的)。

1. 确认 Kerberos 配置文件和权限

虽然您提到了在 FE 和 BE 中添加了配置文件,但需要仔细核对以下几点:

  • krb5.conf 确保 krb5.conf 文件在 所有 BE 节点 上的路径是正确的,并且 StarRocks 进程可以读取。通常建议放在 /etc/krb5.conf 或 BE 进程能访问的路径。
  • Hadoop 配置文件: 确保 core-site.xmlhdfs-site.xml所有 BE 节点 上配置正确,特别是 HDFS 相关的 Kerberos 配置(如 hadoop.security.authentication=kerberos , dfs.namenode.kerberos.principal , dfs.datanode.kerberos.principal 等)。
  • Keytab 文件: 确认 /home/bsmp/portal/.keytab/hive.keytab 文件在 所有 BE 节点 上都存在,并且 StarRocks BE 进程拥有 读权限 。由于这个路径看起来是用户目录下的路径,权限问题非常常见。

2. Catalog 属性中的 Kerberos 配置

您在 CREATE EXTERNAL CATALOG 语句中配置了 Kerberos 认证,这是正确的:

PROPERTIES(
    “type” = “hive”,
    “hive.metastore.uris” = “thrift://cdp02.:9083”,
    “hadoop.security.authentication” = “kerberos”,
    “hadoop.kerberos.keytab” = “/home/bsmp/portal/.keytab/hive.keytab”,
    “hadoop.kerberos.principal” = “hive/admin@AOTAIN.COM”
);

关键点: StarRocks 默认使用 Catalog 属性中提供的 keytabprincipal 去进行 Kerberos 登录( kinit )来访问 HDFS。

3. HADOOP_USER_NAME 环境变量 (FE/BE)

您在 fe/conf/fe.conf 中添加了 export HADOOP_USER_NAME = hive

  • FE 节点: HADOOP_USER_NAME 环境变量主要用于 FE 节点在访问 HDFS 时(例如加载数据或某些元数据操作)模拟用户。对于 Kerberos 认证,这个变量通常不是主要因素,主要的认证依赖于 Catalog 中配置的 keytabprincipal
  • BE 节点: BE 节点 才是实际执行查询和访问 HDFS 文件的进程。您需要确保 BE 节点 也能正确处理 Kerberos 认证。

4. 针对 3.1.11 版本的 Kerberos 访问 HDFS 检查

在 StarRocks 中,HDFS 的访问是在 BE 进程中完成的。如果 Kerberos 认证失败,通常需要在 BE 侧进行排查。

建议的排查步骤:

A. 验证 Keytab 和 Principal

任一 BE 节点 上,使用 Catalog 中配置的 Keytab 和 Principal 尝试手动登录,验证 Keytab 是否有效:

# 替换为您的实际路径和 Principal
kinit -kt /home/bsmp/portal/.keytab/hive.keytab "hive/admin@AOTAIN.COM"
# 检查是否成功获取 TGT
klist

如果 kinit 失败,说明 Keytab 文件或 Principal 名称有误,或者 Principal 不匹配 Keytab 中的加密密钥。

B. 检查 BE 日志

检查 BE 节点的 be.INFObe.WARNING 日志,搜索相关的 Kerberos 错误信息。BE 在尝试连接 HDFS 时,会记录认证失败的详细信息。

C. 确保 BE 进程能读取 Keytab

将 Keytab 文件放置在一个所有 BE 节点都能访问且 BE 进程有读取权限的路径下,例如 /opt/starrocks/keytabs/hive.keytab ,然后更新 Catalog:

ALTER EXTERNAL CATALOG hive_catalog
SET PROPERTIES (
    "hadoop.kerberos.keytab" = "/opt/starrocks/keytabs/hive.keytab"
);

D. 检查 NameNode Principal (如果适用)

如果 HDFS 启用了 Kerberos, hdfs-site.xml 中通常需要配置 NameNode 的 Kerberos Principal。虽然 StarRocks 会尝试使用 Catalog 中配置的 principal 去访问 HDFS,但有时也需要确保 BE 能够解析到正确的 NameNode Principal。

hdfs-site.xml 中,检查以下配置是否正确:

<property>
    <name>dfs.namenode.kerberos.principal.pattern</name>
    <value>...</value>
</property>

总结:

您遇到的问题是典型的 Kerberos 认证失败。由于 HDFS 访问发生在 BE 节点,请将排查重点放在 所有 BE 节点 上的 Kerberos 配置文件、Keytab 文件的路径和权限。最常见的原因是 BE 节点无法访问或读取 Keytab 文件 ,或者 Keytab 文件本身与 Principal 不匹配

1. 确认 Kerberos 配置文件和权限

  • krb5.conf
    [root@work2 ~]# ll /etc/krb5.conf
    -rwxrwxr-x 1 root root 1523 Nov 26 2024 /etc/krb5.conf
    [root@work2 ~]#
  • Hadoop文件
    这个是直接使用了cdp集群的。但是这个集群没有安装ranger服务。
  • Kerberos文件:
    [root@master ~]# for i in {60…67}; do echo “=== 主机: 10.200.8.$i ===”; ssh 10.200.8.${i} ls -l /home/bsmp/portal/.keytab/hive.keytab; done
    === 主机: 10.200.8.60 ===
    -rwxr-x— 1 root root 538 Jan 19 15:35 /home/bsmp/portal/.keytab/hive.keytab
    === 主机: 10.200.8.61 ===
    ls: cannot access /home/bsmp/portal/.keytab/hive.keytab: No such file or directory
    === 主机: 10.200.8.62 ===
    -rwxrwxrwx 1 root root 538 Dec 23 2024 /home/bsmp/portal/.keytab/hive.keytab
    === 主机: 10.200.8.63 ===
    -rwxrwxrwx 1 root root 538 Oct 11 2024 /home/bsmp/portal/.keytab/hive.keytab
    === 主机: 10.200.8.64 ===
    -rwxr-x— 1 root root 538 Dec 23 2024 /home/bsmp/portal/.keytab/hive.keytab
    === 主机: 10.200.8.65 ===
    -rwxr-x— 1 root root 538 Dec 23 2024 /home/bsmp/portal/.keytab/hive.keytab
    === 主机: 10.200.8.66 ===
    -rwxr-x— 1 root root 538 Jan 12 10:10 /home/bsmp/portal/.keytab/hive.keytab
    === 主机: 10.200.8.67 ===
    -rwxr-x— 1 root root 538 Dec 23 2024 /home/bsmp/portal/.keytab/hive.keytab
    [root@master ~]#

2. Catalog 属性中的 Kerberos 配置

[root@master ~]# kinit -kt /home/bsmp/portal/.keytab/hive.keytab  hive/admin@AOTAIN.COM
[root@master ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hive/admin@AOTAIN.COM
Valid starting       Expires              Service principal
2026-02-24T15:09:31  2026-02-25T15:09:31  krbtgt/AOTAIN.COM@AOTAIN.COM
    renew until 2026-03-07T15:09:31
[root@master ~]# hdfs dfs -ls /
Found 13 items
drwxrwxrwx   - hive  supergroup          0 2023-04-28 13:00 /checkpoint
 drwxrwx--x   - hive  hive                0 2022-05-28 15:07 /extwarehouse
 drwxrwxrwx   - hdfs  supergroup          0 2022-09-18 15:35 /flink-remote-dist-dir
 drwxrwxrwx   - hive  supergroup          0 2023-04-24 18:52 /flink-savepoints
 drwxr-xr-x   - hbase hbase               0 2024-11-02 18:16 /hbase
 drwxr-xr-x   - hbase hbase               0 2024-12-18 15:12 /hbase-sec
 drwxr-xr-x   - hive  hive                0 2024-11-02 16:29 /hive
 drwxr--r--   - hdfs  supergroup          0 2021-12-15 14:49 /opt
 drwxr-xr-x   - hdfs  supergroup          0 2025-06-23 12:53 /system
 drwxrwxrwx   - hdfs  supergroup          0 2025-11-13 17:53 /tmp
 drwxr-xr-x   - hdfs  supergroup          0 2025-10-22 09:49 /user
 drwxr-xr-x   - hdfs  supergroup          0 2024-11-02 16:09 /warehouse
 drwxr-xr-x   - hdfs  supergroup          0 2024-11-02 15:58 /yarn
 [root@master ~]# 

3. be的日志

3.1 be.INFO

3.2 be. WARNING

    /build/starrocks/be/src/storage/meta_reader.cpp:179 _collect(_params->fields[i], _params->cids[i], (*dsts)[i], _params->field_type[i])
/build/starrocks/be/src/storage/meta_reader.cpp:79 _collect_context.seg_collecters[_collect_context.cursor_idx]->collect(&columns)
/build/starrocks/be/src/storage/olap_meta_reader.cpp:158 _read((*result).get(), chunk_capacity - chunk_start)
W1029 17:44:07.073323 40390 fragment_context.cpp:173] [Driver] Canceled, query_id=cff4f618-b4ab-11f0-94f6-5ca7214154d4, instance_id=cff4f618-b4ab-11f0-94f6-5ca7214154d5, reason=InternalError
E1029 17:44:07.259883 40845 scan_operator.cpp:413] scan fragment cff4f618-b4ab-11f0-94f6-5ca7214154d5 driver 0 Scan tasks error: Internal error: hdfsOpenFile failed, file=hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_sjpm_jwyj_commission_record_filing_his_df/dt=20241230/000000_0. err_msg: error=Error(255): 未知的错
误 255, root_cause=AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]: file = hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_sjpm_jwyj_commission_record_filing_his_df/dt=20241230/000000_0
/build/starrocks/be/src/connector/hive_connector.cpp:103 _init_scanner(state)
/build/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:505 _data_source->open(state)
/build/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:534 _open_data_source(state)
E1029 17:44:38.500775 40755 scan_operator.cpp:413] scan fragment e2b27a3f-b4ab-11f0-94f6-5ca7214154d5 driver 0 Scan tasks error: Internal error: hdfsOpenFile failed, file=hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_dcpc_jwyj_commission_fund_settlement_df/dt=20250102/000001_0. err_msg: error=Error(255): 未知的错误
 255, root_cause=AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]: file = hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_dcpc_jwyj_commission_fund_settlement_df/dt=20250102/000001_0
/build/starrocks/be/src/connector/hive_connector.cpp:103 _init_scanner(state)
/build/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:505 _data_source->open(state)
/build/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:534 _open_data_source(state)
W1029 17:44:38.500902 40438 pipeline_driver.cpp:308] pull_chunk returns not ok status Internal error: hdfsOpenFile failed, file=hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_dcpc_jwyj_commission_fund_settlement_df/dt=20250102/000001_0. err_msg: error=Error(255): 未知的错误 255, root_cause=AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]: file = hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_dcpc_jwyj_commission_fund_settlement_df/dt=20250102/000001_0
/build/starrocks/be/src/connector/hive_connector.cpp:103 _init_scanner(state)
/build/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:505 _data_source->open(state)
/build/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:534 _open_data_source(state)
/build/starrocks/be/src/exec/pipeline/scan/scan_operator.cpp:238 _get_scan_status()
W1029 17:44:38.500944 40438 pipeline_driver_executor.cpp:166] [Driver] Process error, query_id=e2b27a3f-b4ab-11f0-94f6-5ca7214154d4, instance_id=e2b27a3f-b4ab-11f0-94f6-5ca7214154d5, status=Internal error: hdfsOpenFile failed, file=hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_dcpc_jwyj_commission_fund_settlement_df/dt=20250102/000001_0. err_msg: error=Error(255): 未知的错误 255, root_cause=AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]: file = hdfs://nameservice1/user/hive/warehouse/fin_treasury_uat.db/ods_dcpc_jwyj_commission_fund_settlement_df/dt=20250102/000001_0