背景
Ambari 项目旨在通过开发用于预置、管理和监控 Hadoop 集群的软件来简化 Hadoop 管理。Ambari 提供直观、易于使用的 Hadoop 管理 Web UI,由其 RESTful API 提供支持。
本文手把手教你实现如何安装Ambari2.7.4+HDP3.1.4+HDP-UTILS-1.1.0.22进行部署Hadoop集群
虚拟机服务器环境(centos7 系统):
ip | hostname | cpu/内存 | 服务 |
---|---|---|---|
192.168.0.6 | server-middle | 2C/4G | MySQL、Ambari私仓 |
192.168.0.31 | server-dev1 | 2C/10G | Ambari 服务端 Ambari agent 1 httpd |
192.168.0.32 | server-dev2 | 2C/10G | Ambari agent 2 |
192.168.0.33 | server-dev3 | 2C/10G | Ambari agent 3 |
如果需要安装Ambari3.0版本 (系统最低版本要求centos8),请移步至:
服务版本:
服务 | 版本 |
---|---|
JDK | 1.8 |
MySQL | 5.7 |
Ambari下载
匹配软件版本
通过以下网址可以查询Ambari和HDP各个版本支持情况,选择相应的版本,可下载版本匹配报告。(本案例为Ambari2.7.4+HDP3.1.4)
https://supportmatrix.hortonworks.com/
下载地址:
PS:如果下载失败,可以私聊我要。
Ambari-2.7.4下载页面:https://docs.cloudera.com/HDPDocuments/Ambari-2.7.4.0/bk_ambari-installation/content/ambari_repositories.html
由于本次案例使用的是Centos7系统,所以选择下载地址:https://archive.cloudera.com/p/ambari/2.x/2.7.4.14/centos7/ambari-2.7.4.14-1-centos7.tar.gz
解决点击下载链接报错403问题解决
点击下载链接后,需要输入cloudera
账号密码,但是我们没有怎么解决呢?用迅雷下载即可
HDP 3.1.4下载页面:https://docs.cloudera.com/HDPDocuments/Ambari-2.7.4.0/bk_ambari-installation/content/hdp_314_repositories.html
下载报错403问题,也使用迅雷下载即可。
下载地址:
- HDP: https://archive.cloudera.com/p/HDP/3.x/3.1.4.0/centos7/HDP-3.1.4.0-centos7-rpm.tar.gz
- HDP-UTILS: https://archive.cloudera.com/p/HDP-UTILS/1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-centos7.tar.gz
服务器基础配置
设置 hostname
在每台服务进行执行命令,或者修改/etc/hostname 配置文件,进行定义 hostname
sudo hostnamectl set-hostname server-dev1
设置固定 ip 地址
每台服务器进行网卡配置,文件路径:/etc/sysconfig/network-scripts/ifcfg-ens33
(ens33 替换为你的网卡名):
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.21 # 固定 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
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 添加以下映射关系
192.168.0.6 server-middleware
192.168.0.31 server-dev1
192.168.0.32 server-dev2
192.168.0.33 server-dev3
设置国内yum源仓库镜像加速
# 备份原有配置
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
常用工具安装
sudo yum install -y vim telnet wget
每台服务进行安装 sshd 远程控制
安装 ssh 服务
# 安装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
ListenAddress 0.0.0.0 # 确保非 127.0.0.1
Port 22 # 默认端口
# PermitRootLogin 设置为yes
PermitRootLogin yes
# 开启使用用户名密码验证连接
PasswordAuthentication yes
重启 ssh
sudo systemctl restart sshd
配置安全设置
在所有服务器上禁用 SELinux
# 临时禁用(服务器重启后则会恢复)
setenforce 0
# 永久禁用
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 查看状态
getenforce
禁用防火墙
由于防火墙限制,导致安装ambari服务会有奇怪的问题,所以建议关闭防火墙
# Stop firewall
systemctl stop firewalld
# Disable firewall on boot
systemctl disable firewalld
配置 SSH 免密登录
用于配置从 Ambari 服务器到所有代理服务器的无密码 SSH 访问
server-dev1
服务进行 生成 ssh 密钥
if [ ! -f ~/.ssh/id_rsa ]; then
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
fi
- 将 SSH 密钥从服务器分发到代理
# 密钥分发
ssh-copy-id -o StrictHostKeyChecking=no root@server-dev1
ssh-copy-id -o StrictHostKeyChecking=no root@server-dev2
ssh-copy-id -o StrictHostKeyChecking=no root@server-dev3
# 验证
ssh root@server-dev2 echo "Connection successful"
ssh root@server-dev3 echo "Connection successful"
安装所需的软件包
在dev1,dev2,dev3服务器进行安装需要的软件包
基础软件包安装
yum update -y
yum install -y sudo openssh-server openssh-clients which iproute net-tools less vim-enhanced
yum install -y wget curl tar unzip git
python 环境安装
yum install python3 -y
# 防止python命令报错
sudo ln -s /usr/bin/python3 /usr/bin/python
安装开发工具
# 安装开发工具
sudo yum groupinstall -y "Development Tools"
sudo yum install -y yum-utils
# 安装启用 EPEL
sudo yum install epel-release -y
配置网络时间协议
yum install -y chrony
systemctl start chronyd
systemctl enable chronyd
chronyc sources
检查网络连接
在dev1服务器上进行输入以下命令进行验证:
ping -c 2 server-dev2
ping -c 2 server-dev3
所需环境服务安装
所有服务器安装 Java 环境
# 按照jdk1.8环境(已有jdk版本跳过此步骤)
yum install -y java-1.8.0-openjdk-devel
修改配置文件 /etc/profile
# java
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
中间件服务器配置(server-middle)
安装docker
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
安装 MySQL5.7 服务(Docker 安装)
- 新增配置文件
# 1. 创建数据存储目录
mkdir -p /data/docker/mysql5.7/conf
# 创建配置文件my.cnf
vi /data/docker/mysql5.7/conf/my.cnf
# 3. 设置权限
chmod 777 -R /data/docker/mysql5.7
# 单独设置my.cnf文件权限(644)否则mysql为了安全起见会忽略该配置文件
chmod -R 644 /data/docker/mysql5.7/conf
my.cnf内容(5.7 版本)
[mysqld]
lower_case_table_names=1
user=mysql
server_id=1
port=3306
#default-time-zone = '+08:00'
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_file=/usr/local/mysql/logs/slow.log
slow_query_log=1
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客户端默认字符集
- 创建网络
docker network create mysql_network
- 运行 MySQL 服务容器
docker run -d \
--name mysql-server-5.7 \
--restart on-failure:5 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_LOWER_CASE_TABLE_NAMES=1 \
-p 3306:3306 \
-v /data/docker/mysql5.7/data:/var/lib/mysql \
-v /data/docker/mysql5.7/conf/my.cnf:/etc/my.cnf \
-v /data/docker/mysql5.7/logs:/usr/local/mysql/logs \
--network mysql_network \
mysql:5.7
- 账号密码为:root/root
- 设置远程登录
docekr exec -it mysql-server bash
# 登录
mysql -uroot -p
# 设置远程登录
CREATE USER 'root'@'%' IDENTIFIED BY '[你的密码]';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Ambari 私仓
安装httpd服务(Ambari私仓)
介绍:httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。安装部署httpd服务后,可以通过浏览器访问服务器
/var/www/html/
下的文件。
1. 安装
#安装
yum install httpd
#开机自启动
systemctl enable httpd.service
#启动httpd服务
systemctl start httpd.service
#查看httpd服务状态
systemctl staus httpd.service
2. 查看httpd服务:
3. 上传解压Ambari和HDP包
目录:/var/www/html/
# 将安装包上传到/var/www/html
ambari-2.7.4.14-1-centos7.tar.gz
HDP-3.1.4.0-centos7-rpm.tar.gz
HDP-UTILS-1.1.0.22-centos7.tar.gz
# 解压
tar -zxf 【指定包】
# 将解压后的文件夹进行重命名为
mv 【原始文件夹名】 【需要修改的文件夹名称】
如下图所示:
Ambari 安装
创建repo文件
在server-dev1
服务器进行创建repo
文件,然后将repo文件分发给server-dev2、server-dev3
服务器。
仓库配置:ambari.repo HDP.repo HDP-UTILS.repo
repo所在目录: /etc/yum.repos.d
# ambari.repo
[ambari]
name=ambari
baseurl=http://server-middleware/ambari/centos7/2.7.4.0-118
enabled=1
gpgcheck=0
# HDP.repo
[HDP]
name=HDP
baseurl=http://server-middleware/HDP/centos7/3.1.4.0-315
enabled=1
gpgcheck=0
# HDP-UTILS.repo
[HDP-UTILS]
name=HDP-UTILS
baseurl=http://server-middleware/HDP-UTILS/centos7/1.1.0.22
enabled=1
gpgcheck=0
快捷创建:
cat <<EOF | sudo tee /etc/yum.repos.d/ambari.repo
[ambari]
name=ambari
baseurl=http://server-middleware/ambari/centos7/2.7.4.0-118
enabled=1
gpgcheck=0
EOF
cat <<EOF | sudo tee /etc/yum.repos.d/HDP.repo
[HDP]
name=HDP
baseurl=http://server-middleware/HDP/centos7/3.1.4.0-315
enabled=1
gpgcheck=0
EOF
cat <<EOF | sudo tee /etc/yum.repos.d/HDP-UTILS.repo
[HDP-UTILS]
name=HDP-UTILS
baseurl=http://server-middleware/HDP-UTILS/centos7/1.1.0.22
enabled=1
gpgcheck=0
EOF
分发给其他服务器
scp ambari.repo HDP.repo HDP-UTILS.repo root@server-dev2:/etc/yum.repos.d/
scp ambari.repo HDP.repo HDP-UTILS.repo root@server-dev3:/etc/yum.repos.d/
安装 Ambari 服务器
yum install -y ambari-server
安装Ambari 代理端
yum install -y ambari-agent
MySQL 设置
- 配置 MySQL 用户和数据库
-- 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 脚本
# sql脚本地址位于server-dev1服务上的
/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
配置 Amvari 服务器
# Download MySQL JDBC driver
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.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 Ambari server
ambari-server setup -s \
-j /usr/lib/jvm/java-1.8.0-openjdk \
--database=mysql \
--databasehost=server-middleware \
--databaseport=3306 \
--databasename=ambari \
--databaseusername=ambari \
--databasepassword=ambari
Ambari Sever 服务 启动
# 启动
ambari-server start
# 停止
ambari-server stop
# 重启
ambari-server restart
Ambari Agent 服务 启动
# 配置参数,其中hostname=server-dev1 设置为安装了Ambari Sever 服务器主机名称
sed -i "s/hostname=.*/hostname=server-dev1/" /etc/ambari-agent/conf/ambari-agent.ini
# agent 启动
ambari-agent start
# agent 停止
ambari-agent start
# agent 重启
ambari-agent restart
访问 Ambari Web 界面
账号密码:admin/admin
http://192.168.0.31:8080/
查看日志
Ambari 服务器:/var/log/ambari-server/ambari-server.log
Ambari 代理:/var/log/ambari-agent/ambari-agent.log
# 查看命令
tail -200f /var/log/ambari-server/ambari-server.out
tail -200f /var/log/ambari-agent/ambari-agent.log