Ambari介绍
什么是Ambari
Apache Ambari是由Hortonworks贡献给Apache开源社区的顶级项目。它包括两个主要组件:Ambari Server和Ambari Agent。Ambari是一款Hadoop管理工具,类似ClouderaManager,专为Hadoop生态系统而设计,可以轻松创建、管理、配置和监控整个Hadoop集群,包括主要的Hadoop组件如HDFS、MapReduce、Hive、Pig、HBase、ZooKeeper、Sqoop等
Ambari的主要功能包括:
- 简化集群部署:Ambari通过一步一步的安装向导简化了集群供应,使用户能够轻松地配置和启动Hadoop集群
- 集群健康监控:用户可以直接通过Ambari页面查看Hadoop相关组件的健康状况,包括HDFS、MapReduce、HBase、Hive等
- 用户友好的界面: Ambari的用户界面非常直观,用户可以轻松地查看信息并有效地控制整个集群
- RESTful API支持: 提供完整的RESTful API,可以将监控信息暴露出来,方便集成到现有的运维工具中
- 安全支持: Ambari能够安装安全的(基于Kerberos)Hadoop集群,提供了基于角色的用户认证、授权和审计功能
2018年Clouera公司与Hortonworks公司合并,从2021年1月开始,Ambari开始收费,如果想要使用Ambari要么基于源码自己编译,要么付费进行使用
Ambari官网地址:ambari.apache.org/
Cloudera官网关于Ambari介绍及安装地址:www.cloudera.com/products/op...
Ambari架构
Ambari框架采用了Server/Client的模式,涉及到的核心组件如下图所示

- Ambari-Server: Ambari Server是Ambari的核心组件,通过Web界面允许管理员配置、监控和执行集群操作,包括安装、启动、停止和升级组件
- Ambari Agent: Ambari Agent是在集群中每个主机上运行的代理程序,负责与Ambari Server通信并执行其下发的命令。Ambari Agent负责在各个主机上安装和管理组件、收集主机指标数据,并将其发送给Ambari Server用于监控和分析
- Ambari Web: Ambari Web提供了一个用户友好的Web界面,允许管理员和操作员直接与Ambari交互。通过Ambari Web,用户可以轻松地配置和管理集群的各个方面,包括添加/删除主机、安装/升级组件、配置服务和管理用户权限等
- Ambari Database: Ambari Database是Ambari Server使用的后端数据库,用于存储集群的元数据和配置信息。常见的数据库选项包括MySQL、PostgreSQL和Oracle。Ambari Database存储有关集群拓扑、组件配置、主机信息和用户权限等的数据
- Ambari Metrics: Ambari Metrics组件负责收集和存储集群的指标数据,将各个组件和主机的指标数据进行持久化存储。同时提供了一个Web界面,方便用户查看和分析集群的指标数据
以上这些是Ambari的关键组件,它们协同工作,使用户能够便捷地管理和监控Hadoop集群的各个方面。借助Ambari,用户能够简化集群管理任务,并通过可视化界面轻松监控集群的运行状况和性能
Ambari与HDP
Ambari是一个开源的集群管理工具,提供直观的Web界面,用于简化Hadoop集群的配置、管理和监控,我们可以通过Ambari轻松进行集群部署、服务配置、扩展和监控。但Hadoop集群需要通过HDP(Hortonworks Data Platform)进行构建,HDP是Hortonworks提供的完整数据平台,基于Apache Hadoop构建,包含核心组件如HDFS、YARN、MapReduce、Hive、HBase、Spark、Pig等,HDP通过集成这些组件,为用户提供稳定、可靠和易于管理的Hadoop平台
所以,Ambari作为集群管理工具用于管理和运维HDP构建的Hadoop集群,我们可以通过Ambari进行各种操作,例如添加/删除节点、配置服务参数、监控集群健康状态等。如果类比到ClouderaManager平台,Ambari就类似Cloudera Manager集群管理工具,HDP类似CDH(Cloudera's Distribution Including Apache Hadoop)一样。Ambari和ClouderaManager集群管理工具之间对比如下
1) 开源性
- Ambari:Ambari是一个开源项目,由Apache软件基金会进行开发和维护
- Cloudera Manager:Cloudera Manager是Cloudera公司的产品,它是基于开源Hadoop分发版本构建的,但Cloudera Manager本身不是开源的。作为Cloudera公司的产品,提供商业支持和服务,并与Cloudera的其他产品和解决方案集成
2) 用户界面
- Ambari:提供了直观的Web界面,相对简洁易用
- Cloudera Manager:提供更详细和功能丰富的Web界面,适用于大型和复杂的集群环境,包含更多集群管理和调优功能
3) 功能和扩展性
- Ambari:提供基本的集群管理功能,支持Ambari Views,允许用户通过自定义视图扩展和定制功能(需要源码编译Ambari实现)
- Cloudera Manager:提供广泛的集群管理和运维功能,包括自动化安装、配置管理、故障排除、性能优化等,同时支持一些高级特性,如数据备份和恢复、Kerberos集成、高可用性配置等
supportmatrix.cloudera.com/#Hortonwork... 通过这个网址可以查询Ambari和HDP各个版本支持情况,输入相应的版本,可下载版本匹配报告
docs.cloudera.com/HDPDocument... 这个是Ambari和HDP的安装文档
现在Ambari开始收费,Ambari和HDP的安装包在官网都不可以免费获得了,但是可以在网上找到
准备下面四个包
- ambari-2.7.5.0-centos7.tar.gz
- HDP-3.1.5.0-centos7-rpm.tar.gz
- HDP-GPL-3.1.5.0-centos7-gpl.tar.gz
- HDP-UTILS-1.1.0.22-centos7.tar.gz
Ambair集群管理工具搭建
ip | CPU | 内存 | 硬盘 | 角色 | 主机名 |
---|---|---|---|---|---|
192.168.91.51 | 2C | 10G | 200GB | Ambari Server、Ambari Agent | node1 |
192.168.91.52 | 2C | 4G | 200GB | Ambari Agent、MySQL | node2 |
192.168.91.53 | 2C | 4G | 200GB | Ambari Agent、Httpd | node3 |
这里使用的是16GB内存的物理机,虚拟机内存是不够的,可以在VMware中设置最大使用12GB内存

