[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目錄下??梢栽诿钚休斎雋awq -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所示。
圖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的方式分別啟動節點,確??偸窃趩觤aster節點之前啟動standby節點,否則standby可能與master數據不同步。
新聞熱點
疑難解答