多读书多实践,勤思考善领悟

大数据hadoop之 十三.Ambari集群管理

本文于1720天之前发表,文中内容可能已经过时。

Ambari简介

Ambari概述

Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的创建、管理和监控。Ambari已支持大多数Hadoop组件,Hadoop 整个生态圈包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等;除此之外,Ambari还支持Spark、Storm等计算框架及资源调度平台YARN。

Apache Ambari 从集群节点和服务收集大量信息,并把它们表现为容易使用的,集中化的接口:Ambari Web.

Ambari Web显示诸如服务特定的摘要、图表以及警报信息。可通过Ambari Web对Hadoop集群进行创建、管理、监视、添加主机、更新服务配置等;也可以利用Ambari Web执行集群管理任务,例如启用 Kerberos 安全以及执行Stack升级。任何用户都可以查看Ambari Web特性。拥有administrator-level 角色的用户可以访问比 operator-level 或 view-only 的用户能访问的更多选项。例如,Ambari administrator 可以管理集群安全,一个 operator 用户可以监控集群,而 view-only 用户只能访问系统管理员授予他的必要的权限。
Ambari提供了对Hadoop更加方便快捷的管理功能,主要包含:

  • 通过一步一步的安装向导简化了集群供应。
  • 预先配置好关键的运维指标(metrics),可以直接查看Hadoop Core(HDFS和MapReduce)及相关项目(如HBase、Hive和HCatalog)是否健康。
  • 支持作业与任务执行的可视化与分析,能够更好地查看依赖和性能。
  • 通过一个完整的RESTful API把监控信息暴露出来,集成了现有的运维工具。
  • 用户界面非常直观,用户可以轻松有效地查看信息并控制集群。

Ambari体系结构

Ambari 自身也是一个分布式架构的软件,主要由两部分组成:Ambari Server 和 Ambari Agent。简单来说,用户通过Ambari Server通知 Ambari Agent 安装对应的软件;Agent 会定时地发送各个机器每个软件模块的状态给 Ambari Server,最终这些状态信息会呈现在 Ambari 的 GUI,方便用户了解到集群的各种状态,并进行相应的维护。

Ambari Server 从整个集群上收集信息。每个主机上都有 Ambari Agent, Ambari Server 通过 Ambari Agent 控制每部主机。

安装配置

一、配置说明

  1. 硬件环境
节点类型 操作系统 ip地址 主机名 说明
主节点 Centos-7 192.168.162.41 node1.ambari.com 内存:8G+
从节点 Centos-7 192.168.162.42 node2.ambari.com 内存:8G+
从节点 Centos-7 192.168.162.43 node3.ambari.com 内存:8G+
  1. 软件环境
软件名称 版本号
JDK jdk1.8.0_151
Mysql 5.7.23
Ambari 2.7.1
HDP 3.0.1

二、修改主机名和hosts文件

1. 修改主机名(三台主机都执行)

1
2
3
vim /etc/hostname   *# 该命令需要重启后生效*
*# 还有另外一种方式,执行该命令后立即生效,只不过需要重启Xshell连接*
hostnamectl set-hostname node1.ambari.com

2. 修改hosts文件

1
vim /etc/hosts

三、关闭防火墙和selinux

1. 防火墙设置

1
2
3
4
5
6
7
8
9
10
# 查看防火墙状态
systemctl status firewalld
# 查看开机是否启动防火墙服务
systemctl is-enabled firewalld
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 再次查看防火墙状态和开机防火墙是否启动
systemctl status firewalld
systemctl is-enabled firewalld

2. 禁用selinux

1
2
3
4
5
6
7
# 永久性关闭selinux(重启服务器生效)
sed -i 's/SELINUX=enforcing/SELINUX =disabled/' /etc/selinux/config
# 临时关闭selinux(立即生效,重启服务器失效)
setenforce 0
# 查看selinux状态
getenforce
# disabled为永久关闭,permissive为临时关闭,enforcing为开启

四、免密登陆

各个主机均执行以下操作:

1
2
3
4
5
6
7
8
9
## 生成密钥对
ssh-keygen -t rsa ## 一路回车即可
## 进入.ssh目录,如果目录不存在则创建
cd ~/.ssh
## 将公钥导入至authorized_keys
cat id_rsa.pub >> authorized_keys
## 修改文件权限
chmod 700 ~/.ssh
chmod 600 authorized_keys

在node1.ambari.com上执行:

1
2
3
4
5
## 配置主从互相免密登陆
[root@node1 ~]# cat ~/.ssh/id_rsa.pub | ssh root@node2.ambari.com 'cat - >> ~/.ssh/authorized_keys'
[root@node1 ~]# cat ~/.ssh/id_rsa.pub | ssh root@node3.ambari.com 'cat - >> ~/.ssh/authorized_keys'
ssh node2.ambari.com
ssh node3.ambari.com # 验证主机点是否可以免密登陆从节点,执行exit命令退出即可。

备注:要想实现多主机互相免密,可参考文章:Linux多台主机互相免密

五、安装JDK

下载链接: https://pan.baidu.com/s/1rlqZejpZZqio9RPzgnGOEg 提取码: j47n ;内有jdk-8u151-linux-x64.tar.gz和mysql-connector-java.jar文件。

  • mkdir /usr/java;将下载的压缩包上传到java文件夹内
  • 解压压缩包:tar zxvf jdk-8u151-linux-x64.tar.gz
  • 配置jdk环境变量:
1
2
3
4
# 编辑/etc/profile,文末插入以下内容:
# set java
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
  • 使环境变量生效:source /etc/profile
  • 安装验证:java -version

六、安装mysql

mysql5.7 centos7:

https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

mysql5.7 centos6:

https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm

mysql5.6 centos7:

https://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

mysql5.6 centos6:

https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

1. 检查本地资源库中是否有mysql的rpm包

1
2
3
rpm -qa | grep mysql
# 删除相关rpm包
rpm -ev <rpm包名> --nodeps

2. 搭建mysql5.7的yum源

1
2
3
4
5
6
7
# 下载mysql5.7的rpm包
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装第一步下载的rpm文件,安装成功后/etc/yum.repos.d/目录下会增加两个文件
yum -y install mysql57-community-release-el7-11.noarch.rpm
# 查看mysql57的安装源是否可用,如不可用请自行修改配置文件(/etc/yum.repos.d/mysql-community.repo)使mysql57下面的enable=1
# 若有mysql其它版本的安装源可用,也请自行修改配置文件使其enable=0
yum repolist enabled | grep mysql

3. 安装mysql

1
yum install mysql-community-server

4. 设置mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
# 启动mysql服务
service mysqld start
# 查看root密码
grep "password" /var/log/mysqld.log
# 登陆mysql
mysql -u root -p
Enter password:
# 为了可以设置简单密码
set global validate_password_policy=0;
set global validate_password_length=4;
# 立即修改密码,执行其他操作报错:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
# 我们创建密码为root123

5. 新增ambari用户并增加权限

1
2
3
4
5
6
7
8
mysql -uroot -proot123
CREATE USER 'ambari'@'%' IDENTIFIED BY 'ambari';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambari';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'localhost';
CREATE USER 'ambari'@'node1.ambari.com' IDENTIFIED BY 'ambari';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'node1.ambari.com'; //本地主机名
FLUSH PRIVILEGES;

注:删除用户命令:

1
2
Delete FROM user Where User='your_user' and Host='your_host';
FLUSH PRIVILEGES;

6. 使用ambari用户登陆并创建数据库

1
2
3
mysql -uambari -pambari
CREATE DATABASE ambari;
exit;

七、设置时钟同步

自己写了一个脚本,前提条件是获取/etc/hosts文件内的主机ip

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env bash
host_list=$(sed -n '3,$p' /etc/hosts | awk '{print $1}')
master_hostip=$(sed -n 3p /etc/hosts | awk '{print $1}')
ips_no_host=$(sed -n '4,$p' /etc/hosts | awk '{print $1}')

# 遍历所有节点
for host in $host_list
do
# 设置时区
ssh $host ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 同步硬件时间
ssh $host hwclock --systohc
# 开机自启动
ssh $host echo service ntpd restart >> /etc/rc.d/rc.local
ssh $host echo "hwclock --systohc" >> /etc/rc.d/rc.local
ssh $host chmod +x /etc/rc.d/rc.local
# 安装ntp服务
ssh $host yum install -y -q ntp
done
# 主节点操作,修改配置文件
sed -i -e '21 s/^/# /' -i -e '22 s/^/# /' -i -e '23 s/^/# /' -i -e '24 s/^/# /' /etc/ntp.conf
echo server 127.127.1.0 >> /etc/ntp.conf
echo fudge 127.127.1.0 stratum 10 >> /etc/ntp.conf
service ntpd start
# 从节点操作,开启ntp服务,使用ntpdate命令进行时钟同步
for slave in $ips_no_host
do
ssh $slave service ntpd start
ssh $slave ntpdate -u $master_hostip
done

八、搭建yum本地源

1. 安装httpd和wget服务

