目录
(7)将新建的 Repository 配置文件复制到其他主机
一、安装规划
1. 选择安装介质
HAWQ 的安装介质有两种选择,一是下载源码手工编译,二是使用 Pivotal 公司提供的 HDB 安装包。源码的下载地址为“Apache Download Mirrors”,目前最新版本是 2.0.0。源码编译和安装 Apache 官方文档地址为“Build and Install - Apache HAWQ - Apache Software Foundation”。
建议初学者不要使用源码编译方式,这种方法需要的依赖包很多,对操作系统、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 主机信息
硬件配置:每台主机 CPU 4核、内存 8GB、硬盘100GB
软件版本如表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 主机至少应该有 1GB 内存和 500MB 剩余磁盘空间。如果要使用 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。执行下面的命令禁用 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 上执行下面的命令修改主机名,在 hdp2、hdp3、hdp4 上执行类似的配置。
hostname hdp1
# 编辑/etc/sysconfig/network文件,设置如下两行:
NETWORKING=yes
HOSTNAME=hdp1
(4)安装配置 NTP
执行下面的命令启动 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 的情况。
在 hdp1上执行以下命令生成密钥对,并将公钥拷贝到所有四台主机。
ssh-keygen
... 一路回车 ...
ssh-copy-id hdp1
ssh-copy-id hdp2
ssh-copy-id hdp3
ssh-copy-id hdp4
执行下面的命令设置 SSH 目录和公钥文件的权限,四台主机都要执行。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
(6)安装 MySQL JDBC 驱动
执行下面的命令安装 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,hdp2 上的 MySQL 用于 Hive、Oozie 等 Hadoop 组件。在 hdp1、hdp2 上执行以下命令。
rpm -ivh MySQL-5.6.14-1.el6.x86_64.rpm
service mysql start
(8)建立数据库用户并授权
在 hdp2 上的 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)建立 HTTP 服务器
执行下面的命令在 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)创建 hdp 资源库文件
新建 /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)创建 hdp-utils 资源库文件
新建 /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)创建 fedora 资源库文件
新建 /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/* root@hdp2:/etc/yum.repos.d/
scp /etc/yum.repos.d/* root@hdp3:/etc/yum.repos.d/
scp /etc/yum.repos.d/* root@hdp4:/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 数据库
在 hdp1 上执行下面的操作步骤。
(1)建立 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
在 hdp1 上执行下面的命令启动 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)从“Home - Support Portal - Broadcom support portal”下载名为 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 安装