HAWQ技术解析(四) —— 启动停止

        前面已经完成了HAWQ的安装部署,也了解了HAWQ的系统架构与主要组件,下面开始使用它。HAWQ作为Hadoop上的一个服务提供给用户,与其它所有服务一样,最基本的操作就是启动、停止、重启服务。要完成这些操作,需要适当的环境设置。下面就HAWQ管理的一些基础概念、操作环境、启动停止及其推荐的操作进行讨论。

一、基础概念

        如果组织中能够做到系统管理与开发分离,那这部分内容严格说应该是HAWQ系统管理员所关心的。要利用好HAWQ集群,应该有一些Linux/UNIX系统管理、数据库管理系统、DBA和SQL等必备知识和经验。HAWQ服务器实际上是一个以HDFS作为物理存储的分布式数据库系统,像Oracle、MySQL等软件一样,是一个真正的数据库。HAWQ代码源自PostgreSQL,具有完整的数据库特性,就连HAWQ的官方文档也始终与PostgreSQL文档保持一致。这点与其它SQL-on-Hadoop方案显著不同。例如Hive,它只是给MapReduce封装了一个SQL语义层,SQL语句的执行依赖于底层的MapReduce计算框架,SparkSQL、Impala等等也都是如此。因此个人认为HAWQ更适合DBA转到Hadoop上。(当然,要是有个将MySQL移植到Hadoop上的产品就更好了。)

1. HAWQ用户

        HAWQ支持对用户和操作权限的管理。HAWQ系统安装后,数据库中包含一个预定义的超级用户,该用户与安装HAWQ的操作系统用户用户同名,叫做gpadmin。gpadmin作为操作系统用户,可以使用HAWQ的命令行工具执行管理任务,如启动或停止HAWQ、扩展集群、删除集群中的节点等过程。而作为数据库用户,gpadmin相当于Oracle的sys或MySQL的root,具有数据库的最大权限。HAWQ管理员用户可以创建其它数据库用户,并向他们赋予管理或操作数据库对象的权限。

        可以选择使用Ambari或命令行管理HAWQ集群。当使用Ambari管理HAWQ时,用Ambari的管理员用户登录Web控制台页面即可,不需要使用gpadmin。Ambari缺省的管理员用户名/密码是admin/admin。Managing HAWQ Using Ambari提供了通过Ambari管理HAWQ集群的详细说明。

2. HAWQ系统部署

        从前面的安装过程中看到,一个典型的HAWQ部署包括一个HDFS NameNode、一个HAWQ master、一个HAWQ standby,以及多个HAWQ segment与HDFS DataNode。HAWQ集群中还可能包括HAWQ Extension Framework(PXF)服务或其它Hadoop的服务。

        使用Ambari在HDP上安装HAWQ时,会为HAWQ节点自动选择HDP集群中的主机,只要求master和standby运行在不同主机上,segment可以和master、standby运行在相同主机上,通常在每个DataNode上运行一个segment。在我的实验环境中,Ambari选择hdp3作为master,hdp2作为standby,HDP集群中的所有4台主机,每个上面运行一个segment。实验环境与安装过程参见https://cloud.tencent.com/developer/article/1011810

二、HAWQ操作环境

        在操作HAWQ集群前,必须设置HAWQ所需的环境。

1. 设置HAWQ操作环境

        HAWQ提供了一个名为greenplum_path.sh的shell脚本文件,位于HAWQ安装的根目录下,用于设置HAWQ所需的环境变量。这些环境变量中最重要的是$GPHOME,它指定了HAWQ安装的根目录。如果安装的是Pivotal提供的HAWQ安装版本,典型的HAWQ根目录是/usr/local/hawq。其它环境变量包括用于查找HAWQ相关文件的$PATH、动态链接库路径$LD_LIBRARY_PATH、python路径$PYTHONPATH、openssl配置文件$OPENSSL_CONF、HDFS3客户端配置文件$LIBHDFS3_CONF、YARN客户端配置文件$LIBYARN_CONF、HAWQ的配置文件$HAWQSITE_CONF等。缺省设置可以满足大多数需求。如果环境有特殊要求,可以将相关环境变量添加到greenplum_path.sh文件中。

        执行以下步骤设置HAWQ操作环境:

(1)用gpadmin登录HAWQ节点,或者切换到gpadmin,例如:

[root@hdp1 ~]# su - gpadmin
[gpadmin@hdp1 ~]$ 

