Ambari 与 Hadoop 大数据平台

本文合并自:04-Ambari部署Hadoop.md、3-6-Ambari与Hadoop大数据平台.md

适用环境:CentOS 7.3

架构:Ambari Server + Ambari Agent + Hadoop(HDP)集群

本文覆盖 Ambari 的作用与优势、Hadoop 发行版区别、五节点集群规划、前置环境准备、本地离线 yum 源搭建、MariaDB 元数据库准备、ambari-server 安装与 setup、Web 向导安装 HDP 集群、安装后验证、日常运维与排错。

手工逐个部署 Hadoop(HDFS/YARN 配置文件级别的安装)请参见 16-02-Hadoop架构与安装部署.md,本文只讲 Ambari 自动化部署。


1. Ambari 概述

1.1 为什么需要 Ambari

Hadoop 是一个分布式存储与计算的大数据平台,生态包含 HDFS、YARN、MapReduce、Hive、HBase、ZooKeeper、Kafka、Spark 等众多组件。手动逐个部署、配置这些组件,需要在每个节点上分发安装包、编辑十几个 XML 配置文件、维护主机列表,步骤繁琐且极容易出错;后续修改一个参数还要手工同步到所有节点并逐个重启服务。

Apache Ambari 是一个用于供应(Provision)、管理(Manage)和监控(Monitor)Hadoop 集群的 Web 工具,它把上述工作全部图形化、自动化。

1.2 Ambari 的核心作用

  • 部署:提供一步一步的图形安装向导,自动在多台主机上分发并部署 HDP(Hortonworks Data Platform)各组件,自动生成配置文件;
  • 管理:集中管理集群配置,所有节点配置由 Server 统一下发,支持配置版本化(Config Version)与一键回滚;
  • 监控:提供 Dashboard 展示集群健康状态、容量、指标图表(Ambari Metrics),内置数十条告警规则;
  • 运维:支持在界面上启停/重启服务、滚动重启、添加服务、添加主机、下线(Decommission)主机、Kerberos 安全集成、Ranger 权限集成等。

1.3 与手工部署的对比优势

维度 手工部署 Ambari 部署
安装方式 逐节点解压、改配置、分发 Web 向导一次下发到所有节点
配置一致性 靠人工 scp 同步,易漂移 Server 统一下发,天然一致
配置变更 手工改 + 手工重启 界面改 + 提示需重启的组件,可滚动重启
配置回滚 靠自己备份文件 内置配置版本,一键回滚
监控告警 需另建 Zabbix/Prometheus 内置 Metrics + Alerts
扩容 重复一遍全部安装步骤 Add Host 向导,几分钟完成
排错 逐台 grep 日志 界面上点开失败任务看 stdout/stderr
学习成本 高,需理解每个配置项 低,但仍需理解组件原理

结论:教学与生产环境都推荐 Ambari;手工部署适合用来理解 Hadoop 内部原理(见 16-02-Hadoop架构与安装部署.md)。

1.4 Ambari 自身架构

  • Ambari Server:只装在一台管理节点(本文为 master),提供 8080 端口的 Web/REST 服务,所有集群元数据存放在关系型数据库中(PostgreSQL 内嵌或外置 MySQL/MariaDB);
  • Ambari Agent:安装在每一台被管理节点上,向 Server 注册并定期发送心跳(heartbeat),接收 Server 下发的命令(安装包、写配置、启停进程);
  • Ambari Web:浏览器端界面,本质是调用 Ambari REST API。

2. Hadoop 发行版说明

发行版 提供方 特点
Apache Hadoop Apache 社区 原生开源版本,纯净、免费;但各生态组件版本兼容需自己验证,无统一管理工具,部署运维全手工
HDP(Hortonworks Data Platform) Hortonworks 完全开源,不含闭源组件;对生态组件做版本兼容整合并打成 RPM 仓库;配套管理工具是 Ambari
CDH(Cloudera Distribution Hadoop) Cloudera 商业发行版,稳定性与文档好;配套管理工具是 Cloudera Manager,部分高级功能收费

要点:

  • HDP 与 Ambari 的关系:Ambari 是 HDP 的官方部署管理工具,Ambari 通过读取 HDP 仓库(yum repo)中的 RPM 包完成安装。Ambari 自身也有独立的 yum 仓库,二者是两套仓库:ambari 仓库用于安装 ambari-server / ambari-agent,HDP 与 HDP-UTILS 仓库用于安装 Hadoop 各组件。
  • Hortonworks 与 Cloudera 已合并,新产品线为 CDP;但 HDP 2.6 + Ambari 2.5/2.6 组合在教学与存量环境中仍非常常见,本文以此为例。
  • 本文部署的是 HDP 2.6,Ambari 版本 2.5.1.0。

3. 集群规划

3.1 角色与主机

            hadoopmaster        hadoopbackup

 hadoopslave1     hadoopslave2     hadoopslave3

准备五台 CentOS 7.3 虚拟机(KVM):

