[toc]
CentOS7中用Ambari快速搭建大数据平台
公司的产品是基于大数据平台的,近期要做公司产品私有化部署,因此学习一下 Ambari
本文参考地址 原文链接
1.Ambari简介
Ambari是什么
Ambari 是创建、管理、监视 Hadoop 的集群的软件。这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper ,Spark ,Flink ,Flume ,Oozie 等),而并不仅是特指 Hadoop。用一句话来说,Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。 Ambari 现在所支持的平台组件也越来越多,例如流行的 Spark,Storm 等计算框架,以及资源调度平台 YARN 等,我们都能轻松地通过 Ambari 来进行部署,为想构建大数据平台的初学者提供了很大的便捷。
Ambari 自身也是一个分布式架构的软件,主要由两部分组成:Ambari Server
和 Ambari Agent
。简单来说,用户通过 Ambari Server
通知 Ambari Agent
安装对应的软件;Agent 会定时地发送各个机器每个软件模块的状态给 Ambari Server
,最终这些状态信息会呈现在 Ambari 的 GUI,方便用户了解到集群的各种状态,并进行相应的维护。
Ambari
基于Web的工具,支持Apache Hadoop集群的创建、管理和监控。
HDP
包含了hadoop生态系统的所有软件项目,比如HBase、Zookeeper、Hive
、Pig等等。
HDP-UTILS
工具类库。
HDP-GPL
LZO压缩库软件包存储在单独的HDP-GPL存储库中。
Ambari安装说明
Ambari类似于Ansible,并没有明确的 master/slave 之分
2.环境准备
2.0 安装纯净系统后执行的脚本
#!/usr/bin/env bash
#
# 修改系统yum源为aliyun并添加epel源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
[ ! -e /etc/yum.repos.d/CentOS-Base.repo ] && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[ ! -e /etc/yum.repos.d/epel.repo ] && curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
yum -y install tar wget net-tools git vim tree lrzsz htop iftop iotop psmisc python36 python3-devel zlib zlib-devel gcc gcc-c++ conntrack-tools jq socat bash-completion telnet nload strace tcpdump lsof sysstat
# 关闭防火墙、selinux、NetworkManager
systemctl disable firewalld NetworkManager
sed -i '7s/enforcing/disabled/' /etc/selinux/config
# 同步时间计划任务 由于后续要用到ntpserver,因此ntpdate选择不执行
#sed -i '/*\/10 \* \* \* \* \/usr\/sbin\/ntpdate ntp2\.aliyun\.com &>\/dev\/null/d' /var/spool/cron/root
#echo "*/10 * * * * /usr/sbin/ntpdate ntp2.aliyun.com &>/dev/null" >>/var/spool/cron/root
# 历史命令显示时间
sed -i '/HISTFILESIZE=2000/d' /etc/bashrc
sed -i '/HISTSIZE=2000/d' /etc/bashrc
sed -i '/HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "/d' /etc/bashrc
sed -i '/export HISTTIMEFORMAT/d' /etc/bashrc
cat >>/etc/bashrc<<'EOF'
HISTFILESIZE=2000
HISTSIZE=2000
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
export HISTTIMEFORMAT
EOF
source /etc/bashrc
# 修改系统最大文件描述符
sed -i '/root soft nofile 65535/d' /etc/security/limits.conf
sed -i '/root hard nofile 65535/d' /etc/security/limits.conf
sed -i '/* soft nofile 65535/d' /etc/security/limits.conf
sed -i '/* hard nofile 65535/d' /etc/security/limits.conf
cat >>/etc/security/limits.conf<<'EOF'
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
EOF
# 设置pip国内源
mkdir ~/.pip
cat >~/.pip/pip.conf<<EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
EOF
# 个人习惯执行命令 netstat -ntpl,所以做一个别名
sed -i.bak "8c alias n='netstat -ntpl'" ~/.bashrc && source ~/.bashrc
reboot
2.1 实验环境
角色 | IP地址 | 主机名 | ambari版本 | 硬件配置 | 系统 | 内核 |
---|---|---|---|---|---|---|
master | 10.0.0.136 | ambari-server01.test.com | 2.6.2.2 | 2c8g | CentOS7.8 | 3.10.0-1127.el7.x86_64 |
slave | 10.0.0.137 | ambari-agent01.test.com | 2.6.2.2 | 2c8g | CentOS7.8 | 3.10.0-1127.el7.x86_64 |
slave | 10.0.0.138 | ambari-agent02.test.com | 2.6.2.2 | 2c8g | CentOS7.8 | 3.10.0-1127.el7.x86_64 |
2.2 配置ssh免密
如无特殊说明,以下操作均在 ambari-server01
节点
2.2.1 编辑环境变量文件
环境变量文件中IP、主机名、子网网段可自行修改
[ -d /opt/ambari/script ] || mkdir -p /opt/ambari/script && cd /opt/ambari/script
cat > env.sh <<EOF
export NODE_IPS=(10.0.0.136 10.0.0.137 10.0.0.138)
export NODE_NAMES=(ambari-server01.test.com ambari-agent01.test.com ambari-agent02.test.com)
export NODE_SUBNET='10.0.0.0/24'
EOF
2.2.2 生成密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null
2.2.3 编辑expect自动化交互脚本
这里机器用户名是 root
,密码是国际标准通用密码 1
,ssh端口 22
执行路径在 /opt/ambari/script
cat > ssh.exp <<'EOF'
#!/usr/bin/expect
if { $argc !=2 } {
send_user "usage: expect ssh.exp file ip\n"
exit
}
set file [lindex $argv 0]
set ip [lindex $argv 1]
set password "1"
spawn ssh-copy-id -i $file -p 22 root@$ip
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
EOF
2.2.4 编辑shell脚本循环执行expect脚本
# 编辑脚本
source env.sh
cat > ssh.sh <<'EOF'
#!/bin/bash
for i in ${NODE_IPS[@]}
do
expect ./ssh.exp ~/.ssh/id_rsa.pub $i
done
EOF
# 安装expect
yum -y install expect
# 执行脚本
source ssh.sh