环境准备
shell
# 所有节点
# hosts 配置
cat >> /etc/hosts << "EOF"
192.168.91.51 node1
192.168.91.52 node2
192.168.91.53 node3
EOF
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 关闭selinux
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 时间同步配置,最小化安装系统需要安装ntpdate软件
yum -y install ntpdate
echo "0 */1 * * * ntpdate time1.aliyun.com" >> /var/spool/cron/root
# 启动ntpdate,并设置开机自启
systemctl enable ntpdate && systemctl start ntpdate
# 查看现有时区
ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Sep 13 2023 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
# 时区如果不是Shanghai,需要指向上海
# 删除现有时区
rm -f /etc/localtime
# 修改为上海时区
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置Linux系统显示中文
# 查看当前系统语言,默认支持显示英文
echo $LANG
en_US.UTF-8
# 临时修改系统语言为中文,重启节点后恢复英文
LANG="zh_CN.UTF-8"
# 如果想要永久修改系统默认语言为中文,需要创建或修改/etc/locale.conf文件,写入以下内容,设置完成后需要重启各节点
LANG="zh_CN.UTF-8"
# jdk安装
# 在Oracle官网下载jdk-8u181-linux-x64.rpm
rpm -ivh jdk-8u181-linux-x64.rpm
以上可以在一个节点配置好,然后克隆出另外两个节点
免密配置
shell
# 配置所有节点相互免密,在所有节点上执行如下命令,给当前节点创建公钥和私钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 将node1、node2、node3的公钥copy到node1上,这样这三台节点都可以免密登录到node1
# 在所有节点上执行
ssh-copy-id node1
# 现在所有节点都可以免密登录node1了,再将node1节点上~/.ssh/authorized_keys文件拷贝到node2、node3各节点的~/.ssh/目录下,即可实现所有节点之间相互免密
# node1节点执行
scp ~/.ssh/authorized_keys node2:~/.ssh/
scp ~/.ssh/authorized_keys node3:~/.ssh/
# node2、node3,远程node2和node3还需要再输入一次yes
ssh node2
ssh node3
mysql安装
shell
# node2
# mysql5.7安装
# 下载离线包并解压
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar
tar xf mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar
# 使用rpm安装mysql,rpm包有依赖关系,安装的顺序如下(--force:强制安装 --nodeps:不检查环境依赖)
rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm --force --nodeps
# 删除rpm包
rm -f mysql-community*.rpm
# 默认mysqlL服务是关闭,需要启动mysql服务并设置开机自启
systemctl start mysqld && systemctl enable mysqld
# 登录mysql,修改密码,创建用户
grep 'temporary password' /var/log/mysqld.log
2024-05-03T03:50:54.624547Z 1 [Note] A temporary password is generated for root@localhost: jcE__l0*.ar0
mysql -uroot -p"jcE__l0*.ar0"
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Abc@1234';
use mysql;
truncate user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Abc@1234' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;
# 修改MySQL服务端编码为utf8,然后重启服务
echo 'character-set-server=utf8' >> /etc/my.cnf
systemctl restart mysqld
安装Ambari必须依赖
后续安装Ambari时会检测系统环境,如果没有就会导致安装不成功
shell
# node1
yum -y install postgresql-server-9.2.24 rpm-build gcc-c++ python-devel net-tools redhat-lsb psmisc nc
配置Ambari本地Yum源
安装Ambari可以基于源码进行编译安装,源码编译方式编译成功后缺少HDP3.0+版本支持,所以这里不再基于Ambari源码进行编译安装,而是使用CloudManager提供好的Ambari安装包(需要付费订阅)进行安装。从外网下载Ambari的安装包非常慢,这里我们基于本地已有Ambari安装包配置本地yum源进行Ambari的安装
要配置本地yum源安装Ambari可以创建本地repo yum源文件,在yum源文件中指定下载ambari安装包的地址,该地址通过httpd服务进行提供即可
配置httpd服务
我们通过httpd来提供本地访问Ambari安装包。具体操作如下
shell
# node3
# 安装httpd服务
yum -y install httpd
# 启动httpd,并设置开机自启
systemctl start httpd && systemctl enable httpd
# 将准备好的ambari-2.7.5.0-centos7.tar.gz包解压到指定目录
tar xf ambari-2.7.5.0-centos7.tar.gz -C /var/www/html
rm -f ambari-2.7.5.0-centos7.tar.gz
以上步骤完成后,将目录/var/www/html/ambari/centos7/2.7.5.0-72
下的index.html删除,因为此文件会连接hortonworks网站,导致httpd不能访问该文件父级目录进而导致错误
以上操作完成后,可以通过浏览器访问http://node3/ambari
查看对应的文件