1
2
3
4
5
6
# 安装httpd
yum -y install httpd.x86_64
systemctl enable httpd.service
systemctl start httpd.service
# 安装wget
yum -y install wget

2. 下载ambari和hdp包

1
2
3
4
5
6
7
8
9
# 将tar包下载到/var/www/html
cd /var/www/html
wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.1.0/ambari-2.7.1.0-centos7.tar.gz
wget http://public-repo-1.hortonworks.com/HDP/centos7/3.x/updates/3.0.1.0/HDP-3.0.1.0-centos7-rpm.tar.gz
wget http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-centos7.tar.gz
# 解压上面三个包
tar zxvf ambari-2.7.1.0-centos7.tar.gz
tar zxvf HDP-3.0.1.0-centos7-rpm.tar.gz
tar zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz

3. 新建repo文件

  • 新建ambari.repo文件
1
2
3
4
5
[ambari]
name=ambari
baseurl=http://node1.ambari.com/CentOS-7/ambari-2.6.0.0
enabled=1
gpgcheck=0
  • 新建HDP.repo文件
1
2
3
4
5
6
[HDP]
name=HDP
baseurl=http://node1.ambari.com/CentOS-7/HDP
path=/
enabled=1
gpgcheck=0
  • 新建HDP-UTILS.repo文件
1
2
3
4
5
6
[HDP-UTILS]
name=HDP-UTILS
baseurl=http://liuyzh1.xdata/CentOS-7/HDP-UTILS
path=/
enabled=1
gpgcheck=0

将以上文件放入/etc/yum.repos.d/目录下。

九、在主节点安装ambari-server

1. 安装

1
yum -y install ambari-server

2. 将mysql-connector-java.jar拷贝到/usr/share/java目录下

3. 修改配置文件

1
echo server.jdbc.driver.path=/usr/share/java/mysql-connector-java.jar >> /etc/ambari-server/conf/ambari.properties

4. 安装ambari-server

1
ambari-server setup

5. 初始化数据库

1
2
3
mysql -uambari -pambari
use ambari;
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql

6. 启动ambari-server

1
ambari-server start

登陆浏览器访问: http://192.168.162.41:8080/ ,利用界面部署集群。

默认登陆账号/密码为:admin/admin。

十. 通过Ambari部署hadoop集群

1. 打开 http://192.168.162.41:8080/

2. 点击 “LAUNCH INSTALL WIZARD”,开始创建一个集群

img

3. 为集群取一个名字

img

4. 前面我们建了本地的资源库,这里选择 “Use Local Repository”。删除其它的 OS,只留 redhat7 那一行。并且在 Base URL 那一列里填入前面搭建的 web 服务对应的地址。

img

5. 在 “Target Hosts” 里填入 hadoop 集群需要部署到哪些机器。可以填 IP。

SSH Private Key 里选择的文件是Ambari中配置免密登陆到其它机器的那台机器的 id_rsa 这个文件。我用的是 root 帐号,所以这个文件是在 /root/.ssh/ 目录下。

img

6. “Confirm Hosts” 这一步,ambari 会在上面的配置的 hosts 中安装 ambari agent,只需等待即可。

7. 根据需要,选择服务。如果某些服务依赖其它服务,而没有选择依赖的服务的话,点击“Next”时,会做相应的提示。

img

8. 点击 “Next”,如果出现类似下面的警告的话,可以不用管,后续如果需要的话,可以再安装

img

9. “Assign Masters” 这一步,ambari 会自动分配各种服务到不同的机器上。可以手动进行调整。

img

10. “Assign Slaves and Clients” 这一步,手动分配 Hadoop 的 DataNode 节点位置,YARN 的 NodeManager 的位置……

​ 其中 NFSGateway 是通过挂载的方式,像访问本地文件系统一样访问 Hadoop 的文件系统。

​ Phoenix Query Server 是一个HBase的开源SQL引擎。你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,查询你的HBase数据。

img

11. 设置密码。(有一行的 username 是 N/A,比较奇怪,不知道用在哪)

img

12. 数据库配置。如果选择了安装 hive 或 Ranger,需要输入相关的数据库的信息。此例中没有这一步。

13. 目录配置。配置各个服务需要用到的目录。使用默认值即可。

img

14. 创建用户。默认情况下, ambari 会为每个服务创建一个 linux 的用户,用不同的用户启动不同的服务。我设成了同一个用户。

img

15. “ALL CONFIGURATIONS”,这一步可以修改前面的一些配置

img

16. 点击 “Next”后,出现总结页。可以下载创建这个集群的元数据信息。点击 “DEPLOY” 后,就开始部署了。

img