(2)通过执行greenplum_path.sh文件设置HAWQ操作环境:

[gpadmin@hdp1 ~]$ source /usr/local/hawq/greenplum_path.sh

(3)编辑.bash_profile或其它shell资源文件在登录时执行greenplum_path.sh。例如:

[gpadmin@hdp1 ~]$ echo "source /usr/local/hawq/greenplum_path.sh" >> ~/.bash_profile

(4)在shell初始化文件中设置与具体部署相关的HAWQ特定环境变量,包括PGAPPNAME、PGDATABASE、PGHOST、PGPORT和PGUSER等(可选)。例如:

  • . 如果定制了HAWQ主节点的端口号,在shell初始化文件中添加如下一行,设置PGPORT环境变量使该端口号成为缺省值:export PGPORT=10432。设置PGPORT简化了psql命令行,通过提供缺省端口而不用提供-p(端口)选项。
  • . 如果例行操作一个特定数据库,在shell资源文件中添加如下一行,设置PGDATABASE环境变量使该数据库成为缺省值:export PGDATABASE=<database-name>。将<database-name>替换成缺省连接的数据库名。设置PGDATABASE简化了psql命令行,通过提供缺省端口而不用提供-d(数据库)选项。

        与HAWQ部署相关的环境变量,参见Environment Variables

2. HAWQ文件与目录

        表1说明HAWQ缺省安装的一些文件和目录。

文件/目录

内容

$HOME/hawqAdminLogs/

缺省的HAWQ管理应用程序日志文件目录

$GPHOME/greenplum_path.sh

HAWQ环境设置脚本

$GPHOME/bin/

HAWQ管理、客户端、数据库和管理应用程序

$GPHOME/etc/

HAWQ配置文件,包括hawq-site.xml

$GPHOME/include/

HDFS、PostgreSQL、libpq的头文件

$GPHOME/lib/

HAWQ库文件

$GPHOME/lib/postgresql/

PostgreSQL共享库和JAR文件

$GPHOME/share/postgresql/

PostgreSQL及其过程化语言的示例与脚本

/data/hawq/[master|segment]/

HAWQ主节点和段的缺省数据目录位置

/data/hawq/[master|segment]/pg_log/

HAWQ主节点和段的缺省日志文件目录位置

/etc/pxf/conf/

PXF服务的配置文件

/usr/lib/pxf/

PXF服务插件共享库

/var/log/pxf/

PXF日志文件目录

/usr/hdp/current/

HDP运行时和配置文件

表1

三、启动和停止HAWQ

        在HAWQ系统中的master节点和所有的segment节点,每个节点运行一个PostgreSQL数据库服务器实例,例如,在hdp3上可以看到如下两个postgres进程:

/usr/local/hawq_2_1_1_0/bin/postgres -D /data/hawq/master -i -M master -p 5432 --silent-mode=true
/usr/local/hawq_2_1_1_0/bin/postgres -D /data/hawq/segment -i -M segment -p 40000 --silent-mode=true

        所有这些DBMS一起被当做单一的DBMS被启动和停止,通过这种方式能够统一启停所有实例。因为HAWQ系统被分布于多个机器上,启动与停止HAWQ系统的过程又不同于标准的PostgreSQL DBMS的启动停止过程。

        启动和停止HAWQ的命令分别是hawq start和hawq stop,hawq init命令也会启动系统。hawq命令行工具是一个python脚本,位于$GPHOME/bin目录下。可以在命令行输入hawq -h、hawq start -h或hawq stop -h等获得相关命令的联机帮助。启动停止HAWQ集群的命令都以gpadmin操作系统用户执行。

        注意,不要使用操作系统的kill命令终止任何postgres进程。和其它所有数据库管理系统一样,强杀极有可能引起数据不一致的问题。每个客户端连接到HAWQ时,会在master节点上产生一个postgres进程,这与Oracle的专用服务器类似。终止用户会话postgres进程的正确方法是使用pg_cancel_backend()数据库命令。下面是一个例子:

select datname,procpid,current_query from pg_stat_activity; 

        其中datname是会话连接的数据库名,procpid是会话对应的操作系统进程号,current_query是会话当前执行的SQL语句,查询结果如图1所示。

图1

select pg_cancel_backend(354310);

        取消354310进程。不能取消自己本身的会话,错误信息如图2所示。

图2