配置本地yum源
shell
# 所有节点
cat > /etc/yum.repos.d/ambari.repo << EOF
[ambari]
name=ambari
baseurl=http://node3/ambari/centos7/2.7.5.0-72/
gpgcheck=1
gpgkey=http://node3/ambari/centos7/2.7.5.0-72/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
EOF
# 缓存元数据
yum clean all && yum makecache
Ambari安装
Ambari Server 安装
shell
# node1
yum -y install ambari-server
# 将sql脚本发送到node2
scp /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql node2:/root/
配置Ambari使用数据库
这里选择MySQL数据库作为Ambari数据存储库。将Ambari数据库脚本导入到MySQL数据库,安装完成Ambari Server后,会在"/var/lib/ambari-server/resources/"路径中生成"Ambari-DDL-MySQL-CREATE.sql"文件,该文件为Ambari数据库脚本
shell
# node2
mysql -uroot -pAbc@1234
# 创建ambari数据库,并给ambari用户赋权
create database ambari character set utf8;
# 创建用户并授权,下面 配置Ambari-Server 时,数据库密码只能包含:字母 数字 _ -
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%' IDENTIFIED BY 'Abc_1234' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 加载数据库脚本
use ambari;
source /root/Ambari-DDL-MySQL-CREATE.sql;
exit;
上传MySQL驱动包
将MySQL驱动包"mysql-connector-java-5.1.26.jar"上传至node1节点
shell
# node1
# 将驱动包复制到如下路径中
# 注意必须创建/usr/share/java目录,后续启动默认从该路径下查询MySQL驱动包
mkdir -p /usr/share/java
cp mysql-connector-java-5.1.26.jar /usr/share/java/
cp mysql-connector-java-5.1.26.jar /var/lib/ambari-server/resources/
cp mysql-connector-java-5.1.26.jar /usr/lib/ambari-server/
配置Ambari-Server
shell
# node1
# 执行"ambari-server setup"命令进行Ambari-Server配置,注意按照下面的步骤填写相关信息,复制路径时,路径前后不能有空格
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):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] Custom JDK
==============================================================================
Enter choice (1): 2
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/java/jdk1.8.0_181-amd64
Validating JDK on Ambari Server...done.
Check JDK version for Ambari Server...
JDK version found: 8
Minimum JDK version is 8 for Ambari. Skipping to setup different JDK for Ambari Server.
Checking GPL software agreement...
GPL License for LZO: https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
Enable Ambari Server to download and install GPL Licensed LZO packages [y/n] (n)? y
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 (1): 3
Hostname (localhost): node2
Port (3306): 3306
Database name (ambari): ambari
Username (ambari): ambari
Enter Database Password (bigdata):
Re-enter password:
Configuring ambari database...
Enter full path to custom jdbc driver: /usr/share/java/mysql-connector-java-5.1.26.jar
Configuring remote database connection properties...
WARNING: Before starting Ambari Server, you must run the following DDL directly from the database shell 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.7.5.0.72.jar
....
Ambari repo file doesn't contain latest json url, skipping repoinfos modification
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.
查看生成的配置文件/etc/ambari-server/conf/ambari.properties
,中的配置是否正确,需要注意server.jdbc.driver.path
这个配置是否为/usr/share/java/mysql-connector-java-5.1.26.jar
,如果不是需要手动修改
启动Ambari
shell
# node1,这里如果启动报数据库相关的错误,大概率是数据库版本与驱动版本不兼容导致的,可以多尝试几个版本的驱动包
ambari-server start
...
Server started listening on 8080
DB configs consistency check: no errors and warnings were found.
Ambari Server 'start' completed successfully.
如果启动失败,可以在/var/log/ambari-server/ambari-server.log
查看启动日志信息。在启动Ambari Server过程中,该日志中会有Warn警告:Could not load version definition for HDP-2.3 identified by https://archive.cloudera.com/p/HDP/2.x/2.3.6.0/suse11sp3/HDP-2.3.6.0-3796.xml. Server returned HTTP response code: 401 for URL: https://archive.cloudera.com/p/HDP/2.x/2.3.6.0/suse11sp3/HDP-2.3.6.0-3796.xml
,该警告是由于 cloudera 提供的镜像源不对外开放了,所以 ambari 源码中内置的 repo 源地址在 amabri-server 启动时就是加载异常,从而报了这个错误,这个错误是 WARN 级别,倒不影响 ambari 功能使用,可以忽略
Ambari-Server启动成功后,可以登录"node1:8080"查看Ambari WebUI,默认登录用户:admin,密码:admin

Ambari Agent安装
shell
# 所有节点
yum -y install ambari-agent
HDP配置及安装
HDP本地源配置
当Ambari Server安装并启动成功后,就可以进行大数据平台部署,这时就需要下载HDP并基于Ambari平台进行配置安装HDP,在Cloudera收费之后,HDP需要订阅后才能使用并且从外网下载速度较慢,所以我们这里基于已有的HDP进行本地源配置
这里也是基于httpd服务进行本地HDP源提供,前面已经安装过httpd服务,这里直接在/var/www/html目录下创建hdp目录,将hdp相关压缩包上传到/var/www/html/hdp目录下
shell
mkdir -p /var/www/html/hdp
tar xf HDP-3.1.5.0-centos7-rpm.tar.gz -C /var/www/html/hdp/
tar xf HDP-GPL-3.1.5.0-centos7-gpl.tar.gz -C /var/www/html/hdp/
tar xf HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html/hdp/
rm -f HDP-*.gz
以上步骤完成后,将目录/var/www/html/hdp/HDP/centos7/3.1.5.0-152/
下的index.html删除,因为此文件会连接hortonworks网站,导致httpd不能访问该文件父级目录。可以通过浏览器访问http://node1/hdp
查看对应的文件

