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

本文介绍了HAWQ的用户管理、系统部署、操作环境设置及集群的启动、停止和重启等基本管理操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、基础概念

1. HAWQ 用户

2. HAWQ 系统部署

二、HAWQ 操作环境

1. 设置 HAWQ 操作环境

2. HAWQ 文件与目录

三、启动和停止 HAWQ

1. 启动 HAWQ

2. 重启 HAWQ

3. 只重新加载配置文件

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

5. 停止 HAWQ

6. 启动/停止 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。实验环境与安装过程参见“HAWQ 技术解析(二) —— 安装部署”。

二、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 数据不同步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值