背景
Apache Ambari 项目旨在通过开发用于预置、管理和监控 Apache Hadoop 集群的软件来简化 Hadoop 管理。Ambari 提供直观、易于使用的 Hadoop 管理 Web UI,由其 RESTful API 提供支持。 本文手把手教你实现如何安装Ambari3.0版本,Ambari 安装bigtop 3.0集群版本
Ambari官方文档
- 下载Apache Ambari 安装环境:ambari.apache.org/docs/3.0.0/...
- Apache Ambari 的裸机和 KVM 环境设置:ambari.apache.org/docs/3.0.0/...
- Ambari 安装指南:ambari.apache.org/docs/3.0.0/...
虚拟机服务器环境(centos8 系统):
ip | hostname | cpu/内存 | 定义 |
---|---|---|---|
192.168.0.101 | server-test1 | 2C/16G | Ambari 服务端 Ambari agent 1 mysql、nginx |
192.168.0.102 | server-test2 | 2C/8G | Ambari agent 2 |
192.168.0.103 | server-test3 | 2C/8G | Ambari agent 3 |
注意: 如果使用的系统版本是centos 7版本,则在安装组件时会有问题。如果使用centos7系统,可以安装ambari2.7版本:
Ambari2.7.4安装部署Hadoop集群教程(手把手教学)
服务器基础配置
设置 hostname
在每台服务进行执行命令,或者修改/etc/hostname 配置文件,进行定义 hostname
bash
sudo hostnamectl set-hostname server-test1
设置固定 ip 地址
网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-ens33(ens33 替换为你的网卡名):
properties
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none" # 改为 none或者static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="a780589b-b487-451a-8951-7a983e47882a"
DEVICE="ens33"
ONBOOT="yes" # 开机自启
IPADDR=192.168.0.101 # 固定 IP
NETMASK=255.255.255.0 # 子网掩码
PREFIX=24
GATEWAY=192.168.0.1 # 网关
DNS1=8.8.8.8 # 首选 DNS
DNS2=8.8.4.4 # 备用 DNS
在所有服务器上配置 /etc/hosts
vi /etc/hosts
properties
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 添加以下映射关系
192.168.0.101 server-test1
192.168.0.102 server-test2
192.168.0.103 server-test3
设置国内yum源仓库镜像加速
bash
# 备份原有配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 获取阿里云加速源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
# 重新加载缓存
yum clean all && yum makecache
# 更新
yum update
常用工具安装
bash
sudo yum install -y vim telnet wget
每台服务进行安装 sshd 远程控制
安装 ssh 服务
bash
# 安装openssh
sudo yum install openssh-server -y
sudo systemctl start sshd
sudo systemctl enable sshd
sudo systemctl status sshd
# 防火墙开放允许SSH流量通过
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
修改配置文件/etc/ssh/sshd_config
bash
ListenAddress 0.0.0.0 # 确保非 127.0.0.1
Port 22 # 默认端口
# PermitRootLogin 设置为yes
PermitRootLogin yes
# 开启使用用户名密码验证连接
PasswordAuthentication yes
重启 ssh
bash
sudo systemctl restart sshd
配置安全设置
在所有服务上禁用 SELinux
bash
# Temporarily disable SELinux
setenforce 0
# Permanently disable SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
禁用防火墙
bash
# Stop firewall
systemctl stop firewalld
# Disable firewall on boot
systemctl disable firewalld
配置 SSH 访问
用于配置从 Ambari 服务器到所有代理服务器的无密码 SSH 访问
server-test1
服务进行 生成 ssh 密钥
bash
if [ ! -f ~/.ssh/id_rsa ]; then
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
fi
- 将 SSH 密钥从服务器分发到代理
bash
# 密钥分发
ssh-copy-id -o StrictHostKeyChecking=no root@server-test2
ssh-copy-id -o StrictHostKeyChecking=no root@server-test3
# 验证
ssh root@server-test2 echo "Connection successful"
安装所需的软件包
基础软件包安装
bash
yum update -y
dnf install -y sudo openssh-server openssh-clients which iproute net-tools less vim-enhanced
dnf install -y wget curl tar unzip git
python 环境安装
bash
yum install python3 -y
# 防止python命令报错
sudo ln -s /usr/bin/python3 /usr/bin/python
安装开发工具
bash
# 安装开发工具
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y dnf-utils
注意: 官方文档中有 Rocky-Devel.repo仓库文件,但是由于我这边设置的是阿里云的加速源仓库,所以所以没有 Rocky-Devel.repo,需要进行使用 CentOS PowerTools + EPEL 开发库 方案来解决
bash
# 开启PowerTools
sudo dnf config-manager --set-enabled PowerTools
# 安装启用 EPEL
sudo dnf install epel-release -y
或者修改 CentOS-Base.repo[PowerTools] 下参数 enabled=1
配置网络时间协议
bash
yum install -y chrony
systemctl start chronyd
systemctl enable chronyd
chronyc sources
检查网络连接
markdown
ping -c 2 server-test2
ping -c 2 server-test3
所需环境服务安装
所有服务器安装 Java 环境
bash
# 按照jdk1.8环境(已有jdk版本跳过此步骤)
yum install -y java-1.8.0-openjdk-devel
# jdk17(我是进行单独进行安装)
yum install -y java-17-openjdk-devel
jdk17 环境 压缩包 安装方式
下载安装包后,进行解压到指定目录
本次演示:解压到/usr/lib/jvm/bellsoft-java17.x86_64