1. 启动HAWQ

        初始安装或执行hawq init cluster命令后,HAWQ集群会自动启动。hawq init cluster命令将初始化HAWQ的master实例和每一个segment实例,并将系统配置为一个整体。该命令要求HAWQ在HDFS上的数据目录为空,也就是说要清除掉所有用户数据,因此一般不要手工执行。

        更多hawq init的信息参见http://hdb.docs.pivotal.io/211/hawq/reference/cli/admin_utilities/hawqinit.html

        为了启动已经初始化后的停止了的HAWQ系统,需要在主节点实例上运行hawq start命令。

hawq start cluster

        启动一个已经初始化的HAWQ集群,只能在master节点上执行。该命令将启动HAWQ系统的master和所有segment,并行执行且协调这个过程。

hawq start master

        只启动HAWQ的master节点,而不启动segment节点。

hawq start segment

        启动本地segment节点。

hawq start standby

        启动standby节点。

hawq start allsegments

        一次启动所有segment节点。

        如果希望忽略无法ssh连接的主机,可以使用hawq start --ignore-bad-hosts选项。    

        更多hawq start的信息参见http://hdb.docs.pivotal.io/211/hawq/reference/cli/admin_utilities/hawqstart.html

2. 重启HAWQ

        hawq restart命令后跟适当的集群或节点类型,将停止HAWQ,然后在完全终止后重启HAWQ。如果master或segment已经停止,重启不受影响。

hawq restart cluster

        重启HAWQ集群,只能在master节点上执行。

hawq restart master

        重启master节点。

hawq restart segment

        重启本地segment节点。

hawq restart standby

        重启standby。

hawq restart allsegments

        一次重启所有segments。

        更多hawq restart的信息参见http://hdb.docs.pivotal.io/211/hawq/reference/cli/admin_utilities/hawqrestart.html

3. 只重新导入修改的配置文件

        可以在不中断系统的情况下重载HAWQ的配置文件。hawq stop命令能够在不中断服务的情况下,重载pg_hba.conf配置文件(连接认证文件),以及hawq-site.xml和pg_hba.conf文件中的运行时参数。配置在新连接中生效。许多服务器配置参数需要系统完全重启(hawq restart cluster)才能生效。服务器配置参数的更多信息,参考Server Configuration Parameter Reference

        使用hawq stop命令重载配置文件而不停止系统:

hawq stop cluster --reload

        或者:

hawq stop cluster -u

4. 以维护模式启动主节点

        可以只启动master节点执行维护或管理任务,而不影响segment节点上的数据。维护模式是一个超级用户模式,应该只在实施维护任务时使用。例如,在维护模式下,允许连接到master节点实例上的数据库并编辑系统目录设置。

(1)在主节点上使用-m选项运行hawq start:

hawq start master -m

(2)为维护系统目录,连接到维护模式下的master节点。例如:

PGOPTIONS='-c gp_session_role=utility' psql template1

(3)完成管理任务后,以生产模式重启主节点。

hawq restart master

        注意:错误地使用维护模式连接,可能造成HAWQ系统状态不一致。应该只有专家级用户执行这个操作。

5. 停止HAWQ

        hawq stop cluster命令停止HAWQ系统,该命令总是在主节点所在主机上运行。当此命令执行时,会停止所有系统中的postgres进程,包括master和所有segment实例。hawq stop cluster命令使用缺省的最多64个并行线程停止所有构成HAWQ集群的segment。在停止前,系统会等待任何活动的事务结束。为了立即停止HAWQ,可以使用fast停止方式。命令hawq stop master、hawq stop segment、hawq stop standby和hawq stop allsegments分别用于停止master节点、本地segment节点、standby节点和集群中的所有segment。只停止master节点不会终止整个集群。下面是两个停止HAWQ集群的例子。

        停止HAWQ:

hawq stop cluster

        以快速模式停止HAWQ:

hawq stop cluster -M fast

        -M选项提供了smart、fast、immediate三种停止方式,它们类似于Oracle中shutdown命令的normal、immediate和abort。Smart是缺省值,如果发现数据库中有活动的连接,停止失败,并发出一个错误消息,如图3所示。

图3

        Fast方式中断并回滚当前处理的任何事务。

        Immediate方式终止正在处理的事务,并立即杀掉所有相关postgres进程。数据库服务器不会完成事务处理,也不会清除任何临时数据或使用中的工作文件。(工作文件的概念与MySQL的临时文件类似。查询执行过程中,如果不能在内存进行,则会在磁盘创建工作文件。)因此,不推荐使用immediate停止方式。在某些情况下,immediate可能造成数据库损坏,并需要手工恢复。

        更多hawq stop的信息参见http://hdb.docs.pivotal.io/211/hawq/reference/cli/admin_utilities/hawqstop.html

