1. 程式人生 > >HAWQ技術解析(二) —— 安裝部署

HAWQ技術解析(二) —— 安裝部署

一、安裝規劃
1. 選擇安裝介質

        HAWQ的安裝介質有兩種選擇,一是下載原始碼手工編譯,二是使用Pivotal公司提供的HDB安裝包。原始碼的下載地址為http://apache.org/dyn/closer.cgi/incubator/hawq/2.0.0.0-incubating/apache-hawq-src-2.0.0.0-incubating.tar.gz,目前最新版本是2.0.0。原始碼編譯和安裝Apache官方文件地址為https://cwiki.apache.org/confluence/display/HAWQ/Build+and+Install
        建議初學者不要使用原始碼編譯方式,這種方法需要的依賴包很多,對作業系統、Hadoop的版本、安裝與配置也提出較高的要求。我曾嘗試在已有的CDH 5.7叢集上原始碼編譯安裝HAWQ 2.0.0,過程可謂步履維艱,一步一坎,最終還是放棄了這個失敗的安裝方案。如果想挑戰一下自己的心理承受能力或技術水平的同學,不妨嘗試這種方式。網上也有一些詳細的資料可供參考,如“
Apache HAWQ叢集的安裝部署
”和“HAWQ手動安裝”。我推薦的方式是使用HDB介質,主要原因是過程相對簡單,安裝成功率高。

2. 選擇HAWQ版本
        目前Pivotal提供的最新版本是HDB 2.1.1,該版本最主要的變化是包含了對ORC檔案格式的一些支援(Beta版),包含所有Apache HAWQ孵化專案的功能特性,並修復了一些Apache HAWQ的bug。
        在選擇HDB版本時,需要考慮它與所支援作業系統、Hadoop平臺和安裝工具Ambari的版本之間的匹配關係。表1顯示了最新的Pivotal HDB 2.1.1版本的產品支援。完整的產品支援矩陣參考http://hdb.docs.pivotal.io/211/hdb/releasenotes/HAWQ211ReleaseNotes.html#topic_g53_tgv_2v

Pivotal HDB版本

PXF版本

HDP (Pivotal HDP and Hortonworks HDP)版本

Ambari版本

HAWQ Ambari Plug-inban版本

MADlib版本

RHEL/CentOS版本

SuSE版本

2.1.1.0

3.1.1

2.5

2.4.1

2.1.1

1.9, 1.9.1

6.4+ (64-bit)

n/a

表1 HDB 2.1.1產品支援

        注意:
  • 不支援RHEL/CentOS 7。
  • Hadoop僅支援Hortonworks Data Platform(HDP)和Pivotal HDP兩種發行版本。
        本次安裝選擇最新版Pivotal HDB 2.1.1。

3. 確認Ambari與HDP的版本相容性

        安裝HDB之前首先需要安裝Ambari和Hortonworks Data Platform(HDP)。從表1看到Ambari的版本是2.4.1,HDP的版本是2.5,再次從hortonworks官方的安裝文件中確認版本相容性,相容矩陣如圖1所示。
圖1 Ambari與HDP的版本相容性
4. 實驗環境
        主機資訊如表2所示,所有主機都能連線網際網路。

主機名

IP地址

hdp1

172.16.1.124

hdp2

172.16.1.125

hdp3

172.16.1.126

hdp4

172.16.1.127

表2 主機資訊

        硬體配置:每臺主機CPU4核、記憶體8G、硬碟100G
        軟體版本如表3所示。

名稱

版本

作業系統

CentOS release 6.4 (Final) 64位

JDK

OpenJDK 64-Bit version "1.7.0_09-icedtea"

資料庫

MySQL 5.6.14

JDBC

MySQL Connector Java 5.1.38

HDP

2.5.0

Ambari

2.4.1

表3 系統軟體版本