修改配置文件 /etc/profile
bash
# java
export JAVA_8_HOME=/usr/local/java8/jdk1.8.0_421
export JAVA_17_HOME=/usr/lib/jvm/bellsoft-java17.x86_64
export JAVA_HOME=$JAVA_8_HOME
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
Docker 环境安装(用于安装 MySQL 和 Nginx)
bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 安装docker
sudo yum -y install docker-ce
详细 docker 安装可参考:todo
安装 MySQL 服务(Docker 安装)
- 新增配置文件
bash
# 1. 创建数据存储目录
mkdir -p /data/docker/mysql/conf
# 创建配置文件my.cnf
vi /data/docker/mysql/conf/my.cnf
# 3. 设置权限
chmod 777 -R /data/docker/mysql
# 单独设置my.cnf文件权限(644)否则mysql为了安全起见会忽略该配置文件
chmod -R 644 /data/docker/mysql/conf
my.cnf内容(8.0 版本)
bash
[mysqld]
lower_case_table_names = 1
user = mysql
server_id = 1
port = 3306
enforce_gtid_consistency = ON
gtid_mode = ON
binlog_checksum = none
authentication_policy = mysql_native_password
skip-name-resolve = ON
open_files_limit = 65535
table_open_cache = 2000
sql_mode = ''
log_bin_trust_function_creators = TRUE
#################innodb########################
#innodb_data_file_path = ibdata1:512M;ibdata2:512M:autoextend
innodb_buffer_pool_size = 4G
innodb_flush_log_at_trx_commit = 2
innodb_io_capacity = 600
innodb_lock_wait_timeout = 120
innodb_log_buffer_size = 8M
innodb_log_file_size = 200M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 85
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 32
innodb_file_per_table
innodb_rollback_on_timeout
###################session###########################
join_buffer_size = 8M
key_buffer_size = 256M
bulk_insert_buffer_size = 8M
max_heap_table_size = 96M
tmp_table_size = 96M
read_buffer_size = 8M
sort_buffer_size = 2M
max_allowed_packet = 64M
max_connections=1000
read_rnd_buffer_size = 32M
############log set###################
#log-error = /usr/local/mysql/logs/mysqld.err
#log-bin = /usr/local/mysql/logs/binlog
#log_bin_index = /usr/local/mysql/logs/binlog.index
max_binlog_size = 500M
slow_query_log = 1
#slow_query_log_file = /usr/local/mysql/logs/slow.log
long_query_time = 10
log_queries_not_using_indexes = ON
log_throttle_queries_not_using_indexes = 10
log_slow_admin_statements = ON
log_output = FILE,TABLE
master_info_file = /usr/local/mysql/logs/master.info
[client]
default-character-set=utf8mb4 # 设置mysql客户端默认字符集
- 创建网络
bash
docker network create mysql_network
- 运行 MySQL 服务容器
bash
docker run -d \
--name mysql-server \
-e TZ=Asia/Shanghai \
-e MYSQL_USER=root \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_LOWER_CASE_TABLE_NAMES=1 \
-p 3306:3306 \
-v /data/docker/mysql/data:/var/lib/mysql \
-v /data/docker/mysql/conf/my.cnf:etc/my.cnf \
-v /data/docker/mysql/logs:/logs \
--restart always \
--log-driver json-file \
--log-opt max-size=5g \
--network mysql_network \
mysql/mysql-server:8.0.28
- 账号密码为:root/root
- 设置远程登录
docekr exec -it mysql-server bash
bash
# 登录
mysql -uroot -p
# 设置远程登录
CREATE USER 'root'@'%' IDENTIFIED BY '[你的密码]';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
安装 Nginx 服务(Docker 安装)
用于设置内网公开Ambari存储库, 后续会说明怎么使用的
- 创建文件目录
bash
mkdir -p /data/docker/nginx/
# 设置权限
chmod 777 -R /data/docker/nginx/
- 先运行一次容器(为了拷贝配置文件):
bash
docker run -p 8000:80 --name nginx-temp -d nginx:1.23
- 将容器内的配置文件拷贝到指定目录:
bash
docker container cp nginx-temp:/etc/nginx /data/docker/nginx/conf
docker container cp nginx-temp:/usr/share/nginx/html /data/docker/nginx/
- 终止并删除容器:
bash
docker rm -f nginx-temp
- 正式运行容器
bash
docker run -d \
--name nginx \
--restart always \
-p 80:80 \
-p 81:81 \
-p 443:443 \
-v /data/docker/nginx/html:/usr/share/nginx/html \
-v /data/docker/nginx/logs:/var/log/nginx \
-v /data/docker/nginx/conf:/etc/nginx \
-v /var/www/html/ambari-repo:/var/www/html/ambari-repo \
-e TZ=Asia/Shanghai \
-e NGINX_PORT=80 \
nginx:1.23
下载Apache Ambari
参考官方文档:ambari.apache.org/docs/3.0.0/...
- 安装 createrepo 包
bash
sudo yum install createrepo
- 创建存储库目录
bash
sudo mkdir -p /var/www/html/ambari-repo
sudo chmod -R 755 /var/www/html/ambari-repo
- 下载 RPM 包
由于演示系统使用的是 centos8 版本,所以我选择安装的是Rocky Linux 8,经过验证是可以正常安装的
注意: 如果使用的系统版本是centos 7版本,则在安装组件时会有问题。如果使用centos7系统请参考:ambari.apache.org/docs/2.7.9/...
bash
cd /var/www/html/ambari-repo
wget -r -np -nH --cut-dirs=4 --reject 'index.html*' https://www.apache-ambari.com/dist/ambari/3.0.0/rocky8/
wget -r -np -nH --cut-dirs=4 --reject 'index.html*' https://www.apache-ambari.com/dist/bigtop/3.3.0/rocky8/
- 设置 nginx 配置
vim /data/docker/nginx/conf/conf.d/ambari-repo.conf
bash
server {
listen 81;
server_name 192.168.0.101;
location /ambari-repo {
alias /var/www/html/ambari-repo;
autoindex on;
}
}
- 重启 nginx:
docker restart nginx
, 访问http://192.168.0.101:81/ambari-repo
可以看到对应的目录
- 在每台服务器上都添加 yum 的存储库
bash
sudo tee /etc/yum.repos.d/ambari.repo << EOF
[ambari]
name=Ambari Repository
baseurl=http://192.168.0.101:81/ambari-repo
gpgcheck=0
enabled=1
EOF
Ambari 安装
参考官方文档:ambari.apache.org/docs/3.0.0/...
端口映射关系
服务 | 端口 | 目的 |
---|---|---|
MySQL | 3306 | |
Nginx | 80,,443,81 | |
Ambari 服务器 | 8080, 8440, 8441 | Web UI, Agent communication |
Core Hadoop | 8020, 9000, 50070, 50075 | HDFS NameNode, DataNode HTTP |
YARN | 8032, 8088, 19888 | ResourceManager, UI, JobHistory |
Hive | 9083, 10000 | Metastore, HiveServer2 |
- 防火墙开放对应端口
bash
# mysql
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
# nginx
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --zone=public --add-port=81/tcp --permanent
# Ambari Server端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8440/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8441/tcp --permanent
# Core Hadoop 端口
sudo firewall-cmd --zone=public --add-port=8020/tcp --permanent
sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
sudo firewall-cmd --zone=public --add-port=50070/tcp --permanent
sudo firewall-cmd --zone=public --add-port=50075/tcp --permanent
# YARN服务端口
sudo firewall-cmd --zone=public --add-port=8032/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8088/tcp --permanent
sudo firewall-cmd --zone=public --add-port=19888/tcp --permanent
# Hive服务端口
sudo firewall-cmd --zone=public --add-port=9083/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10000/tcp --permanent
# 防火墙重新加载
sudo firewall-cmd --reload
安装依赖项和 Ambari 代理
bash
yum install -y python3-distro
yum install -y ambari-agent
安装 Ambari 服务器
bash
yum install -y python3-psycopg2
yum install -y ambari-server
MySQL 设置
- 配置 MySQL 用户和数据库
bash
-- Create Ambari user and grant privileges
CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambari';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'localhost';
CREATE USER 'ambari'@'%' IDENTIFIED BY 'ambari';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
-- Create required databases
CREATE DATABASE ambari CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE hive;
CREATE DATABASE ranger;
CREATE DATABASE rangerkms;
-- Create service users
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%';
CREATE USER 'ranger'@'%' IDENTIFIED BY 'ranger';
GRANT ALL PRIVILEGES ON *.* TO 'ranger'@'%' WITH GRANT OPTION;
CREATE USER 'rangerkms'@'%' IDENTIFIED BY 'rangerkms';
GRANT ALL PRIVILEGES ON rangerkms.* TO 'rangerkms'@'%';
FLUSH PRIVILEGES;
- 导入 SQL 脚本
bash
# sql脚本地址位于server-test1服务上的
/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
配置 Amvari 服务器
bash
# Download MySQL JDBC driver
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar \
-O /usr/share/java/mysql-connector-java.jar
# Setup JDBC driver
ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
# Configure MySQL 8 compatibility
echo "server.jdbc.url=jdbc:mysql://localhost:3306/ambari?useSSL=true&verifyServerCertificate=false&enabledTLSProtocols=TLSv1.2" \
>> /etc/ambari-server/conf/ambari.properties
# Configure Ambari server
ambari-server setup -s \
-j /usr/lib/jvm/java-1.8.0-openjdk \
--ambari-java-home /usr/lib/jvm/bellsoft-java17.x86_64 \
--database=mysql \
--databasehost=localhost \
--databaseport=3306 \
--databasename=ambari \
--databaseusername=ambari \
--databasepassword=ambari
Ambari Sever 服务 启动
bash
# 启动
ambari-server start
# 停止
ambari-server stop
# 重启
ambari-server restart
Ambari Agent 服务 启动
bash
# 配置参数,其中hostname=server-test1 设置为安装了Ambari Sever 服务器主机名称
sed -i "s/hostname=.*/hostname=server-test1/" /etc/ambari-agent/conf/ambari-agent.ini
# agent 启动
ambari-agent start
# agent 停止
ambari-agent start
# agent 重启
ambari-agent restart

访问 Ambari Web 界面
账号密码:admin/admin
bash
http://192.168.0.101:8080/

查看日志
Ambari 服务器:/var/log/ambari-server/ambari-server.out
Ambari 代理:/var/log/ambari-agent/ambari-agent.log
markdown
# 查看命令
tail -200f /var/log/ambari-server/ambari-server.out
tail -200f /var/log/ambari-agent/ambari-agent.log
Ambari web服务配置
1. 新增一个Cluster


2. 选择版本和仓库地址,由于之前配置了本地仓库地址,则设置为本地仓库地址:http://192.168.0.101:81/ambari-repo

3. 设置安装选择,配置在哪些 agent 主机上进行安装,并配置 server 主机的密钥,位于 /etc/.ssh/id_rsa


4. 等待验证主机

5. 选择需要安装的服务
本次演示设置:
其他服务密码:admin Ranger 管理员密码: amb_ranger_admin123

6. 分配节点

7. 自定义服务配置(有些服务需要配置密码、数据库连接配置、目录等)
8. 等待安装服务

9. 安装完成后界面
