Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)

导入导出

13 orato8a query 方式导出报错 ORA-02391 连接数不足

问题现象

执行 orato8a 导出,报错 ORA-02391,连接数不够了。但 sqlplus 执行 sql 不报错,

怀疑 orato8a 在一次导出数据建立了多个 session 连接。

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第1张图片

和研发确认,orato8a 会启动两个进程,一个里面有一个链接。

解决方法

DBA 增加用户连接数设置。

14 orato8a 抽取包含 clob 字段表速度慢

问题现象

orato8a 抽取包含 clob 字段表速度慢。

原因分析

oracle server 在访问 lob 数据时 io 压力过重。

解决方法

从 oracle 服务器优化性能,方法有:

 建表时对 lob 字段不使用''DISABLE STORAGE IN ROW''。

 建表时对 lob 字段调整 CHUNK 参数值,使其覆盖到大部分 lob 字段数据宽度。

 建表时对 lob 字段增加参数 CACHE 或 CACHE READS。

15 导出数据到 kerberos 认证 hdfs,数据可以正常导出,但会有报错信息

问题现象

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

信息如下:

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第2张图片

已经确定 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))

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

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

16 gbase 导出到 hadoop 无响应

问题现象

gbase 导出到 hadoop 无响应。

原因分析

webhdfs 导出没有超时控制,hdfs 无响应时导出长时间卡住。

解决方法

增加导出超时参数解决 HDFS 导出卡住问题 gbase_export_write_timeout。

17 使用 gcdump 参数 ignore-table 不导出指定的表或视图

问题现象

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第3张图片

解决方法

如果需要忽略报错,不导出有问题的视图,可以加--ignore-table 参数。

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第4张图片

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第5张图片

前提是需要事先知道哪些表或视图不需要导出,并且一个--ignore-table 参数后面只能接一个表。

18 sftp 加载大文件报错

问题现象

使用 sftp 加载大文件报错,加载小文件正常。

原因分析

当集群并发加载任务数和单任务最大加载机数较大时,会出现 sftp 文件加载失败的情况。

解决方法

确定是参数 gcluster_loader_max_data_processors 设置太大造成,将参数调小后无报错。

建议使用 sftp 加载的方式,sshd 的配置文件需要调整 maxstartup、maxsession 等参数。

19 tmp 目录权限改变导致加载失败

问题现象

项目上进行安全扫描,将操作系统 tmp 目录的权限修改为 750,造成集群加载失

败,后修复为 777 后恢复正常。产品层面有没有办法进行调整?

解决方法

调整数据库参数,将指定/tmp 路径的,修改为 gbase 系统用户路径,如

/home/gbase/tmp。

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第6张图片

20 orato8a 导出报错 error while loading sharedlibraries 等

问题现象

在使用 orato8a 导出数据过程中报错./orato8a: error while loading shared libraries:

libclntsh.so.11.1: cannot open shared object file: No such file or directory,报错

./orato8a: error while loading shared libraries: libHbaseThrift.so.0: cannot open

shared object file: No such file or directory 等。

解决方法

使用 orato8a-8.6.2.11-R3-redhat6.2-x86_64 在 oracle server 服务器上进行测试。

 报错找不到 libclntsh.so.11.1

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第7张图片

在 LD_LIBRARY_PATH 中添加 libclntsh.so.11.1 所在路径。

 报错找不到 libHbaseThrift.so.0

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第8张图片

libHbaseThrift.so.0 是 orato8a 安装包中自带的 lib 库,在 LD_LIBRARY_PATH

中添加 libHbaseThrift.so.0 所在路径。

 报错 FAILED: OCIEnvCreate()

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第9张图片

添加 ORACLE_HOME 解决。

导出成功。

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第10张图片

21 orato8a 导出大数据量卡住

问题现象

用 orato8a 导出 1.2T 数据,导出 290G 左右数据就无法写入。试过全表导出和 query

方式导出,都出现了同样的现象。

orato8a 报错:

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第11张图片

原因分析

问题是当单次查询导出数据量过大,且其它应用 DML 操作提交过多时,oracle

的快照失效引起。

解决方案

 orato8a:

 使用--table_name 参数,加大--parallel 并发数,以减少查询导出时间;

 使用--query 参数,带 where 过滤,以减少查询导出时间。

 oracle 配置

1) 增加 UNDO 表空间大小;

2) 增加 UNDO_RETENTION 时间,默认为 15 分钟。

 现场其它访问 oracle 的应用

1) 避免频繁的 DML 操作提交。

22 rmt 远程导出卡住

问题现象

如果不加 first_row 或者 first_row 设置不合理,容易出现卡住的问题。每一个发送

端都会向接收端建立一个连接,用于发送数据,接收端为每一个发送端启动一个

接收线程,实现并行接收,当接收端 Buffer 满了以后就抢占串行写锁,如果抢占

成功就会将接收线程 Bufferr 的数据写入导出文件。但如果一个接收线程抢占串行

写锁后,接收 Buffer 又有源源不断的数据,就会阻塞其它接收线程的 Flush,当其

它接收的线程 Buffer 满后,发送端就会收到不能再发送的信息,这个时候发送端

就会用一个 timeout 进行不停的探测,而且每次 timeout 后这个值会递增。而持有

串行写锁的线程,释放该锁后。其它接收线程也都 Flush 完成后,发送端这个时

候还没有到 timeout,所以就没有数据发送到接收端造成导出卡住的假象出现。集

群规模越大,相对越容易出现。 

临时解决方案

使用 gccli-c + (hint)first_row 参数的控制方式。

23 远程 rmt 导出 dual 表数据没有落到本地而是落到了集群节点上

问题现象

在使用 rmt 导出物理表,数据文件落在本地服务器上。使用 rmt 导出 dual 表时,

数据文件落在-h 连接的集群节点上。

例如 gccli-h132.151.55.14-ubi-pBiChinaU1!-e"rmt:select'1'from dual into outfile'

/home/gbase/zhoutt1.txt'"

数据没有导出到 gccli 所在的服务器,而是落到了 132.151.55.14 上。

测试版本 8.6.2_build23-R8。

解决方法

打开_t_gcluster_use_new_dual 参数,使用新 dual 模式,可以正常导出到 gccli 所

在服务器。

另外,使用一般用户导出还需要额外赋予用户 dual 表的 select 权限,grant select on

gclusterdb.dual to u01。

24 ftp 报错 500 OOPS: cannot changedirectory:/home/*******

问题现象

现场通过 ftp 获取数据文件,报错信息如下:

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第12张图片

解决方法

 当你看到以上提示时,试着输入以下命令解决

第一行中的-P 参数是为了以后不需要每次开机都输入这个命令。

如果使用 setsebool-P ftpd_disable_trans 1 //加-P 表示永久性。

如果提示以下错误:

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第13张图片

 可能直接使用下面这个一条就可以解决了:

 如果还是不行的话再使用下面完全方式:

Gbase 8a MPP Cluster维护过程中可能遇到的故障管理(八-下)_第14张图片

重启 vsftpd,即可解决问题。

你可能感兴趣的:(Gbase,GBase,8a,MPP,Cluster,数据库,database)