二、安裝前準備
        整個HAWQ的安裝部署過程包括安裝Ambari、安裝HDP、安裝HAWQ三個依次進行的步驟,在實施這些步驟前需要做一些準備工作。如沒做特殊說明,所有配置或命令都用root使用者執行。
1. 參考官方文件確認最小系統需求
        作業系統:CentOS v6.x
        瀏覽器:Google Chrome 26及以上
        依賴軟體包:yum、rpm、scp、curl、unzip、tar、wget、OpenSSL (v1.01, build 16 or later)、Python 2.6.x、OpenJDK 7/8 64-bit
        系統記憶體與磁碟:Ambari主機至少應該有1G記憶體和500M剩餘磁碟空間。如果要使用Ambari Metrics,所需記憶體和磁碟依據叢集規模,如圖2所示。
圖2 資源需求與叢集規模
        最大開啟檔案描述符:推薦值大於10000。使用下面的命令檢查每個主機的當前值:
ulimit -Sn
ulimit -Hn

        如果小於10000,使用下面的命令設定成10000

ulimit -n 10000

2. 準備系統安裝環境
(1)禁用防火牆
        在安裝期間Ambari需要與部署叢集主機通訊,因此特定的埠必須開啟。最簡單的實現方式是執行下面的命令禁用防火牆:
/etc/init.d/iptables stop
chkconfig iptables off
        四臺主機都要執行。

(2)禁用SELinux
        Ambari安裝需要禁用SELinux:
setenforce 0
# 編輯/etc/selinux/config檔案,設定
SELINUX=disabled
        四臺主機都要執行。

(3)配置域名解析
        編輯/etc/hosts檔案,新增如下四行:
172.16.1.124 hdp1
172.16.1.125 hdp2
172.16.1.126 hdp3
172.16.1.127 hdp4
        四臺主機都要執行。

        注意:不要刪除檔案中原有的如下兩行,否則可能引起網路問題。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
        在hdp1上執行:
hostname hdp1
# 編輯/etc/sysconfig/network檔案,設定如下兩行:
NETWORKING=yes
HOSTNAME=hdp1
        在hdp2、hdp3、hdp4上執行類似的配置。

(4)安裝配置NTP
yum install -y ntp
chkconfig ntpd on
service ntpd start
        四臺主機都要執行。

(5)配置SSH免密碼
        為了使得Ambari Server在叢集所有主機上自動安裝Ambari Agents,必須配置Ambari Server主機到叢集其它主機的SSH免密碼連線。以下配置用於在hdp1上執行Ambari Server,在所有四臺主機上執行Ambari Agents的情況。
ssh-keygen
... 一路回車 ...
ssh-copy-id hdp1
ssh-copy-id hdp2
ssh-copy-id hdp3
ssh-copy-id hdp4
        四hdp1上執行以上命令。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
        四臺主機都要執行。

(6)安裝MySQL JDBC驅動
tar -zxvf mysql-connector-java-5.1.38.tar.gz 
cp ./mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /usr/share/java/mysql-connector-java.jar
        四臺主機都要執行。

(7)安裝MySQL資料庫
        在hdp1、hdp2上安裝MySQL,hdp1上的MySQL用於Ambari,hdp1上的MySQL用於Hive、Oozie等Hadoop元件。在hdp1、hdp2上執行以下命令。
rpm -ivh MySQL-5.6.14-1.el6.x86_64.rpm
service mysql start

(8)在hd2上的MySQL中建立資料庫使用者並授權
# mysql -u root -p
create database hive;
create database oozie;
create user 'hive'@'%' identified by 'hive';
grant all privileges on hive.* to 'hive'@'%';
create user 'oozie'@'%' identified by 'oozie';
grant all privileges on oozie.* to 'oozie'@'%';
flush privileges;

3. 建立本地Repository
        聯機安裝過程中需要從遠端的Repository中yum下載所需要的包,為了防止由於網路不穩定或遠端Repository不可用等原因導致的安裝失敗,最好配置本地Repository。在安裝HDP時,本地和遠端的Repository配合使用,既能加快安裝進度,又能補全所需的包。