角色 主机名 IP 承载内容
Master master.cluster.com 10.1.1.2 ambari-server、MariaDB 元数据库、NameNode、ResourceManager 等主组件
Backup backup.cluster.com 10.1.1.3 Secondary NameNode / 备用主节点、部分 master 组件
Slave1 slave1.cluster.com 10.1.1.4 DataNode、NodeManager
Slave2 slave2.cluster.com 10.1.1.5 DataNode、NodeManager
Slave3 slave3.cluster.com 10.1.1.6 DataNode、NodeManager

另有一台 10.1.1.1 作为离线仓库服务器(httpd),提供 CentOS 镜像源、ambari 源、HDP 与 HDP-UTILS 源、JDK 安装包。

3.2 硬件与系统要求

  • 操作系统:CentOS 7.3(RedHat 7 系列);
  • 磁盘:≥ 20G;
  • 内存:≥ 1.5G(教学最低配置;生产环境 master 建议 ≥ 8G,slave 建议 ≥ 16G);
  • 尽量不使用图形模式(Minimal 安装),以节省内存与磁盘资源;
  • 所有节点网络互通,主机名可正向/反向解析。

4. 前置环境准备

以下 4.1 ~ 4.9 除特别说明外,五台机器全部都要做。这一章是 Ambari 部署成功率的关键,任何一项遗漏都可能导致后续主机注册失败或服务启动失败。

4.1 配置静态 IP

配置静态 IP,并关闭 NetworkManager、设置开机不启动(避免 NetworkManager 覆盖静态配置):

systemctl stop NetworkManager
systemctl disable NetworkManager

4.2 主机名配置与 hosts 绑定

五台机器都要设置主机名并互相绑定,多检查几遍不要写错(主机名错误是注册失败最常见的原因):

hostnamectl set-hostname --static master.cluster.com

其余节点分别设置为 backup.cluster.com、slave1.cluster.com、slave2.cluster.com、slave3.cluster.com。

五台机器的 /etc/hosts 内容必须完全一致:

10.1.1.2    master.cluster.com
10.1.1.3    backup.cluster.com
10.1.1.4    slave1.cluster.com
10.1.1.5    slave2.cluster.com
10.1.1.6    slave3.cluster.com

验证:

hostname -f          # 应输出 FQDN,如 master.cluster.com
ping -c 2 slave3.cluster.com

注意:Ambari 要求使用 FQDN(完全限定域名),不要使用短主机名;也不要把主机名解析到 127.0.0.1。

4.3 时间同步(NTP)

NTP 服务必须开启,并设置开机自启动(五台都要做)。集群各节点时间不一致会导致 Agent 心跳异常、HBase/ZooKeeper 报错。

yum install ntp -y
systemctl start ntpd
systemctl enable ntpd

验证:

ntpq -p
timedatectl

4.4 关闭防火墙与 SELinux

firewalld 和 iptables 最好都关闭;SELinux 设置为开机自动关闭:

systemctl stop firewalld
systemctl disable firewalld
iptables -F
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

也可直接编辑 /etc/selinux/config:

SELINUX=disabled

验证(setenforce 0 只在当前生效,改配置文件才能开机生效):

getenforce           # 应输出 Disabled 或 Permissive
systemctl is-enabled firewalld

4.5 关闭 THP(透明大页)

透明大页(Transparent Huge Pages)会导致 Hadoop/HBase 出现不可预期的性能抖动,Ambari 安装检查也会给出告警,建议关闭:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

写入 /etc/rc.local 使其开机生效,并给 rc.local 加执行权限:

cat >> /etc/rc.local <<'EOF'
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local

验证:

cat /sys/kernel/mm/transparent_hugepage/enabled
# always madvise [never]

4.6 修改文件描述符与进程数限制

Hadoop 组件会打开大量文件与网络连接,默认的 1024 远远不够(Ambari 要求 ≥ 10000):

cat >> /etc/security/limits.conf <<'EOF'
* soft nofile 65536
* hard nofile 65536
* soft nproc  65536
* hard nproc  65536
EOF

CentOS 7 还需注意 /etc/security/limits.d/20-nproc.conf 中的默认 nproc 限制会覆盖上面的设置,需同步调整。

临时生效与验证:

ulimit -n 65536
ulimit -a

修改后需重新登录 shell 才生效;systemd 管理的服务还需在 unit 文件中设置 LimitNOFILE。

4.7 设置 umask

Ambari 要求 root 的 umask 为 0022(或不高于 0027),否则安装出来的目录权限不足,组件启动会失败:

umask 0022
echo "umask 0022" >> /etc/profile

验证:

umask
# 0022

4.8 配置 yum 源

五台都配置,包含本地 ISO 镜像源及以下两个源(本地仓库的搭建见第 5 章)。

/etc/yum.repos.d/ambari.repo(文件名必须是 ambari.repo,Ambari 安装检查会按此文件名查找):

[ambari]
name=ambari
baseurl=http://10.1.1.1/ambari/
enabled=1
gpgcheck=0

/etc/yum.repos.d/centos163.repo:

[centos163]
name=centos163
baseurl=http://10.1.1.1/centos163/
enabled=1
gpgcheck=0

刷新缓存:

yum clean all
yum makecache fast

验证:

yum repolist
yum list ambari-server

4.9 准备 JDK

五台都要安装 JDK(Ambari 要求所有节点的 JAVA_HOME 路径一致):

wget http://10.1.1.1/devops/ambari_jdk/jdk-8u112-linux-x64.tar.gz
tar xf jdk-8u112-linux-x64.tar.gz -C /usr/local/
ls /usr/local/jdk1.8.0_112/

输出示例:

bin        include         lib      README.html  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  javafx-src.zip  LICENSE  release      THIRDPARTYLICENSEREADME.txt
db         jre             man      src.zip

记下 JAVA_HOME 路径为 /usr/local/jdk1.8.0_112/,后面 ambari-server setup 时要填写。

可选:写入环境变量便于命令行使用。

cat >> /etc/profile <<'EOF'
export JAVA_HOME=/usr/local/jdk1.8.0_112
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile
java -version

如果计划使用 Kerberos,还需在所有节点安装 JCE(Java Cryptography Extension)无限强度策略文件。


5. 配置五台机器互相免密登录

Ambari Server 需要通过 SSH 免密登录到所有节点去安装 Ambari Agent,因此 Ambari Server 到所有节点的 SSH 免密是必需的。本文按讲义做法配置五台机器两两互信(Hadoop 组件间的部分脚本也会用到)。

5.1 五台生成空密码密钥

五台都用 root 用户执行:

ssh-keygen

一路回车,生成空密码密钥(/root/.ssh/id_rsa 与 /root/.ssh/id_rsa.pub)。

5.2 在 master 上汇总公钥

只在 master 上做:

cd /root/.ssh/
scp backup.cluster.com:`pwd`/id_rsa.pub  backup.pub
scp slave1.cluster.com:~/.ssh/id_rsa.pub  slave1.pub
scp slave2.cluster.com:/root/.ssh/id_rsa.pub  slave2.pub
scp slave3.cluster.com:/root/.ssh/id_rsa.pub  /root/.ssh/slave3.pub

上面四句 scp 意思一样,只是路径写法不同(反引号 `pwd` 也可写成 $(pwd))。

将所有公钥合并为 authorized_keys:

cat id_rsa.pub backup.pub slave1.pub slave2.pub slave3.pub >> authorized_keys

若 authorized_keys 是新建的,用 > 或 >> 均可;已有内容时用 >> 追加以免覆盖。

分发到其它四台:

scp authorized_keys backup.cluster.com:`pwd`/
scp authorized_keys slave1.cluster.com:`pwd`/
scp authorized_keys slave2.cluster.com:`pwd`/
scp authorized_keys slave3.cluster.com:`pwd`/

权限要求(否则免密不生效):

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

5.3 首次登录确认

五台机器全部 ssh 登录一次,主要是把首次登录的 yes 确认输入,以后就不再提示。

先在 master 上执行:

ssh master.cluster.com
exit
ssh backup.cluster.com
exit
ssh slave1.cluster.com
exit
ssh slave2.cluster.com
exit
ssh slave3.cluster.com     # 第一次登录输入 yes
exit

同样的十条 ssh 验证命令(五次 ssh + 五次 exit)在其它四台机器上都要执行一遍。

目的:将首次登录的 yes 确认写入 /root/.ssh/known_hosts。当机器数量特别多时,可以通过 shell 脚本批量分发 known_hosts,或用 Puppet / Ansible 等配置管理工具完成,也可在 /etc/ssh/ssh_config 中设置 StrictHostKeyChecking no。


6. 本地 yum 源搭建(离线部署关键)

HDP 与 Ambari 的公网源在国内下载极慢,且生产环境往往无外网,因此离线本地源是 Ambari 部署的关键前置条件。本章在仓库服务器 10.1.1.1 上完成。

6.1 需要准备的离线包

仓库 内容 发布路径
centos163 CentOS 7 基础包(或本地 ISO 镜像源) http://10.1.1.1/centos163/
ambari ambari-server、ambari-agent 等 RPM http://10.1.1.1/ambari/
HDP Hadoop 生态各组件 RPM(HDP 2.6) http://10.1.1.1/hdp
HDP-UTILS HDP 依赖的工具包(如 snappy、nagios 依赖等) http://10.1.1.1/hdp-util
JDK jdk-8u112-linux-x64.tar.gz http://10.1.1.1/devops/ambari_jdk/

官方 tarball 下载地址形如(能联网时预先下载):

# Ambari 2.5.1.0 for CentOS 7
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.5.1.0/ambari-2.5.1.0-centos7.tar.gz
# HDP 2.6
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.6.x.x/HDP-2.6.x.x-centos7-rpm.tar.gz
# HDP-UTILS
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.21/repos/centos7/HDP-UTILS-1.1.0.21-centos7.tar.gz

6.2 用 httpd 提供仓库

在 10.1.1.1 上安装并启动 httpd:

yum install httpd createrepo -y
systemctl start httpd
systemctl enable httpd

解压离线包到 httpd 根目录 /var/www/html/:

mkdir -p /var/www/html/{ambari,hdp,hdp-util,centos163,devops/ambari_jdk}