HDP相关3个安装包说明如下
- HDP:HDP包是HDP的主要二进制安装包,包含了HDP的核心组件和服务的二进制安装文件,包括Hadoop生态系统的各个组件,如HDFS、YARN、MapReduce、Hive、HBase、Spark等,以及其他与Hadoop集群相关的工具和库
- HDP-GPL:HDP-GPL是HDP中包含的一些开源组件的源代码,主要是由于这些组件使用了GPL(GNU通用公共许可证)等开源许可证,根据许可证的要求,提供了源代码
- HDP-UTILS:HDP-UTILS是HDP工具集的安装包,包含了一些在HDP集群上运行和管理时需要的工具和实用程序。例如集群管理、配置管理、性能监控等方面的工具,以提供更方便的集群操作和管理
Ambari部署大数据组件
1.启动安装向导
登录Ambari: http://node1:8080, 进行大数据组件安装

2.设置集群名称

3.设置HDP版本及本地Repository


选择"HDP-3.1"版本,Repositories中选择"Use Local Repository",在"redhat7"模块中填写如下内容,然后选择"NEXT"
bash
HDP-3.1: http://node3/hdp/HDP/centos7/3.1.5.0-152/
HDP-3.1-GPL: http://node3/hdp/HDP-GPL/centos7/3.1.5.0-152/
HDP-UTILS-1.1.0.22: http://node3/hdp/HDP-UTILS/centos7/1.1.0.22/
注意以上连接复制粘贴时前后不要有空格
4.指定集群节点host及Server节点SSH密钥

点击"REGISTER AND CONFIRM",弹窗提示警告,直接继续即可

点击继续后,各个节点进行注册,稍后可以看到注册成功信息

注册成功后可以看到检测各个节点的环境是否存在潜在的风险,这里有警告,可以点击"Click here to see the warnnings"查看

这里警告三个节点都没有运行chronyd,这个是用于同步时间的,已经使用了ntpdate同步时间了,这个警告可以忽略,点击"NEXT"执行下一步
5.选择Ambari中安装的服务
选择在Ambari中安装的大数据组件,这里选择安装: HDFS、Yarn、MR、Tez、Hive、Hbase、Zookeeper(HDFS HA需要)、Ambari Metrics、Kafka。其中Ambari Metrics需要安装,否则各组件安装完成后,在Ambari中看不到各种监控指标


选择"NEXT"后,提示"不安装Ranager/Atlas"警告,这里直接点击"PROCEES ANYWAY"即可

6.分配Master
选择各个组件对应的角色所分配节点,这里可以根据Ambari自动分配,选择默认即可,点击"NEXT"执行下一步

7.分配Slaves和客户端
分配各组件的Slaves和客户端。这里只需配置DataNode、NodeManager、RegionServer、Client选择所有节点部署服务即可,其他可以不设置。然后点击"NEXT"

8.自定义服务
这一步骤设置各个组件使用数据库相关信息,需要提前在MySQL中创建好数据库及分配好用户对应权限
shell
# node2
mysql -uroot -pAbc@1234
# 创建 grafana 使用库及对应用户权限
create database grafana character set utf8 ;
CREATE USER 'grafana'@'%' IDENTIFIED BY 'Abc_1234';
GRANT ALL PRIVILEGES ON grafana.* TO 'grafana'@'%';
FLUSH PRIVILEGES;
# 创建 hive 使用库及对应用户权限
create database hive character set utf8 ;
CREATE USER 'hive'@'%' IDENTIFIED BY 'Abc_1234';
GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%';
FLUSH PRIVILEGES;
exit;
为各个服务按照如下方式提供认证信息即可
服务 | 用户 | 密码 |
---|---|---|
Grafana Admin | grafana | Abc_1234 |
Hive Database | hive | Abc_1234 |
Activity Explorer's Admin | N/A | Abc_1234 |

点击"Next"后需要为"Hive"配置使用数据库信息。如果使用mysql数据库,需要在AmbariServer节点指定mysql的驱动包位置,这里在node1节点执行如下命令指定MySQL的驱动包
shell
# node1
ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-5.1.26.jar
设置Hive相关数据库信息

jdbc:mysql://node2:3306/hive?createDatabaseIfNotExist=true
以上设置完成后,点击"DIRECTORIES",进入"DIRECTORIES"目录相关设置,这里可以选择默认

继续点击"ACCOUNTS"设置各个服务账户信息,这里也可以选择默认设置

继续点击"ALL CONFIGURATIONS"进行相关服务配置,这里可以保持默认配置

点击"NEXT"进行下一步设置,这里会弹窗提示没有进行Hive链接测试,如果确保Hive连接MySQL没有问题,可以直接点击"PROCEED ANYWAY"
9.进行Review检查
这里进行最后部署前的配置检查,没有问题点击"DEPLOY"即可

点击"DEPLOY"后等待部署即可
10.安装、启动和测试
等待集群部署完成即可,在部署过程中如果出现任何错误,都可以点击"Message"查看每个节点部署错误信息,根据错误来解决问题

部署成功之后,如下图所示