(1)下載以下兩個檔案到hdp1
wget http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.5.0.0/HDP-2.5.0.0-centos6-rpm.tar.gz
wget http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.21/repos/centos6/HDP-UTILS-1.1.0.21-centos6.tar.gz

(2)在hdp1上建立一個HTTP伺服器
yum install httpd
mkdir -p /var/www/html/
cd /var/www/html/
tar -zxvf ~/HDP-2.5.0.0-centos6-rpm.tar.gz
tar -zxvf ~/HDP-UTILS-1.1.0.21-centos6.tar.gz
service httpd start

(3)新建/etc/yum.repos.d/hdp.repo檔案,新增如下行:
[hdp-2.5.0.0]
name=hdp-2.5.0.0
baseurl=http://172.16.1.124/HDP/centos6/
path=/
enabled=1
gpgcheck=0
priority=10

(4)新建/etc/yum.repos.d/hdp-utils.repo檔案,新增如下行:
[HDP-UTILS-1.1.0.21]
name=HDP-UTILS-1.1.0.21
baseurl=http://172.16.1.124/HDP-UTILS-1.1.0.21/repos/centos6
path=/
enabled=1
gpgcheck=0
priority=10

(5)下載CentOS6-Base-163.repo到/etc/yum.repos.d目錄
        安裝過程中發現本地倉庫不全,還少RPM包,因此再加一個163的源。
cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

(6)新建/etc/yum.repos.d/fedora.repo檔案,新增如下行:
[epel]
name=epel
baseurl=http://dl.fedoraproject.org/pub/epel/6/x86_64/
enabled=1
gpgcheck=0
        HAWQ的Repository中缺少libgsasl庫,需要再加一個包含libgsasl庫的源。

(7)將新建的Repository配置檔案複製到其它主機
scp /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/
scp /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/
scp /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/

三、安裝Ambari
        Ambari跟Hadoop等開源軟體一樣,也是Apache Software Foundation中的一個專案,並且是頂級專案。目前最新的釋出版本是 2.4.2。就Ambari的作用來說,就是建立、管理、監視Hadoop的叢集。但是這裡的Hadoop是廣義的,指的是Hadoop整個生態圈(例如 Hive、Hbase、Sqoop、Zookeeper等等),而並不僅是特指Hadoop。用一句話來說,Ambari就是讓Hadoop 以及相關的大資料軟體更容易使用的一個工具。
        Ambari主要具有以下功能特性:
  • 通過一步一步的安裝嚮導簡化了叢集部署。
  • 預先配置好關鍵的運維指標(metrics),可以直接檢視Hadoop Core(HDFS和MapReduce)及相關專案(如HBase、Hive和HCatalog)是否健康。
  • 支援作業與任務執行的視覺化與分析,能夠更好地檢視依賴和效能。
  • 通過一個完整的RESTful API把監控資訊暴露出來,集成了現有的運維工具。
  • 使用者介面非常直觀,使用者可以輕鬆有效地檢視資訊並控制叢集。
        Ambari使用Ganglia收集度量指標,用Nagios支援系統報警,當需要引起管理員的關注時(比如,節點停機或磁碟剩餘空間不足等問題),系統將向其傳送郵件。此外,Ambari能夠安裝安全的(基於Kerberos)Hadoop叢集,以此實現了對Hadoop 安全的支援,提供了基於角色的使用者認證、授權和審計功能,併為使用者管理集成了LDAP和Active Directory。
        Ambari自身也是一個分散式架構的軟體,主要由兩部分組成:Ambari Server和Ambari Agent。簡單來說,使用者通過Ambari Server通知Ambari Agent安裝對應的軟體,Agent會定時地傳送各個機器每個軟體模組的狀態給Ambari Server,最終這些狀態資訊會呈現在Ambari的 GUI,方便使用者瞭解到叢集的各種狀態,並進行相應的維護。下面詳細說明Ambari的安裝。

