一.问题现象
分析异常日志信息如下:
2024-10-17T06:11:13.402748786Z 2024-10-17 14:11:13 WARN DFSClient:703 - Failed to connect to /172.28.157.210:9866 for block BP-1747384491-172.28.192.210-1726295241929:blk_1073744492_3668, add to deadNodes and continue.
2024-10-17T06:11:13.402760730Z java.io.IOException: Invalid token in javax.security.sasl.qop: D
2024-10-17T06:11:13.402764244Z at org.apache.hadoop.hdfs.protocol.datatransfer.sasl.DataTransferSaslUtil.readSaslMessage(DataTransferSaslUtil.java:220) ~[hadoop-hdfs-client-2.10.2.jar:?]
如图:
二.运行环境信息
Iceberg 版本 1.6.1
hive 版本3.1.3
Gravitino Iceberg 引入的hadoop 版本 2.10.2,hadoop hdfs 版本2.10.2,和hive metastore 版本2.3.9
JDK17
三.问题分析
根据日志信息分析可能存在以下情况出现问题,如下:
1.根据日志首先怀疑是kertab认证问题
检查catalog有关authentication认证的配置:
authentication.type,authentication.kerberos.principal,authentication.kerberos.keytab-uri,gravitino.bypass.hadoop.security.authentication各个信息,并本地debug确认 认证登录已经通过(因为认证信息在hive3的catalog 上也都是正常使用的),排除该怀疑点;
2.datanode节点之间可能存在网络问题
联系运维协助排查datanode节点直接是否存在故障,发现hadoop集群之间偶尔也出现上述异常日志,经过分析完善优化了一些配置,如:dfs.encrypt.data.transfer=true等配置未在发现hadoop集群出现异常;
重启Gravitino服务验证iceber获取表的元数据信息问题依然存在;
3.iceberg建表配置可能不支持导致的问题
打开iceberg官网,使用官网建表sql 建立物理表,sql报错,或者建表成功但是查询表提示表不存在的情况;
和运维再次检查iceberg相关的配置和优化,最后验证:
通过beeline hive 操作iceberg :create,insert,select 均正常,然后再使用Gravitino 操作catalog 查看表信息 问题依然存在,说明iceberg服务正常,问题应该出在Gravitino服务上;
4.Gravitino 版本不兼容导致
4.1 Iceberg服务版本为1.6.1,Gravitino iceberg版本1.5.2,可能存在版本冲突;
于是iceberg官网下载 iceberg 1.5.2 版本的jar包:iceberg-hive-runtime-1.5.2.jar 添加到hive libs下,重启hive服务,使用Gravitino 再次访问问题依然存在;
4.2 Gravitino iceberg 中hadoop hdfs版本为2.10.2 版本,与iceberg 1.5.2 版本存在冲突;
开始在 各个博客或者技术网站查找hadoop 与iceberg版本问题,最后发现有他人反馈相同的问题,如:issues.apache.org/jira/browse…
使用hadoop hdfs 3.2.1 和2.8.5 成功,使用2.10.1 就失败,而且异常信息和我们遇到的问题 一模一样,于是准备环境开始验证,修改Iceberg 中引入的hadoop hdfs的版本从2.10.2 改成2.8.5,打包发版验证;功能正常了,如图:
总结
本次问题是由Gravitino iceberg 的catalog 中hadoop hdfs 的版本兼容问题导致,把hadoop hdfs的版本从2.10.2 改成2.8.5 该问题解决;