如果安装完成后出现黄色表示部署过程中有警告,红色表示部署过程中有错误。可以点击对应的Message信息查看警告或者错误信息。各个大数据组件安装完成后,点击"NEXT"进行下一步
11.Summary
点击"COMPLETE"完成集群安装

最终Ambari WebUI界面如下,由于资源不够,有些服务可能没有起来,可以在WebUI中手动启起来

以上部分组件出现警告信息,主要是由于虚拟机环境资源不足导致的
Ambari操作使用
Ambari WebUI 介绍
Dashboard
Dashboard看板中可以通过"METRICS"指标查看Ambari进行的集群各组件指标监控;通过"HEATMAPS"热力图可以查看各个组件内存、CPU、磁盘占用、数据读写、GC等相关热力分布;通过"CONFIG HISTORY"可以查看各个组件配置历史

Services
Service(服务)是指 Ambari管理大数据集群的各个服务,如: HDFS、HBase 和 Zookeeper等是服务的⽰例。⼀个服务可能有多个组件(例如,HDFS 有 NameNode、Secondary NameNode、DataNode 等),服务也可以只是⼀个客户端。
可以点击Services中每个Service服务,查看该服务中组件和服务指标、该服务指标的热力分布、配置设置、指标监控,另外还可以通过"ACTIONS"获取更多该服务的操作。以下是以HDFS服务为例展示该组件可操作信息

注意:一个Service由⼀个或多个Component组件组成。例如,HDFS 有 3 个组件:NameNode、DataNode 和 Secondary NameNode。这里的组件可以理解为角色,每个组件可能是可选的,⼀个组件可以跨越多个节点(例如,多个节点上的 DataNode 实例)
在Services服务中包括Ambari Metrics服务和SmartSense服务,这两个服务是horonworks商业的组件功能,作用是监控集群,并提供建议。两个组件是安装ambari时候的一个必选项,否则不能正常监控Ambari安装的大数据服务
此外,还可以在Services中进行启动/停止所有服务、下载配置操作,如下图所示

Hosts
点击"Hosts"可以查看Ambari管理的所有Agent节点信息,这些信息包括节点名称、IP地址、机架信息、资源信息、使用HDP版本及安装组件信息。可以点击"ACTIONS"选择/过滤主机,并在对应主机上进行角色启停等操作

Alerts
Alerts展示Ambari中所有服务对应Status状态信息,绿色表示没有问题,红色表示严重问题,黄色表示警告。可以点击对应的告警名称查看详细的告警信息,根据告警信息来解决对应问题。可以点击"ACTIONS"管理报警组、报警通知方式(可以设置邮件方式)、通知前报警次数统计等操作

Cluster Admin
Cluster Admin可以对Ambari集群进行设置,通过该模块可以查看Ambari中安装的服务及版本信息、各个服务的用户和组信息、Kerberos安全设置、配置各个服务是否随着Ambari启动而启动

Ambari各服务操作
HDFS操作
可以在任意节点上操作HDFS,操作之前需要切换hdfs用户。如下是向hdfs中上传一个文件并查看文件内容命令操作,这里在node1节点进行操作
shell
# node1
# 切换hdfs用户
su - hdfs
cat > data.txt << EOF
hello ambari
hello hdfs
EOF
# 上传文件到根路径
hdfs dfs -put ./data.txt /
# 查看刚刚上传的文件
hdfs dfs -cat /data.txt
hello ambari
hello hdfs
MR任务提交测试
在集群中提交MR自带的WordCount任务,由于读取HDFS中data.txt文件,所以这里直接使用hdfs用户即可。具体操作如下
shell
# node1节点hdfs用户
cd ~
# 将hadoop-mapreduce-examples.jar 包复制到/home/hdfs目录下
cp /usr/hdp/3.1.5.0-152/hadoop-mapreduce/hadoop-mapreduce-examples.jar ~/
# 提交MR自带WordCount任务,并指定结果输入/输出路径
hadoop jar ./hadoop-mapreduce-examples.jar wordcount /data.txt /output
# 查看执行结果
hdfs dfs -cat /output/part-r-00000
ambari 1
hdfs 1
hello 2
Hive操作
在任意节点进入Hive Client,创建表并插入数据,这里使用hive用户进行操作。具体操作如下
shell
# node2
su - hive
# 进入hive客户端,创建表、插入数据并查询结果
hive
create table tbl (id int ,name string,age int) row format delimited fields terminated by '\t';
insert into tbl values (1,'zs',18),(2,'ls',19),(3,'ww',20);
select * from tbl;
+---------+-----------+----------+
| tbl.id | tbl.name | tbl.age |
+---------+-----------+----------+
| 1 | zs | 18 |
| 2 | ls | 19 |
| 3 | ww | 20 |
+---------+-----------+----------+
!quit
HBase操作
在任意节点进入HBase Client,创建表并插入数据,这里在node3节点上使用hbase用户进行操作。具体操作如下
shell
# node3
su - hbase
# 操作hbase
hbase shell
create 'test','cf1','cf2'
put 'test','row1','cf1:id','1'
put 'test','row1','cf1:name','zhangsan'
put 'test','row1','cf1:age',18
get 'test','row1'
COLUMN CELL
cf1:age timestamp=1714967621154, value=18
cf1:id timestamp=1714967609589, value=1
cf1:name timestamp=1714967615237, value=zhangsan
scan 'test'
ROW COLUMN+CELL
row1 column=cf1:age, timestamp=1714967621154, value=18
row1 column=cf1:id, timestamp=1714967609589, value=1
row1 column=cf1:name, timestamp=1714967615237, value=zhangsan
exit
开启HDFS HA
Ambari中按照如下步骤开启HDFS HA
1.停止HBase服务
Ambari中要求开启HDFS HA 之前需要先停止HBase服务, 所以这里先停止HBase服务


