淘先锋技术网

首页 1 2 3 4 5 6 7

问题现象

通过 Kerberos 认证不落地导出数据到 HDFS,数据可以正常导出,但会有报错信息,

信息如下:

gbase> show warnings \G;

*************************** 1. row ***************************

Level: Error

Code: 1708

Message: [133.96.79.145:5050](GBA-02AD-0005)Failed to query in gnode:

DETAIL: Can't open file: 'Export operation failed with error - I/O operation

on hdp://ldap[email protected]:50070/user/bdoc/4/services/hdfs/58/datasync/o

m_test_outfile_20171129/om_test_outfile_20171129_16 failed with error - ' (e

rrno: 2)

SQL: SELECT `om.test_171124`.`name` AS `name`, `om.test_171124`.`age` AS `

age` INTO OUTFILE 'hdp://133.96.79.207:50070/user/bdoc/4/services/hdfs/58/d

atasync/om_test_outfile_20171129?user=ldapuser&groupnum=15&filenum=&cre

atedir=1' outfilemode by hdfs writemode by overwrites FIELDS TERMI

NATED BY '|' ENCLOSED BY '' LINES STARTING BY '' TERMINA

TED BY '\n' FROM `om`.`test_171124_n16` `om.test_171124`

1 row in set (Elapsed: 00:00:00.00)

ERROR:

No query specified

已经确定 hdfs 中已经有导出的数据,但是集群依然报错。

原因分析

通过对日志分析及模拟测试,确定问题的原因为:

Hadoop 集群在接收到并发的 token 请求后,有可能报错(不通过 8a 导出功能,脚

本就能复现)。

通过筛查现场 Hadoop 日志,发现共有两种报错的堆栈,都是由 jdk 层 jgss 模块引

发,目前暂未找到从部署上规避此问题的方法。

两种报错:

 GSSException: No valid credentials provided (Mechanism level: Failed to fin

d any kerberos credentails).

 GSSException:Failure unspecified at GSS-API level (Mechanism level: Requ

est a replay (34)).

其中报错 2 已明确是因为 jdk 层 jgss 模块为防止 replay 攻击的实现机制导致,而报

错 2 的具体原因目前还不清楚,推测与使用相同 Kerberos 凭据向 Hadoop 进行高并

发认证相关。

解决方法

两种报错的解决方案如下,解决方案可以二选一:

 GSSException: No valid credentials provided (Mechanism level: Failed to find any

kerberos credentails).

1. 修改用户应用程序,在加载和导出 SQL 中使用 Hadoop 的 Namenode 主机

名代替 IP 地址;

2. 升级部署的 Hadoop 版本到 2.8.0 版本。

 GSSException:Failure unspecified at GSS-API level (Mechanism level: Request a

replay 

1) 升级 Hadoop 集群 java 环境到 1.8.0 版本;

2) 修改 GBase 8a MPP Cluster 连接 Hadoop 的实现,支持单点登录和 token 维

护。