6. 启动/停止HAWQ集群最佳实践

        为了更好地使用hawq start和hawq stop管理系统,HAWQ推荐使用下面的最佳实践。

  • 执行CHECKPOINT命令,将所有数据文件中更新的数据刷新回磁盘,并在停止集群前更新日志文件。与其它数据库中检查点的概念相同,一个检查点确保在系统崩溃时,文件可以从检查点快照中被还原。
  • 在master节点所在主机上执行以下命令停止整个HAWQ系统:hawq stop cluster。
  • 停止segment,并杀死任何运行的查询,而不造成数据丢失或不一致的问题,在master上使用fast停止模式:hawq stop cluster -M fast。
  • 使用hawq stop master只停止master节点。如果因为存在运行着的事务而不能停止master节点,尝试使用fast方式。如果fast无法工作,再使用immediate方式。使用immediate会引发警告,因为在系统重新启动时,会导致执行崩溃恢复:hawq stop master -M fast或hawq stop master -M immediate。
  • 如果已经修改并希望重载服务器参数设置,并且HAWQ数据库上的有活动连接,使用命令:hawq stop master -u -M fast
  • 当停止本地segment或所有segment时,使用smart模式,这也是缺省值。在segment上使用fast或immediate模式是无效的,因为segment是无状态的:hawq stop segment或hawq stop allsegments。
  • 典型地,应该总是使用hawq start cluster或hawq restart cluster启动集群。如果使用hawq start standby|master|segment的方式分别启动节点,确保总是在启动master节点之前启动standby节点,否则standby可能与master数据不同步。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

MongoDB从入门到“精通”之简介和如何安装

MongoDB简介 非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备...

2734
来自专栏微服务

微服务实践分享与探讨

服务调用关系 ? API网关优缺点 简化沟通方式 API网关对所有微服务提供单一的访问点 安全性 对客户端隐藏了服务发现和服务版本 阻止大规模攻击,包括S...

3177
来自专栏腾讯云服务器团队的专栏

腾讯云 CBS 性能测试用例参考

2、fio测试建议在空闲的、未保存重要数据的硬盘上进行,并在测试完后重新制作文件系统。请不要在业务数据硬盘上测试,避免底层文件系统元数据损坏导致数据损坏。

31013
来自专栏Golang语言社区

服务器备份方式大概有以下几种 详细??

1、正常备份(Normal): 也叫完全备份。正常备份是最普遍的一种备份方式,是将整个系统的状态和数据完全进行备份,包括服务器的操作系统、应用软件以及所有的数据...

2819
来自专栏张善友的专栏

Service Bus for Windows server

Microsoft最近公开发布了Service Bus 1.0,该Service Bus可以免费地使用于具有适当license的Windows服务器上,这使得W...

17810
来自专栏北京马哥教育

Linux 运维工程师必备的80个监控工具(第30-80个)

这是《Linux 运维工程师必备的80个监控工具》的下篇,上篇请点击:Linux运维工程师必备的80个监控工具全集(上) 与系统有关的监控 30 nmom[2...

3957
来自专栏腾讯移动品质中心TMQ的专栏

Windows开机过程和测试方法探索

用户会经常抱怨自从安装自己的应用后,电脑开机变慢,到底是系统的原因还是应用的原因,为了了解这里的问题,探秘了下windows的开机过程和测试方法。 一、开机过...

18710
来自专栏技术翻译

使用Spring Boot,Spring Cloud,Docker和一些Netflix的开源工具建立微服务架构。

本文通过使用Spring Boot,Spring Cloud和Docker构建的概念验证应用程序的示例,为了解常见的微服务架构模式提供了一个起点。

870
来自专栏IT米粉

系统日志管理那点事

日志管理的第一件事,就是日志的收集。日志收集是开发者必备的技巧,不管是哪个开发语言,哪个开发平台,日志收集的插件都是有很多选择的。例如:

3466
来自专栏IT米粉

系统日志管理那点事

说起日志,大家都是耳熟能详的,一大堆日志插件映入眼帘,日志收集的方式也历历在目,但是,今天我们的重点不仅仅是收集日志了,今天我们主要说说怎么管理日志 收集日志 ...

2514

扫码关注云+社区