2.开启HDFS HA

3.设置HDFS 集群名字及配置
设置集群名

各个角色节点分配使用默认即可

各个角色使用路径选择默认即可


4.创建checkpoint
以上点击"NEXT"后,出现如下步骤

需要登录node1节点执行如下命令设置checkpoint,保证HDFS集群开启HA后数据不丢失
shell
# node1
sudo su hdfs -l -c 'hdfs dfsadmin -safemode enter'
Safe mode is ON
sudo su hdfs -l -c 'hdfs dfsadmin -saveNamespace'
Save namespace successful
以上命令执行后,点击"NEXT"进行自动组件配置

5.初始化JournalNodes

Ambari完成组件配置后,需要手动登录node1节点初始化JournalNodes,具体操作如下
shell
# node1
sudo su hdfs -l -c 'hdfs namenode -initializeSharedEdits'
journalnodes初始化完成后,点击"NEXT"进行下一步启动Zookeeper和NameNode组件

6.初始化元数据

启动Zookeeper和NameNode组件后需要在node1和node3节点上(具体哪个节点看上面的截图)进行NameNode元数据初始化,具体操作如下
shell
# 在node1节点上初始化zookeeper
sudo su hdfs -l -c 'hdfs zkfc -formatZK'
shell
# 在node3节点上同步NameNode元数据
sudo su hdfs -l -c 'hdfs namenode -bootstrapStandby'
以上操作完成后,点击"NEXT"
在进行最后HA设置前,进行"执行了手动步骤"确认


经过以上步骤,HDFS HA开启成功。可以通过Ambari WebUI和HDFS WebUI进行确认



安装Spark服务
下面通过安装Spark服务来学习在Ambari中如何安装Service。按照如下步骤进行安装即可(先将HBase关掉,否则资源不足很容易失败)
1.添加Spark 服务



2.配置Spark
Spark2 Thrift Server可以让Spark兼容HiveServer2服务,让Hive可以直接通过beeline进行访问Spark Thrift Server,这里将Spark2 ThriftServer 安装到node2节点

配置Spark Service,这一步中点击"ADVANCED"找到"Advanced spark2-hive-site-override"配置Spark2 Thrift Server连接HiveServer2的端口为10000,默认该值被设置为10016,需要改成10000,否则后续Spark不能连接HiveServer2

点击"NEXT"继续




以上红色提示是安装Spark完成后需要重新启动相关Service,将WebUI上提示需要重启的服务全部重启(这里可以先停止所有服务,在再启动所有服务)。Spark安装完成后,最终效果如下

下面基于Yarn提交Spark pi任务,在Hadoop3.x版本之后,Yarn NodeManager节点默认分配的资源为1G和4Core。提交Spark任务需要在Yarn中调大每台NodeManager的内存资源,在Yarn 配置中找到配置项"yarn.nodemanager.resource.memory-mb(表示该节点上YARN可使用的物理内存总量)"调节到至少2G以上,同时需要调大每个Container可以使用的最大内存,将"yarn.scheduler.maximum-allocation-mb(每个Container可申请的最多物理内存量)"调节到至少2G以上,但是应小于"yarn.nodemanager.resource.memory-mb"参数

这里点击"SAVE"之后,中间还有几个页面,全部按默认即可

以上设置完成后,重启受影响的服务