1. 下載Ambari repository到hdp1
(1)下載Ambari repository檔案
wget -nv http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.4.1.0/ambari.repo -O /etc/yum.repos.d/ambari.repo
        注意:檔名必須是ambari.repo,當Ambari Agent註冊到Ambari Server時需要此檔案。

(2)確認Repository配置
yum repolist | grep amba

        應該看到類似圖3所示的資訊


圖3 檢視Ambari repository
(3)安裝Ambari Server
yum install ambari-server
        這步也會安裝Ambari預設使用的PostgreSQL資料庫。出現提示符時輸入y,確認事務和依賴檢查。

2. 為Ambari配置MySQL資料庫
(1)在hdp1上的MySQL中建立Ambari資料庫使用者並授權
# mysql -u root -p
create user 'ambari'@'%' identified by 'ambari';
grant all privileges on *.* to 'ambari'@'%';
flush privileges;

(2)建立Ambari Server資料庫模式
# mysql -u ambari -p
create database ambari;
use ambari;
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;

3. 配置Ambari Server
        啟動Ambari Server前必須進行配置,指定Ambari使用的資料庫、安裝JDK、定製執行Ambari Server守護程序的使用者等。在hdp1上執行下面的命令管理配置過程。
ambari-server setup
  • Customize user account for ambari-server daemon提示時輸入n,使用root使用者執行Ambari Server。
  • 選擇JDK 1.7。
  • Enter advanced database configuration提示時輸入y,選擇Option [3] MySQL/MariaDB,然後根據提示輸入連線MySQL的使用者名稱、密碼和資料庫名,這裡均為ambari。
4. 啟動Ambari Server
        在hdp上執行下面的命令啟動Ambari Server:
ambari-server start
# 檢視Ambari Server程序狀態
ambari-server status

        至此,Ambari安裝完成

四、安裝、配置、部署HDP叢集
        Hortonworks Data Platform是Hortonworks公司開發的Hadoop資料平臺。Hortonworks由Yahoo的工程師建立,它為Hadoop提供了一種“service only”的分發模型。有別於其它商業化的Hadoop版本,Hortonworks是一個可以自由使用的開放式企業級資料平臺。其Hadoop發行版本即HDP,可以被自由下載並整合到各種應用當中。
        Hortonworks是第一個提供基於Hadoop 2.0版產品的廠商,也是目前唯一支援Window平臺的Hadoop分發版本。使用者可以通過HDInsight服務,在Windows Azure上部署Hadoop叢集。HDP的特性如下:
  • HDP通過其新的Stinger專案,使Hive的執行速度更快。
  • HDP承諾是一個Apache Hadoop的分支版本,對專有程式碼的依賴極低,避免了廠商鎖定。
  • 專注於提升Hadoop平臺的可用性。
        下面說明在瀏覽器中使用Ambari的安裝嚮導互動式安裝、配置、部署HDP。

1. 在瀏覽器中登入Ambari
http://172.16.1.124:8080,初始的使用者名稱/密碼為admin/admin。在歡迎頁面點選“Launching Install Wizard”,如圖4所示。
圖4
2. 給叢集命名
        叢集名稱中不要有空格和特殊字元,然後點選“Next”。

3. 選擇HDP版本
        選擇2.5.0.0,如圖5所示。


圖5


4. 選擇Repositories
        選擇Use Public Repositories,然後點選“Next”。

5. 安裝選項
  • Target Hosts編輯框中輸入四個主機名,每個一行。
hdp1
hdp2
hdp3
hdp4
  • 點選“Choose File”按鈕,選擇“準備系統安裝環境”第(5)步中hdp1上生成的私鑰檔案id_rsa。
  • 使用者名稱root,埠22
  • 選擇“Register and Confirm”
6. 確認主機
        選中四臺主機,點選“Next”。

