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

        前面已经完毕了HAWQ的安装部署,也了解了HAWQ的系统架构与主要组件,以下開始使用它。

HAWQ作为Hadoop上的一个服务提供给用户,与其他全部服务一样。最主要的操作就是启动、停止、重新启动服务。要完毕这些操作,须要适当的环境设置。以下就HAWQ管理的一些基础概念、操作环境、启动停止及其推荐的操作进行讨论。

一、基础概念
        假设组织中能够做到系统管理与开发分离。那这部分内容严格说应该是HAWQ系统管理员所关心的。要利用好HAWQ集群,应该有一些Linux/UNIX系统管理、数据库管理系统、DBA和SQL等必备知识和经验。

HAWQserver实际上是一个以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缺省的管理员username/password是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。实验环境与安装过程參见http://blog.csdn.net/wzy0623/article/details/55212318



二、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、HDFS3client配置文件$LIBHDFS3_CONF、YARNclient配置文件$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主节点的port号。在shell初始化文件里加入例如以下一行。设置PGPORT环境变量使该port号成为缺省值:export PGPORT=10432。

    设置PGPORT简化了psql命令行,通过提供缺省port而不用提供-p(port)选项。

  • . 假设例行操作一个特定数据库。在shell资源文件里加入例如以下一行。设置PGDATABASE环境变量使该数据库成为缺省值:export PGDATABASE=<database-name>。将<database-name>替换成缺省连接的数据库名。设置PGDATABASE简化了psql命令行,通过提供缺省port而不用提供-d(数据库)选项。
        与HAWQ部署相关的环境变量。參见Environment Variables

2. HAWQ文件与文件夹
        表1说明HAWQ缺省安装的一些文件和文件夹。

文件/文件夹

内容

$HOME/hawqAdminLogs/

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

$GPHOME/greenplum_path.sh

HAWQ环境设置脚本

$GPHOME/bin/

HAWQ管理、client、数据库和管理应用程序

$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数据库server实例。比如,在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进程。和其他全部数据库管理系统一样,强杀极有可能引起数据不一致的问题。每一个client连接到HAWQ时,会在master节点上产生一个postgres进程,这与Oracle的专用server相似。

终止用户会话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文件里的运行时參数。配置在新连接中生效。很多server配置參数须要系统全然重新启动(hawq restart cluster)才干生效。server配置參数的很多其他信息。參考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进程。数据库server不会完毕事务处理,也不会清除不论什么暂时数据或使用中的工作文件。(工作文件的概念与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。
  • 假设已经改动并希望重载server參数设置,而且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数据不同步。
原文地址:https://www.cnblogs.com/cxchanpin/p/7267277.html