天天看點

GBASE 8A v953報錯集錦41--導出資料到 Kerberos 認證 HDFS,資料可以正常導 出,但會有報錯資訊

問題現象

通過 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 (34))

1) 更新 Hadoop 叢集 java 環境到 1.8.0 版本;

2) 修改 GBase 8a MPP Cluster 連接配接 Hadoop 的實作,支援單點登入和 token 維

護。 

繼續閱讀