7. 選擇服務
        根據需要選擇服務,點選“Next”。

8. 標識Masters
        根據需要選擇Masters,點選“Next”。

9. 標識Slaves和Clients
        根據需要選擇Slaves和Clients,點選“Next”。

10. 定製服務
  • 為hive和oozie配置MySQL資料庫連線。
  • 設定所需的密碼。
  • 其它保持預設。
11. 複查確認
        選擇“Deploy”。

12. 安裝、啟動與測試
        此時顯示安裝進度頁面。Ambari對HDP的每個元件執行安裝、啟動和簡單的測試。不要重新整理瀏覽器,等待部署過程完全執行成功。當出現“Successfully installed and started the services”時,選擇“Next”。

13. 完成
        彙總頁面顯示完成的任務列表。選擇“Complete”,顯示Ambari Web GUI主頁面。

        至此,HDP安裝完成。

五、安裝HAWQ
1. 選擇HAWQ主機

        在安裝HAWQ之前,使用下面的步驟選擇和準備所需主機。
(1)選擇作為HAWQ segment的主機。記住有以下限制:
  • 每臺主機都必須滿足安裝相應版本HAWQ的系統要求。
  • 每個HAWQ segment所在主機必須和其上執行的HDFS DataNode協同工作。
  • HAWQ master segment和standby master segment必須部署在不同的主機上。
        在本實驗環境中,叢集中的四臺主機均作為HAWQ segment,其中兩臺分別作為master和standby,在安裝時Ambari會自動部署主機。
(2)選擇執行PXF的主機。記住有以下限制:
  • PXF必須安裝在HDFS NameNode和所有HDFS DataNodes主機上。
  • 如果配置了Hadoop HA,PXF必須安裝在包括所有NameNode和所有HDFS Node的主機上。
  • 如果想通過PXF訪問HBase和Hive,必須在將要安裝PXF的主機上首先安裝HBase和Hive的客戶端。
        在本實驗環境中,叢集中的四臺主機均安裝PXF,在安裝時Ambari會自動部署主機。(在前面部署HDP時,已經在所有四臺機器上安裝了客戶端程式。)
(3)確認所有主機上的所需埠沒有被佔用
        HAWQ master和standby master服務預設使用5432埠。前面安裝Ambari是使用的是MySQL資料庫儲存元資料,而不是預設的PostgreSQL,所以本次安裝中不存在埠衝突問題。

2. 建立HDB軟體的Repositories
        在安裝HDB前必須建立兩個本地yum repositories。在執行Ambari server的主機上(hdp1)以root使用者執行下面的步驟。這臺主機(稱為repo-node)必須能夠訪問HAWQ叢集的所有節點。
(1)重啟httpd伺服器
service httpd [re]start
(2)從https://network.pivotal.io/products/pivotal-hdb下載名為hdb-2.1.1.0-7.tar的HDB安裝檔案。
(3)建立一個臨時目錄儲存解壓後的的HDB安裝包。執行httpd程序的作業系統使用者(本此安裝中是root)必須對該目錄及其所有上級目錄具有可讀可執行的許可權。
mkdir /staging
chmod a+rx /staging
        注意:不要使用/tmp目錄,/tmp下的檔案可能在任意時間被刪除。
(4)HDB安裝檔案中包含一個yum repository。解壓HDB安裝檔案後,執行setup_repo.sh指令碼,將HDB軟體的釋出包新增到本地yum包的repository中。
cd /staging
tar -zxvf hdb-2.1.1.0-7.tar
cd hdb-2.1.1.0
./setup_repo.sh
        setup_repo.sh在本地建立一個名為hdb-2.1.1.0.repo的HDB repository,並且在httpd伺服器的根目錄(預設為/var/www/html)下建立一個符號連結指向hdb-2.1.1.0-7.tar的解壓縮目錄。在本次安裝中為:/var/www/html/hdb-2.1.1.0 -> /staging/hdb-2.1.1.0
