返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

导出数据到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:

GBase 8a MPP Cluster 最佳实践
5 FAQ
文档版本(2022-02-11)
南大通用数据技术股份有限公司
133
DETAIL: Can't open file: 'Export operation failed with error - I/O operation
on hdp://ldapuser@133.96.79.207: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 /*133.96.79.143_16565_5_2017-11-29_10:34:23*/ /*+ TID('599
815447') */ `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 fi
nd any kerberos credentails).

GSSException:Failure unspecified at GSS-API level (Mechanism level: Req
uest 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))

GBase 8a MPP Cluster 最佳实践
5 FAQ
文档版本(2022-02-11)
南大通用数据技术股份有限公司
134
1)升级Hadoop 集群java 环境到1.8.0 版本;
2)修改GBase 8a MPP Cluster 连接Hadoop 的实现,支持单点登录和token
维护。

要支持连接到 NLS 数据库,
则 GBase 8s JDBC Driver 维护一个将 NLS 语言环境映射到对
应的 JDK 语言环境和 JDK 代码集的表。
随着 JDK 支持使更多的语言环境和代码集可用,
NLS 语言环境之前不支持的语言环境和代码集在新的 JDK 中支持。GBase 8s JDBC
Driver 支持连接属性 NEWNLSMAP ,可以使用它指定映射没有在表中指定的 NLS 语言
环境。
NEWNLSMAP 属性具有以下格式:
NEWNLSMAP=NLS-locale,JDK-locale,JDK-codeset:NLS-locale,JDK-locale,
JDK-codeset,....
以下是 URL 使用这些属性的示例:
jdbc:gbasedbt-sqli://myhost:1533:gbasedbtserver=myserver;
user=myname;password=mypasswd;NEWNLSMAP=rumanian,ro_RO,ISO8859_2;
指定的代码集或语言环境映射的数量没有限制。如果指定的参数或值的数量不正确,则会
显示 Locale Not Supported 或 Encoding or Code Set Not Supported 消息。

字符位置格式的语法指定一些信息,其中包括数据行中字符位置范围的开
始字符位置和结束字符位置。
下图显示了字符位置 FILE 语句的语法。

元素
用途
重要注意事项
-end
指示数据行中结束字符
位置范围的字符位置
end 值前必须有连字
符。
fieldn
为正使用字符位置范围
定义的数据字段指定名

无。
filename
指定输入文件的名称。
无。
null string
指定 dbload 必须以
空值替代的数据值
必须是加引号的字符串。

start
指示数据行中开始一定
范围的字符位置的字符
无。



位置。如果您指
定 start 而没有指
定 end,那么它将代表
单个字符。
您可在数据字段定义或不同字段中重复相同的字符位置。
引用的 null string 的作用域是您定义它的数据字段。您可为每个允许空条
目的字段定义显式的空字符串。
插入的数据类型对应于显式或缺省列列表。在数据字段宽度与其对应的字
符列不同时,如果列较宽,那么将在插入值中填充空格;如果字段较宽,那么
将会截断插入值。
如果命名的列数少于表中的列数,
dbload 将插入为未命名的列指定的缺省
值。如果未指定缺省值,dbload 将尝试插入空值。如果整个尝试违反了非空约
束或唯一约束,插入操作将失败且将返回错误消息。
如果 INSERT 语句省略列名,那么 INSERT 缺省指定语句中指定的表中
的每一列。
如果 INSERT 语句省略了 VALUES 子句,
那么 INSERT 缺省指定
先前的 FILE 语句的每个字段。
如果列出的(或由缺省隐含的)列名数不匹配列出的(或由缺省隐含的)
值数,将导致错误。
dbload INSERT 语句的语法类似于 SQL 中的 INSERT 语句,不同之处在
于,在 dbload 中,INSERT 语句无法与 SELECT 语句合并使用。下图显示了
字符位置格式的 dbload INSERT 语句的语法。

元素
用途
重要注意事项
column
指定接收新数据的列
无。



owner.
指定表所有者的用户名
无。
table
指定接收新数据的表
无。
字符位置格式的语法与定界符格式的语法相同。
使用此命令文件运行 dbload 的用户必须在命名的表上具有 Insert 特权。