tar zxf ambari-2.5.1.0-centos7.tar.gz       -C /var/www/html/ambari/
tar zxf HDP-2.6.x.x-centos7-rpm.tar.gz      -C /var/www/html/hdp/
tar zxf HDP-UTILS-1.1.0.21-centos7.tar.gz   -C /var/www/html/hdp-util/
cp jdk-8u112-linux-x64.tar.gz               /var/www/html/devops/ambari_jdk/

如果解压出来的目录中没有 repodata,需要自己生成仓库元数据:

createrepo /var/www/html/ambari/
createrepo /var/www/html/hdp/
createrepo /var/www/html/hdp-util/
createrepo /var/www/html/centos163/

放开权限并验证 HTTP 可访问:

chmod -R 755 /var/www/html/
curl -I http://10.1.1.1/ambari/
curl http://10.1.1.1/hdp/ | head

常见坑:httpd 未关闭 SELinux 时会拒绝访问 /var/www/html 下的文件;确认 getenforce 为 Disabled,或执行 restorecon -R /var/www/html。

6.3 客户端 repo 文件配置

五台节点上写入 ambari.repo 与 centos163.repo(内容见 4.8 节),然后:

yum clean all
yum makecache fast
yum repolist

HDP 与 HDP-UTILS 两个仓库不需要手工写 repo 文件——在第 8 章的 Web 安装向导中选择 Local Repository 并填入 URL 后,Ambari 会自动在所有节点生成 /etc/yum.repos.d/HDP.repo 与 /etc/yum.repos.d/HDP-UTILS.repo。


7. 安装 Ambari Server

只在 master 上操作,其它服务器不做。

7.1 安装元数据库(MariaDB)

Ambari Server 需要一个关系型数据库存放集群元数据,可选:

  • PostgreSQL(Embedded):内嵌数据库,setup 时选 [1],无需任何准备,适合测试环境;
  • MySQL / MariaDB(外置):生产推荐,便于备份与主备,本文采用。

只在 master 上安装 MariaDB,其它服务器不装。同时必须安装 JDBC 驱动 mysql-connector-java:

yum install mariadb mariadb-server mysql-connector-java -y
systemctl start mariadb
systemctl status mariadb
systemctl enable mariadb

7.2 建库与授权

mysql
create database ambari;
grant all on ambari.* to ambari@'master.cluster.com' identified by 'bigdata';
flush privileges;
quit

执行回显示例:

MariaDB [(none)]> create database ambari;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on ambari.* to ambari@'master.cluster.com' identified by 'bigdata';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

库名(ambari)、用户名(ambari)、授权主机名(master.cluster.com)、密码(bigdata)必须与下一步 ambari-server setup 中的数据库配置一一对应,否则连接失败。

7.3 安装 ambari-server

yum install ambari-server -y

7.4 导入 Ambari 元数据(DDL)

安装完 ambari-server 后才会有导入用的 SQL 文件。连接数据库导入建表脚本:

mysql
use ambari;
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql

回显:

MariaDB [(none)]> use ambari;
Database changed
MariaDB [ambari]> source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql

也可以直接用 ambari 用户登录导入:

mysql -uambari -pbigdata ambari
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;
quit

若使用内嵌 PostgreSQL,则不需要这一步,ambari-server setup 会自动建库建表。

7.5 运行 ambari-server setup

ambari-server setup

完整交互过程如下:

Using python  /usr/bin/python
Setup ambari-server
Checking SELinux...
SELinux status is 'disabled'
Customize user account for ambari-server daemon [y/n] (n)? y
Enter user account for ambari-server daemon (root):
Adjusting ambari-server permissions and ownership...
Checking firewall status...
Checking JDK...
[1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
[2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7
[3] Custom JDK
==============================================================================
Enter choice (1): 3
WARNING: JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts.
WARNING: JCE Policy files are required for configuring Kerberos security. If you plan to use Kerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all hosts.
Path to JAVA_HOME: /usr/local/jdk1.8.0_112/
Completing setup...
Configuring database...
Enter advanced database configuration [y/n] (n)? y
Configuring database...
==============================================================================
Choose one of the following options:
[1] - PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL / MariaDB
[4] - PostgreSQL
[5] - Microsoft SQL Server (Tech Preview)
[6] - SQL Anywhere
[7] - BDB
==============================================================================
Enter choice : 3
Hostname (localhost): master.cluster.com
Port (3306):
Database name (ambari):
Username (ambari):
Enter Database Password (bigdata):
Configuring ambari database...
Configuring remote database connection properties...
WARNING: Before starting Ambari Server, you must run the following DDL against the database to create the schema: /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
Proceed with configuring remote database connection properties [y/n] (y)? y
Extracting system views...
ambari-admin-2.5.1.0.159.jar
...........
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.

交互选项汇总与关键选择说明:

提示项 输入 说明
Customize user account for ambari-server daemon y 自定义运行用户
Enter user account root 前面的 SSH 免密都是 root 做的,必须用 root
JDK choice 3 Custom JDK,避免在线下载 Oracle JDK
Path to JAVA_HOME /usr/local/jdk1.8.0_112/ 对应前面解压路径,所有节点必须一致
Advanced database configuration y 使用外置数据库必须选 y
Database choice 3 MySQL / MariaDB
Hostname master.cluster.com 与 grant 授权的主机名一致
Port 默认 3306 直接回车
Database name ambari 与建库名一致
Username ambari 与授权用户一致
Password bigdata 与授权密码一致
Proceed with configuring remote database... y 确认
  • 关于 "Before starting Ambari Server, you must run the following DDL..." 的警告可以无视,因为 7.4 已经导入过 SQL;
  • 如需重新配置,可再次执行 ambari-server setup;重置数据库可用 ambari-server reset(会清空元数据,慎用)。

7.6 启动 Ambari Server

只在 master 上操作:

ambari-server start

回显:

Using python  /usr/bin/python
Starting ambari-server
Ambari Server running with administrator privileges.
Organizing resource files at /var/lib/ambari-server/resources...
Ambari database consistency check started...
Server PID at: /var/run/ambari-server/ambari-server.pid
Server out at: /var/log/ambari-server/ambari-server.out
Server log at: /var/log/ambari-server/ambari-server.log
Waiting for server start................................
Server started listening on 8080

DB configs consistency check: no errors and warnings were found.
Ambari Server 'start' completed successfully.

查看状态:

ambari-server status
Using python  /usr/bin/python
Ambari-server status
Ambari Server running
Found Ambari Server PID: 5086 at: /var/run/ambari-server/ambari-server.pid

确认 8080 端口已监听:

lsof -i:8080
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    5086 root 1444u  IPv6  37904      0t0  TCP *:webcache (LISTEN)

设置开机自启动:

systemctl enable ambari-server

8. Web 界面安装集群向导

8.1 浏览器访问与登录

通过浏览器访问 master 的 8080 端口:

http://10.1.1.2:8080
  • 用户名:admin
  • 密码:admin

(对应截图 ambari01.png,位于笔记目录 /devops/png/ 下)

首次登录后建议在 Admin → Users 中修改 admin 密码;也可用命令行重置:ambari-server setup-security。

8.2 启动安装向导

选择 Launch Install Wizard(ambari02.png)。

8.3 命名集群(Get Started)

自定义 Cluster Name,例如 hadoop_cluster(ambari03.png)。集群名创建后不可随意更改。

8.4 选择 HDP 版本与本地仓库(Select Version)

HDP 默认版本为 2.6。选择 Local Repository(公网源较慢,已将包下载并共享到 10.1.1.1),并只保留 RedHat 7(删除其它操作系统行,避免 Ambari 去校验无用 URL):

HDP:        http://10.1.1.1/hdp
HDP-UTILS:  http://10.1.1.1/hdp-util

(对应 ambari04.png)

若使用公网源,则选择 Use Public Repository,但下载会非常慢,且无外网时必然失败。

8.5 注册主机:目标主机与 SSH 私钥(Install Options)

在 Target Hosts 中写入五台服务器的主机名(每行一个,必须是 FQDN):

master.cluster.com
backup.cluster.com
slave1.cluster.com
slave2.cluster.com
slave3.cluster.com

在 SSH Private Key 中粘贴 master 上 /root/.ssh/id_rsa 的内容:

cat /root/.ssh/id_rsa

将整段私钥(包含 -----BEGIN RSA PRIVATE KEY----- 和 -----END RSA PRIVATE KEY----- 两行)复制到文本框(ambari05.png)。SSH User Account 保持 root,SSH Port 保持 22。

也可以选择 Perform manual registration(手动在每台节点上安装并配置 ambari-agent),但不推荐,步骤更繁琐。

8.6 自动注册(Confirm Hosts)

点击下一步后,Ambari 会通过 SSH 自动登录各主机,安装并启动 ambari-agent,然后等待 Agent 心跳注册(ambari06.png)。

8.7 注册结果确认

注册成功时全部主机状态为绿色 Success(ambari07.png)。

  • 若出现红色 Failed,点击 failed 可查看详细错误信息(stdout/stderr)帮助排错;
  • 若出现黄色警告(Host Checks),多为 THP、文件描述符、已存在的目录/用户等问题,按提示处理后 Rerun Checks。

8.8 选择服务组件(Choose Services)

HDP 生态组件众多,讲义中只选择主要的 HDFS 和 MapReduce(勾选 MapReduce2 时会自动带上 YARN 与 ZooKeeper 依赖);实际生产环境需结合开发需求选择(ambari08.png)。

常见可选组件:

类别 组件
核心 HDFS、YARN、MapReduce2
查询 Hive、Tez、Pig
NoSQL HBase、Phoenix
协调 ZooKeeper
采集 Kafka、Flume、Sqoop
治理 Atlas、Ranger
监控 Ambari Metrics、SmartSense

教学推荐组合:HDFS + YARN + MapReduce2 + ZooKeeper + Hive + HBase,可完整体验存储、计算、协调、SQL 与 NoSQL 四类场景。

Ambari 会自动提示依赖组件(如选 Hive 必须有 ZooKeeper 与一个元数据库),点击 OK 让它自动勾选即可。

8.9 分配 Master 组件(Assign Masters)

将各组件的 Master 角色分配到节点,讲义中保持默认即可(ambari09.png)。典型分配:

组件 建议节点
NameNode master
SNameNode(Secondary NameNode) backup
ResourceManager master
History Server / App Timeline Server master 或 backup
ZooKeeper Server master、backup、slave1(奇数个,建议 3 个)
HiveServer2 / Hive Metastore backup
HBase Master backup
Ambari Metrics Collector backup
  • NameNode / ResourceManager 通常放在 master;
  • SNameNode / 备用主放在 backup;
  • 其它主组件按需分布,尽量避免所有 master 组件挤在一台机器上。

8.10 分配 Slave 与 Client(Assign Slaves and Clients)

分配 DataNode、NodeManager 等 Slave 角色以及 Client 组件(HDFS Client、YARN Client、Hive Client 等),讲义保持默认(ambari10.png)。

  • 一般 slave1 ~ slave3 承担 DataNode 与 NodeManager;
  • Client 建议在需要提交作业的节点上都勾选(至少 master 上要有)。

8.11 自定义服务配置与数据库密码(Customize Services)

图形界面中红色标记的项一般是必须设置的密码,设置完密码即可继续(ambari11.png),常见的有:

  • Hive Metastore 数据库密码(可选择 Ambari 自带的 MySQL,或填写已有数据库连接信息);
  • Ambari Metrics 的 Grafana admin 密码;
  • Oozie / Ranger 等组件的数据库密码;
  • 各服务的 admin 账号密码。

如选择使用外置 MySQL 作为 Hive 元数据库,需先手工建库授权并在此填写:

create database hive;
grant all on hive.* to hive@'%' identified by 'hive123';
flush privileges;

同时在 master 上注册 JDBC 驱动:

ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar

此页还可调整目录、内存等参数,例如:

  • dfs.datanode.data.dir:DataNode 数据目录;
  • dfs.replication:HDFS 副本数(测试环境节点少时可设为 2 或 3);
  • yarn.nodemanager.resource.memory-mb:NodeManager 可用内存。

8.12 配置告警(Configuration warnings)

某些配置会产生告警,提示优化参数(如内存、文件句柄等),讲义中先直接无视,点下一步(ambari12.png)。生产环境应逐条核对后再继续。

8.13 Review

确认前面所做的所有选择,形成部署清单(ambari13.png)。可点击 Print 保存清单,或 Back 返回修改。

8.14 部署安装与进度监控(Install, Start and Test)

点击 Deploy 开始安装(ambari14.png、ambari15.png)。

  • 界面按主机显示 Install → Start → Test 三个阶段的进度条;
  • 安装过程较慢(受本地源带宽与机器性能影响,通常 20 ~ 60 分钟);
  • 若出现红色错误,点击错误项会弹出该任务的 stdout / stderr,给出详细信息帮助排错;修复后可点击 Retry 重试失败任务;
  • 全部完成后点击 Next → Complete,进入 Ambari Dashboard。

安装完成后,即可在 Ambari Dashboard 中看到各服务的状态、启停服务、修改配置、监控告警与指标。


9. 安装后验证

9.1 在 Ambari 界面检查

  • Dashboard 中所有服务图标为绿色(无红色/黄色感叹号);
  • Hosts 页面五台主机均为绿色心跳正常;
  • Alerts 中无 CRITICAL 级别告警。

9.2 命令行检查服务状态

在 master 上:

ambari-server status
jps

在各节点检查 Agent:

ambari-agent status

HDFS 状态与报告:

su - hdfs
hdfs dfsadmin -report
hdfs fsck /

YARN 节点列表:

yarn node -list

9.3 各组件 Web UI 端口

服务 地址 端口
Ambari Web http://master.cluster.com:8080 8080
NameNode(HDFS) http://master.cluster.com:50070 50070
Secondary NameNode http://backup.cluster.com:50090 50090
DataNode http://slave1.cluster.com:50075 50075
ResourceManager(YARN) http://master.cluster.com:8088 8088
NodeManager http://slave1.cluster.com:8042 8042
MapReduce JobHistory http://master.cluster.com:19888 19888
HBase Master http://backup.cluster.com:16010 16010
HiveServer2 jdbc:hive2://backup.cluster.com:10000 10000

9.4 跑一个测试作业

HDFS 读写测试:

su - hdfs
hdfs dfs -mkdir -p /test
echo "hello hadoop ambari hello hdp" > /tmp/words.txt
hdfs dfs -put /tmp/words.txt /test/
hdfs dfs -ls /test
hdfs dfs -cat /test/words.txt

MapReduce WordCount 作业(HDP 的 jar 位于 /usr/hdp/current/hadoop-mapreduce-client/):

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar \
  wordcount /test/words.txt /test/out
hdfs dfs -cat /test/out/part-r-00000

Pi 估算作业(验证 YARN 调度):

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar \
  pi 5 10

作业运行时可在 ResourceManager Web UI(8088)中看到 Application 状态由 RUNNING 变为 FINISHED / SUCCEEDED。

Ambari 界面也提供快捷验证:Service Actions → Run Service Check,HDFS、YARN、MapReduce2、ZooKeeper、Hive、HBase 均支持。


10. 日常运维

Ambari 部署完成后,日常运维大多可在 Web 界面完成:

操作 路径与说明
启动/停止/重启服务 Services → 对应服务 → Service Actions → Start / Stop / Restart All
重启单个组件 Hosts → 某主机 → Components → 组件右侧下拉 → Restart
滚动重启 Service Actions → Restart All(可设置批次大小与容错数,避免全量中断)
修改配置 Services → Configs,修改后 Save,按提示重启相关服务
配置版本与回滚 Configs 页面上方的版本条,选择历史版本 → Make Current 即可回滚
查看告警 Dashboard 顶部 Alerts 区域,按严重级别(CRITICAL / WARNING / OK)过滤
监控指标 Dashboard 的 Metrics 图表;或 Ambari Metrics → Grafana 查看详细面板
主机管理 Hosts 页面查看各节点状态、组件分布、增删节点
添加服务 Actions → Add Service 向导(流程与初次安装的服务选择部分类似)
维护模式 对主机或服务开启 Maintenance Mode,抑制告警,用于计划内检修
卸载/重建集群 停止所有服务后,在 Admin → Cluster 中删除重建

10.1 命令行运维

Ambari Server:

ambari-server start
ambari-server stop
ambari-server restart
ambari-server status

Ambari Agent(各被管理节点):

ambari-agent start
ambari-agent stop
ambari-agent restart
ambari-agent status

元数据库备份(强烈建议纳入定时任务):

mysqldump -uambari -pbigdata ambari > /backup/ambari_$(date +%F).sql

10.2 关注的核心监控指标

类别 指标
HDFS 容量使用率、Under-replicated blocks、Corrupt blocks、Missing blocks、NameNode 堆内存、Safemode 状态、DataNode 存活数
YARN 可用/已用内存与 vcore、Pending/Running Applications、NodeManager 存活数、队列使用率
主机 CPU 使用率、Load、内存、磁盘使用率与 IO、网络流量
服务进程 各组件进程存活、心跳丢失数、JVM GC 时间

10.3 添加主机(扩容)

新节点必须先完成第 4 章的全部前置准备(主机名、hosts 全节点同步、SSH 免密、防火墙/SELinux、NTP、THP、文件描述符、JDK、yum 源),然后:

  1. Ambari Web → Hosts → Actions → Add New Hosts;
  2. 填写新主机 FQDN 与 master 的 SSH 私钥;
  3. 等待注册成功(绿色 Success);
  4. 为新主机分配 Slave 与 Client 组件(一般是 DataNode + NodeManager + Clients);
  5. 部署完成后启动组件。

注意:所有已有节点的 /etc/hosts 都要加上新节点,否则会出现解析失败。

扩容后平衡 HDFS 数据:

su - hdfs
hdfs balancer -threshold 10

10.4 下线主机(Decommission)

  1. Hosts → 选中主机 → Host Actions;
  2. 先对 DataNode 执行 Decommission,等待数据块迁移完成(Ambari 会显示 Decommissioning → Decommissioned);
  3. 再对 NodeManager 执行 Decommission;
  4. 停止该主机上所有组件 → Delete Component → Delete Host。

切勿直接关机删除 DataNode,否则会产生 Under-replicated / Missing blocks。


11. 排错清单

11.1 主机注册失败(Register and Confirm 阶段红色 Failed)

  • 检查 /etc/hosts 五台是否互相绑定、主机名是否为 FQDN 且拼写正确(最常见原因);
  • 检查五台机器间 SSH 免密是否正常(ssh slave1.cluster.com 无需密码即可登录);
  • 检查粘贴的 SSH 私钥是否完整(包含 BEGIN/END 两行,无多余空格);
  • 检查 firewalld / iptables / SELinux 是否已关闭;
  • 检查 yum 源是否可用(yum list ambari-agent 能查到包);
  • 点击 Failed 链接查看 stdout / stderr 具体报错。

11.2 yum 源不可用

  • 在节点上执行 yum repolist、yum clean all; yum makecache fast 确认;
  • 用 curl -I http://10.1.1.1/ambari/repodata/repomd.xml 验证 HTTP 可达;
  • 仓库目录缺少 repodata 时在仓库服务器上执行 createrepo;
  • 确认 repo 文件名是 ambari.repo(Ambari 检查依赖此文件名);
  • 仓库服务器上 httpd 是否启动、SELinux 是否影响 /var/www/html 访问(restorecon -R /var/www/html)。

11.3 ambari-server setup 数据库连接失败

  • 确认 MariaDB 已启动(systemctl status mariadb);
  • 确认库名、用户、授权主机名、密码与 setup 中填写的完全一致;
  • 确认 JDBC 驱动 mysql-connector-java 已安装,必要时执行:
    ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
  • 手工验证连接:mysql -h master.cluster.com -uambari -pbigdata ambari。

11.4 启动后 8080 端口不通

  • 使用 ambari-server status 和 lsof -i:8080(或 ss -tnlp | grep 8080)检查进程与端口;
  • 查看 /var/log/ambari-server/ambari-server.log 与 ambari-server.out;
  • 检查是否有端口冲突,可在 /etc/ambari-server/conf/ambari.properties 中修改 client.api.port;
  • 检查防火墙是否放行 8080。

11.5 Agent 心跳丢失(Heartbeat Lost)

  • 检查 agent 节点上 /etc/ambari-agent/conf/ambari-agent.ini 中 [server] hostname 是否指向 master 的 FQDN;
  • 检查各节点时间是否同步(时间偏差过大会直接导致心跳失效);
  • 检查 Agent 进程:ambari-agent status,必要时 ambari-agent restart;
  • 检查 8440 / 8441 端口(Agent 与 Server 的双向 SSL 通信端口)是否连通;
  • 证书问题(SSLError)可删除 /var/lib/ambari-agent/keys/* 后重启 Agent 重新生成。

11.6 服务安装 / 启动失败

  • 点击 Failed 查看具体错误信息(stdout / stderr),错误原因通常直接可见;
  • 检查对应节点日志(见 11.7);
  • 检查磁盘空间(df -h)和内存(free -m)—— 内存不足是教学环境最常见的启动失败原因;
  • HDP 安装阶段包下载慢或失败:使用本地仓库(Local Repository),确认 http://10.1.1.1/hdp 与 http://10.1.1.1/hdp-util 可访问;
  • HDFS 无法退出安全模式:hdfs dfsadmin -safemode leave;
  • 端口被占用:lsof -i:<port> 找出并处理冲突进程;
  • 修复后在界面上点击 Retry 重试失败任务。

11.7 日志位置速查

组件 日志路径
Ambari Server /var/log/ambari-server/ambari-server.log、ambari-server.out
Ambari Agent /var/log/ambari-agent/ambari-agent.log、ambari-agent.out
Agent 命令输出 /var/lib/ambari-agent/data/output-*.txt、errors-*.txt
HDFS /var/log/hadoop/hdfs/
YARN /var/log/hadoop-yarn/yarn/
MapReduce /var/log/hadoop-mapreduce/mapred/
ZooKeeper /var/log/zookeeper/
Hive /var/log/hive/
HBase /var/log/hbase/

Agent 配置文件:/etc/ambari-agent/conf/ambari-agent.ini;Server 配置文件:/etc/ambari-server/conf/ambari.properties。


12. 练习

  1. 准备五台 CentOS 7.3 虚拟机,按第 3 章规划设置主机名与静态 IP,并使五台 /etc/hosts 完全一致,用 hostname -f 与 ping 验证。
  2. 在五台上完成前置环境准备:关闭 NetworkManager、关闭 firewalld/iptables/SELinux、配置 NTP、关闭 THP、修改文件描述符限制为 65536、设置 umask 0022、安装 JDK 8u112 到 /usr/local/。写出用于验证每一项是否生效的命令。
  3. 在 10.1.1.1 上用 httpd + createrepo 搭建 ambari、HDP、HDP-UTILS 三个本地离线源,并在五台节点上写好 ambari.repo,用 yum list ambari-server 验证。
  4. 配置五台机器两两 SSH 免密(空密码密钥 + 汇总 authorized_keys + 分发 + 首次 yes 确认),并解释为什么 Ambari Server 到所有节点的免密是必需的。
  5. 在 master 上安装 MariaDB,创建 ambari 库并授权给 ambari@'master.cluster.com',密码 bigdata;安装 ambari-server 后导入 Ambari-DDL-MySQL-CREATE.sql。
  6. 执行 ambari-server setup,记录每一个交互选项你的输入及原因(重点:JDK 选 3、数据库选 3);启动服务并用 ambari-server status 与 lsof -i:8080 验证。
  7. 通过 Web 向导安装集群:命名 hadoop_cluster,使用 Local Repository(只留 RedHat 7),注册五台主机,选择 HDFS + YARN + MapReduce2 + ZooKeeper,分配 Master/Slave 角色并完成部署。
  8. 安装后验证:访问 NameNode 50070 与 ResourceManager 8088 页面,执行 hdfs dfsadmin -report,并跑通一次 WordCount 与一次 pi 作业。
  9. 运维练习:在 Configs 中把 dfs.replication 改为 2 并保存、重启相关服务,然后利用配置版本功能回滚到上一版本。
  10. 排错练习:故意在一台 slave 上停掉 ambari-agent 并把系统时间调偏 10 分钟,观察 Ambari 界面出现的告警,然后定位 /var/log/ambari-agent/ambari-agent.log 中的报错并修复。
  11. 扩容练习:新增一台 slave4,完成全部前置准备后用 Add New Hosts 加入集群,分配 DataNode 与 NodeManager,并执行 hdfs balancer 平衡数据。
  12. 对比练习:结合 16-02-Hadoop架构与安装部署.md 中的手工部署流程,列出 Ambari 帮你自动完成了哪些步骤。

13. 参考

最后修改:2026 年 09 月 20 日
如果觉得我的文章对你有用,请随意赞赏