(5)在HAWQ叢集的所有節點上安裝epel-release包
yum install -y epel-release

3. 使用Ambari安裝HAWQ
(1)用root使用者登入Ambari server主機(hdp1)。
(2)從HDB repository安裝HAWQ Ambari外掛。
yum install -y hawq-ambari-plugin
        以上命令會建立/var/lib/hawq目錄,並將所需的指令碼和模板檔案安裝到該目錄中。
(3)重啟Ambari伺服器。
ambari-server restart
(4)執行add-hawq.py指令碼將HDB repository新增到Ambari伺服器中。
cd /var/lib/hawq
./add-hawq.py --user admin --password admin --stack HDP-2.5
        注意:提供正確的Ambari管理員使用者名稱/密碼,預設為admin/admin。
(5)重啟Ambari伺服器。
ambari-server restart
(6)登入Ambari web控制檯。
http://172.16.1.124:8080,預設的使用者名稱/密碼為admin/admin,確認HAWQ服務已經可用。
(7)選擇HDFS -> Configs標籤。
(8)配置HDFS。
  • 選擇Settings標籤,修改DataNode max data transfer threads為40960。
  • 選擇Advanced標籤,點開DataNode,設定DataNode directories permission為750。
  • 點開General,設定Access time precision為0。
  • 點開Advanced hdfs-site,設定表4所示屬性的值,如果屬性不存在,則選擇Custom hdfs-site,點選Add property… 新增屬性並設定表中所示的值。

Property

Setting

dfs.allow.truncate

true

dfs.block.access.token.enable

false for an unsecured HDFS cluster, or true for a secure cluster

dfs.block.local-path-access.user

gpadmin

HDFS Short-circuit read

true

dfs.client.socket-timeout

300000000

dfs.client.use.legacy.blockreader.local

false

dfs.datanode.handler.count

60

dfs.datanode.socket.write.timeout

7200000

dfs.namenode.handler.count

600

dfs.support.append

true

表4 hdfs-site屬性
(9)點開Advanced core-site,設定表5所示屬性的值,如果屬性不存在,則選擇Custom core-site,點選Add property… 新增屬性並設定表中所示的值。

Property

Setting

ipc.client.connection.maxidletime

3600000

ipc.client.connect.timeout

300000

ipc.server.listen.queue.size

3300

表5 core-site屬性
(10)點選Save儲存配置。
(11)如果Ambari提示需要重啟,在繼續後面的步驟前先點選Restart重啟服務。
(12)在主頁選擇Actions > Add Service。
(13)從服務列表選擇HAWQ和PXF,點選Next,顯示Assign Masters頁。
(14)選擇HAWQ Master和HAWQ Standby Master的主機,或接受預設值,點選Next顯示Assign Slaves and Clients頁。
(15)選擇執行HAWQ segments和PXF的主機,或接受預設值,點選Next。Add Service助手會基於可用的Hadoop服務自動為HAWQ選擇主機。
        注意:PXF必須安裝在NameNode、Standby NameNode和每一個DataNode節點上,而HAWQ segment必須安裝在每個DataNode節點上。
(16)在Customize Services頁面接受預設設定。
(17)點選Advanced標籤,輸入HAWQ系統使用者口令,點選Next。
(18)在後面的頁面均接受預設值,連續點選Next。
(19)最後點選Complete。如果Ambari提示叢集上的元件需要重啟,選擇Restart > Restart All Affected重啟所有受影響的服務。
(20)驗證HAWQ安裝。
        用gpadmin使用者登入HAWQ master所在主機,執行下面的命令:
# 設定HAWQ環境變數
source /usr/local/hawq/greenplum_path.sh
psql -d postgres
create database test;
\c test
create table t (i int);
insert into t select generate_series(1,100);
\timing
select count(*) from t;
        結果如圖6所示。
圖6 驗證HAWQ安裝
參考:
http://hdb.docs.pivotal.io/
https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.5.0/index.html