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.xml 和 hdfs-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 属性中提供的 keytab 和 principal 去进行 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 中配置的 keytab 和 principal 。
  • 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.INFO 或 be.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

看起来直接报错是没有tgt票据。看一下FE和BE是不是都配置好了kerberos,kinit是不是正确,还有就是上面发的那个HADOOP_USER_NAME的环境变量,这个很多使用kerberos的时候没配置,导致访问hdfs的时候报错。

现在的报错信息是

    mysql> set catalog hive12;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from test_db.test_data_partitioned;
ERROR 1064 (HY000): hdfsOpenFile failed, file=hdfs://nameservice1/user/hive/warehouse/test_db/test_data_partitioned/create_date=2025-01-07/000003_0. err_msg: error=Error(13): Permission denied, root_cause=RemoteException: org.apache.hadoop.security.AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]: file = hdfs://nameservice1/user/hive/warehouse/test_db/test_data_partitioned/create_date=2025-01-07/000003_0
mysql> 

fe.conf


be.conf

[ root@master ~]# kinit -kt /home/bsmp/portal/.keytab/hive.keytab hive/admin
[root@master ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hive/admin@AOTAIN.COM

Valid starting       Expires              Service principal
2026-03-20T16:07:35  2026-03-21T16:07:35  krbtgt/AOTAIN.COM@AOTAIN.COM
        renew until 2026-03-31T16:07:35
[root@master ~]#

这个看着就是HDFS的权限问题,是不是hive的文件权限不对,hdfs dfs -ls /user/hive/warehouse(一般情况是这个路径,具体看你hive配置),用户和你starrocks配置的hadoop user是不是一样

[root@master ~]# hdfs dfs -ls hdfs://nameservice1/user/hive/warehouse/test_db/test_data_partitioned/create_date=2025-01-07/
Found 4 items
-rw-rw-rw-   3 hive hive      40427 2026-03-05 11:11 hdfs://nameservice1/user/hive/warehouse/test_db/test_data_partitioned/create_date=2025-01-07/000000_0
-rw-rw-rw-   3 hive hive      45905 2026-03-05 11:11 hdfs://nameservice1/user/hive/warehouse/test_db/test_data_partitioned/create_date=2025-01-07/000001_0
-rw-rw-rw-   3 hive hive      42421 2026-03-05 11:11 hdfs://nameservice1/user/hive/warehouse/test_db/test_data_partitioned/create_date=2025-01-07/000002_0
-rw-rw-rw-   3 hive hive      44087 2026-03-05 11:11 hdfs://nameservice1/user/hive/warehouse/test_db/test_data_partitioned/create_date=2025-01-07/000003_0
[root@master ~]# 

这个是hive catalog的创建语句
| hive12 | CREATE EXTERNAL CATALOG hive12
PROPERTIES (“dfs.ha.namenodes.nameservice1” = “namenode139,namenode233”,
“hadoop.security.authentication” = “kerberos”,
“dfs.namenode.rpc-address.nameservice1.namenode139” = “cdh7:8020”,
“hadoop.kerberos.keytab” = “/home/bsmp/portal/.keytab/hive.keytab”,
“dfs.namenode.rpc-address.nameservice1.namenode233” = “cdh8:8020”,
“hadoop.kerberos.principal” = “hive/admin@AOTAIN.COM”,
“hive.metastore.uris” = “thrift://cdh5:9083”,
“type” = “hive”,
“dfs.nameservices” = “nameservice1”,
“dfs.client.failover.proxy.provider.nameservice1” = “org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”,
“java.security.krb5.conf” = “/etc/krb5.conf”
) |
±--------±------

hive.keytab 对吗,应该是 hive/AOTAIN.COM@AOTAIN.COM吧?

[root@master ~]# klist -kt /home/bsmp/portal/.keytab/hive.keytab
Keytab name: FILE:/home/bsmp/portal/.keytab/hive.keytab
KVNO Timestamp Principal


3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
3 2026-03-16T14:19:53 hive/admin@AOTAIN.COM
[root@master ~]#

试试配置成hive/${hive server2运行的主机FQDN}@AOTAIN.COM吧,这样才能在realm里找到主机,admin看起来好像不太对