然后在任意节点提交Spark Pi任务进行Spark基于Yarn运行任务测试
shell
# node1
su - spark
cp /usr/hdp/3.1.5.0-152/spark2/examples/jars/spark-examples_2.11-2.3.2.3.1.5.0-152.jar ~/
# 提交Spark PI 任务,由于资源不够,这个任务执行很可能会报错,可以尝试关闭其它不相关服务,然后再执行。我这里是将上面"Ambari部署大数据组件"重新执行了一遍(没有安装HBase),然后不操作"开启HDFS HA",再"安装Spark服务",然后才执行成功的
spark-submit --master yarn --class org.apache.spark.examples.SparkPi ./spark-examples_2.11-2.3.2.3.1.5.0-152.jar 10
...
Pi is roughly 3.142043142043142
...
Ambari安装自定义服务:cwiki.apache.org/confluence/...
Ambair源码编译
编译源码只需要在一台节点操作,下面都是在node1节点操作
JDK安装
shell
# 安装jdk1.8,如果已经安装了,不用重复安装
# 在Oracle官网下载jdk-8u181-linux-x64.rpm
rpm -ivh jdk-8u181-linux-x64.rpm
安装Maven 3.8.8
shell
# Maven下载地址:http://maven.apache.org/download.cgi 这里下载Maven版本为 3.8.8
# 注意这里不能使用3.9版本,我在3.9.4版本下不能编译成功
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar xf apache-maven-3.8.8-bin.tar.gz
mv apache-maven-3.8.8 /usr/local/
echo 'export MAVEN_HOME=/usr/local/apache-maven-3.8.8' >> /etc/profile
echo 'export PATH=$PATH:$MAVEN_HOME/bin' >> /etc/profile
source /etc/profile
mvn -v
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /usr/local/apache-maven-3.8.8
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_181-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.71.1.el7.x86_64", arch: "amd64", family: "unix"
# 备份 settings.xml 文件
mv $MAVEN_HOME/conf/settings.xml $MAVEN_HOME/conf/settings.xml.bak
创建$MAVEN_HOME/conf/settings.xml
文件,内容如下
xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<!-- localRepository
| mvn本地存储库路径
| 默认是: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>Aliyun</id>
<repositories>
<repository>
<id>aliyun-public</id>
<name>Aliyun Public Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>aliyun-spring</id>
<name>Aliyun Spring Proxy Repository</name>
<url>https://maven.aliyun.com/repository/spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>Aliyun</activeProfile>
</activeProfiles>
</settings>
安装nodejs
在编译Ambari源码包使需要通过npm安装一些系统依赖,使用npm需要安装nodejs
shell
wget https://nodejs.org/dist/v10.24.1/node-v10.24.1-linux-x64.tar.xz
tar xf node-v10.24.1-linux-x64.tar.xz
chown -R root:root node-v10.24.1-linux-x64
mv node-v10.24.1-linux-x64 /usr/local/node
echo 'export NODE_HOME=/usr/local/node' >> /etc/profile
echo 'export PATH=$PATH:$NODE_HOME/bin' >> /etc/profile
source /etc/profile
node -v
v10.24.1
npm -v
6.14.12
# 设置淘宝镜像源
npm config set registry https://registry.npmmirror.com/
npm config get registry
https://registry.npmmirror.com/
安装git
Ambari源码编译过程中,一些环境准备需要检查git环境变量。按照如下步骤配置安装git
shell
# 查看git是否安装了
git --version
git version 1.8.3.1
# 如果没有安装,按照下面的步骤安装
wget https://github.com/git/git/archive/refs/tags/v2.21.0.tar.gz
# 安装编译git源码需要的系统依赖
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
tar xf v2.21.0.tar.gz
cd git-2.21.0
# 编译源码
make prefix=/usr/local/git all
# 安装git到/usr/local/git路径
make prefix=/usr/local/git install
echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/profile
source /etc/profile
Ambari 源码包编译
安装编译源码所需依赖
shell
# yum安装系统依赖
yum install -y rpm-build gcc-c++ python-devel net-tools
# 后续编译过程中需要用到bower和gulp,安装bower、gulp
npm install -g bower
npm install -g gulp
源码编译
这里编译Ambari的版本是2.7.7版本,该版本的源码下载地址:archive.apache.org/dist/ambari...
下面需要科学上网才能编译成功
shell
cd ~
wget https://archive.apache.org/dist/ambari/ambari-2.7.7/apache-ambari-2.7.7-src.tar.gz
tar xf apache-ambari-2.7.7-src.tar.gz
# 安装bower依赖包,避免在编译过程中出错
cd apache-ambari-2.7.7-src/ambari-admin/src/main/resources/ui/admin-web
bower install --allow-root
shell
# 先准备4个安装包,安装过程中会下载,很容易出错,提前下载好
mkdir ~/deptar
cd ~/deptar
wget https://archive.apache.org/dist/hbase/2.4.2/hbase-2.4.2-bin.tar.gz
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.1/hadoop-3.1.1.tar.gz
wget https://dl.grafana.com/oss/release/grafana-6.7.4.linux-amd64.tar.gz
wget https://downloads.apache.org/phoenix/phoenix-5.1.2/phoenix-hbase-2.4-5.1.2-bin.tar.gz
修改 ambari-metrics 模块中pom.xml文件,配置以上依赖从本地获取。修改 /root/apache-ambari-2.7.7-src/ambari-metrics/pom.xml 文件,修改:<hbase.tar>、<hadoop.tar>、<grafana.tar>、<phoenix.tar>标签内容,如下
xml
<hbase.tar>file:///root/deptar/hbase-2.4.2-bin.tar.gz</hbase.tar>
<hadoop.tar>file:///root/deptar/hadoop-3.1.1.tar.gz</hadoop.tar>
<grafana.tar>file:///root/deptar/grafana-6.7.4.linux-amd64.tar.gz</grafana.tar>
<phoenix.tar>file:///root/deptar/phoenix-hbase-2.4-5.1.2-bin.tar.gz</phoenix.tar>
设置版本信息并编译源码
shell
cd /root/apache-ambari-2.7.7-src
mvn versions:set -DnewVersion=2.7.7.0.0
pushd ambari-metrics
mvn versions:set -DnewVersion=2.7.7.0.0
popd
# 下面的结果是,已经编译成功之后,第二次编译的结果(所有依赖已经在本地了,执行比较快)
mvn -B clean install rpm:rpm -DnewVersion=2.7.7.0.0 -DbuildNumber=388e072381e71c7755673b7743531c03a4d61be8 -DskipTests -Dpython.ver="python >= 2.6"
...
[INFO] Ambari Main 2.7.7.0.0 .............................. SUCCESS [ 6.228 s]
[INFO] Apache Ambari Project POM 2.7.7.0.0 ................ SUCCESS [ 5.148 s]
[INFO] Ambari Web 2.7.7.0.0 ............................... SUCCESS [ 40.501 s]
[INFO] Ambari Views 2.7.7.0.0 ............................. SUCCESS [ 0.687 s]
[INFO] Ambari Admin View 2.7.7.0.0 ........................ SUCCESS [ 26.655 s]
[INFO] ambari-utility 1.0.0.0-SNAPSHOT .................... SUCCESS [ 6.502 s]
[INFO] ambari-metrics 2.7.7.0.0 ........................... SUCCESS [ 5.310 s]
[INFO] Ambari Metrics Common 2.7.7.0.0 .................... SUCCESS [ 8.893 s]
[INFO] Ambari Metrics Hadoop Sink 2.7.7.0.0 ............... SUCCESS [ 1.839 s]
[INFO] Ambari Metrics Flume Sink 2.7.7.0.0 ................ SUCCESS [ 1.248 s]
[INFO] Ambari Metrics Kafka Sink 2.7.7.0.0 ................ SUCCESS [ 6.183 s]
[INFO] Ambari Metrics Storm Sink 2.7.7.0.0 ................ SUCCESS [ 1.452 s]
[INFO] Ambari Metrics Storm Sink (Legacy) 2.7.7.0.0 ....... SUCCESS [ 6.396 s]
[INFO] Ambari Metrics Collector 2.7.7.0.0 ................. SUCCESS [03:05 min]
[INFO] Ambari Metrics Monitor 2.7.7.0.0 ................... SUCCESS [ 0.974 s]
[INFO] Ambari Metrics Grafana 2.7.7.0.0 ................... SUCCESS [ 1.377 s]
[INFO] Ambari Metrics Host Aggregator 2.7.7.0.0 ........... SUCCESS [ 9.397 s]
[INFO] Ambari Metrics Assembly 2.7.7.0.0 .................. SUCCESS [01:09 min]
[INFO] Ambari Service Advisor 1.0.0.0-SNAPSHOT ............ SUCCESS [ 0.375 s]
[INFO] Ambari Server 2.7.7.0.0 ............................ SUCCESS [03:07 min]
[INFO] Ambari Functional Tests 2.7.7.0.0 .................. SUCCESS [ 5.521 s]
[INFO] Ambari Agent 2.7.7.0.0 ............................. SUCCESS [ 49.817 s]
[INFO] ambari-logsearch 2.7.7.0.0 ......................... SUCCESS [ 5.295 s]
[INFO] Ambari Logsearch Appender 2.7.7.0.0 ................ SUCCESS [ 0.268 s]
[INFO] Ambari Logsearch Config Api 2.7.7.0.0 .............. SUCCESS [ 0.253 s]
[INFO] Ambari Logsearch Config JSON 2.7.7.0.0 ............. SUCCESS [ 0.214 s]
[INFO] Ambari Logsearch Config Solr 2.7.7.0.0 ............. SUCCESS [ 0.235 s]
[INFO] Ambari Logsearch Config Zookeeper 2.7.7.0.0 ........ SUCCESS [ 0.214 s]
[INFO] Ambari Logsearch Config Local 2.7.7.0.0 ............ SUCCESS [ 0.192 s]
[INFO] Ambari Logsearch Log Feeder Plugin Api 2.7.7.0.0 ... SUCCESS [ 0.228 s]
[INFO] Ambari Logsearch Log Feeder Container Registry 2.7.7.0.0 SUCCESS [ 0.419 s]
[INFO] Ambari Logsearch Log Feeder 2.7.7.0.0 .............. SUCCESS [ 14.964 s]
[INFO] Ambari Logsearch Web 2.7.7.0.0 ..................... SUCCESS [02:58 min]
[INFO] Ambari Logsearch Server 2.7.7.0.0 .................. SUCCESS [ 4.577 s]
[INFO] Ambari Logsearch Assembly 2.7.7.0.0 ................ SUCCESS [ 0.198 s]
[INFO] Ambari Logsearch Integration Test 2.7.7.0.0 ........ SUCCESS [ 5.786 s]
[INFO] ambari-infra 2.7.7.0.0 ............................. SUCCESS [ 5.175 s]
[INFO] Ambari Infra Solr Client 2.7.7.0.0 ................. SUCCESS [ 51.319 s]
[INFO] Ambari Infra Solr Plugin 2.7.7.0.0 ................. SUCCESS [ 0.461 s]
[INFO] Ambari Infra Manager 2.7.7.0.0 ..................... SUCCESS [ 10.402 s]
[INFO] Ambari Infra Assembly 2.7.7.0.0 .................... SUCCESS [ 5.171 s]
[INFO] Ambari Infra Manager Integration Tests 2.7.7.0.0 ... SUCCESS [ 1.263 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15:12 min
[INFO] Finished at: 2024-05-08T20:25:50+08:00
[INFO] ------------------------------------------------------------------------
以上maven编译命令的参数解释如下:
- -B: 启用"批处理"模式,以减少输出信息
- clean: 清理之前构建生成的文件
- install: 将项目构建结果安装到本地仓库,以便其他项目可以依赖它
- rpm:rpm: 生成RPM包的插件目标,用于创建RPM(Red Hat Package Manager)软件包
- -DnewVersion=2.7.7.0.0: 设置项目的新版本号为2.7.7.0.0
- -DskipTests: 在构建过程中跳过运行测试
- -Dpython.ver="python >= 2.6": 设置一个名为python.ver的系统属性,指定Python的版本要求为2.6或更高版本
- -Drat.skip=true : 跳过许可license检查,否则后续编译检查license报错
shell
# ambari的rpm安装包在各个模块的target目录中
# 例如 ambari-server,可以通过rpm安装
ll -h /root/apache-ambari-2.7.7-src/ambari-server/target/rpm/ambari-server/RPMS/x86_64/
-rw-r--r-- 1 root root 123M May 8 20:20 ambari-server-2.7.7.0-0.x86_64.rpm