在虚拟机上安装GBase 8a MPP V953时,初始化安装后,gbase 组件不能启动。具体情况见下图:

gbase语法和hive gbase declare_数据库

gcware与gcluster组件正常开启,gnode却关闭。通过【gcluster_services gbase infor】语句查看gbase组件的信息,组件信息为stop

通过【gcluster_services gbase start】语句手动启动也失败,具体报错如下:

gbase语法和hive gbase declare_sql_02

期初怀疑是网络问题,应检查防火墙,如果没关闭则要关闭防火墙。

操作系统为Cent OS7.2,查看防火墙语句为【systemctl status firewalld.service】,查看到的结果如下

gbase语法和hive gbase declare_gbase语法和hive_03

看到Active:后的状态为dead,证明防火墙已经处于关闭状态。且为disabled意为禁止开机启动。

多说语句,如果状态不为dead ,应关闭防火墙,且禁止开机自动启动

关闭防防火墙:【systemctl stop firewalld.service】

禁止开机启动:【systemctl disabled firewalld.service】

这时候应该去看一下导致不能启动的真正原因了,查看gnode的启动日志。

启动日志位于【/安装目录/IP/gnode/log/gbase/】下的system.log,报错信息如下:

gbase语法和hive gbase declare_数据库_04

Memory manager is unable to allocate specified amount of memory。这句话的意思是说gbase 的内存分配组件没有可以分配的内存了。

遇到上述情形,解决方案有两种:

1、关闭其它占用内存的服务,或者reboot一下。
数据库一旦启动后,就不再检查这个了,而是按照参数进行动态计算最大值(gbase_memory_pct_target)。所以,如果此时内存被其它程序占用,将会使用到SWAP。

2、人工降低数据库的启动内存(确认肯定有其它程序必须占用内存时),涉及如下三个参数

gbase_heap_data
gbase_heap_temp
gbase_heap_large

建议采用第二种方法,重启机器或许会影响正在使用这台虚拟机的其他人,或者是影响到正在使用该虚拟机的服务。

进入到gnode配置文件【/安装目录/IP/gnode/config】,修改gbase_8a_gbase.cnf文件

gbase语法和hive gbase declare_gbase语法和hive_05

直接搜索heap关键字,将gbase_heap_data、gbase_heap_temp、gbase_heap_large,打开注释,以降低启动内存。

进行上述修改后GBase 8a的gbase组件可正常启动了!

有兴趣的同学可以看下对于该问题的问题分析:

GBase 8a的gbase启动内存其默认值,是按照如下工时评估的。物理内存的空限量达到60%才可进行启动,gbase_heap_data、gbase_heap_temp、gbase_heap_large按照6:3:1的比例。比如内存8G, 60%是4.8G, 那么这3个参数默认是

gbase_heap_data=4.8G*60%=2.88G
gbase_heap_temp=4.8G*30%=1.44G
gbase_heap_large=4.8G*10%=0.48G

可以按比例减少,其中gbase_heap_data可以优先,因为其默认比例最大。

上面那台起不来的机器,内存情况如下:

gbase语法和hive gbase declare_gbase语法和hive_06

8G的内存,用1024换算下来,也就7G多,需要有4.2G的空余,以上这个情形肯定是达不到了。所以需要手动降低GBase的启动内存才能顺利启动。