[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运行时和配置文件 |
/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所示。
图1select pg_cancel_backend(354310);取消354310进程。不能取消自己本身的会话,错误信息如图2所示。
图21. 启动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 -u4. 以维护模式启动主节点 可以只启动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数据不同步。
新闻热点
疑难解答