Ambari 部署Hadoop 大数据集群

一、Ambari 介绍

Apache Ambari 项目旨在通过开发用于配置、管理和监控 Apache Hadoop 集群的软件来简化 Hadoop 管理。Ambari 提供了一个直观、易于使用的 Hadoop 管理 Web UI,由其 RESTful API 支持。

Ambari 使系统管理员能够:

  • 配置 Hadoop 集群

    • Ambari 提供了一个分步向导,用于在任意数量的主机上安装 Hadoop 服务。
    • Ambari 处理集群的 Hadoop 服务配置。
  • 管理 Hadoop 集群

    • Ambari 为启动、停止和重新配置整个集群的 Hadoop 服务提供集中管理。
  • 监控 Hadoop 集群

    • Ambari 提供了一个仪表板,用于监控 Hadoop 集群的运行状况和状态。
    • Ambari 利用Ambari Metrics System进行指标收集。
    • Ambari 利用Ambari Alert Framework进行系统警报,并会在需要您注意时通知您(例如,节点出现故障、剩余磁盘空间不足等)。

Ambari 使应用程序开发人员和系统集成商能够:

  • 使用Ambari REST API将 Hadoop 资源调配、管理和监控功能轻松集成到自己的应用程序中。

二、Ambari 有什么新功能?

  • Ambari 的最新版本是 Ambari 2.7.5。
  • Ambari 2.7.0 添加了以下功能:
    • Ambari UI、Ambari Server 和 Ambari Agent 已经过重大修改,以更有效地处理大型集群管理
    • 为了更有效地管理大型集群,更新了 AMS 架构,并改进了指标聚合。
    • 更新了默认配置和配置建议,以确保 AMS 开箱即用。
    • 添加了对轻松添加和管理新 HDFS 命名空间的支持。
    • 添加了对管理 ViewFS 挂载表配置的支持。
    • 添加了 FreeIPA 作为受支持的 KDC 实现。
    • 添加了对新 Isilon 管理包的支持,可用于在现有 Isilon OneFS 上轻松安装 HDP。
    • Ambari Infra Solr 现在使用 Solr 7。
    • Amazon Linux 现在是受支持的部署平台。
    • 常见的自定义属性现在可以在安装过程中在一处进行配置,从而更容易快速配置安装。
    • 添加了团队快速查看谁发起了添加服务、添加主机、启用 HA 等操作的功能。
    • 添加了团队快速查看谁执行了重新启动服务等操作的功能。
    • 向部署了许多组件的大型集群添加服务时更容易找到主机。
    • 添加了向多个主机批量添加和删除组件的功能。
    • 添加了批量删除主机的功能。
    • 在 Ambari Server 中创建了一个新的 API 门户,以快速了解和试用 Ambari API。导航到 http://ambari.server:8080/api-docs 以查看门户的文档。
    • 使为 Ambari、Atlas 和 Ranger 设置 SSO 变得更加容易。
  • Ambari 2.6.2 添加了以下功能:
    • 保护 Zeppelin Notebook SSL 凭证
    • 设置适当的 HTTP 标头以将 Cloud Object Stores 与 HDP 结合使用
  • Ambari 2.6.1 添加了以下功能:
    • 通过 Ambari 有条件地安装 LZO 包 (AMBARI-22457)

三、开始使用 Ambari

参考:Ambari 2.7.5安装指南进行操作

2.7.5编译所依赖的maven包不全,所以退了求其次选择2.7.4编译好的安装包进行部署

主机名IP地址本地源服务部署组件大数据组件JDK版本
hadoop110.10.8.11yum本地源Ambari-Server、Ambari-Agent、Nginx、MySQLHDFS、ZK、Kafka、Hbase、YARNjdk1.8
hadoop210.10.8.12Ambari-AgentHDFS、ZK、Kafka、Hivejdk1.8
hadoop310.10.8.13Ambari-AgentHDFS、ZK、Kafka、jdk1.8

软件准备(HDP-3.1.4.0是最后一个可以下载到的开源版本),使用讯雷下载

安装包名下载地址
ambari-2.7.4.0-centos7.tar.gzhttp://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.4.0/ambari-2.7.4.0-centos7.tar.gz
HDP-3.1.4.0-centos7-rpm.tar.gzhttp://public-repo-1.hortonworks.com/HDP/centos7/3.x/updates/3.1.4.0/HDP-3.1.4.0-centos7-rpm.tar.gz
HDP-UTILS-1.1.0.22-centos7.tar.gzhttp://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-centos7.tar.gz
HDP-GPL-3.1.4.0-centos7gpl.tar.gzhttp://public-repo-1.hortonworks.com/HDP-GPL/centos7/3.x/updates/3.1.4.0/HDP-GPL-3.1.4.0-centos7gpl.tar.gz
mysql-connector-java-8.0.22.jarhttps://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.22/mysql-connector-java-8.0.22.jar

3.1 配置本地 yum 源

3.1.1 配置 nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@hadoop1 ~]# yum install -y nginx
[root@hadoop1 ~]# vim /etc/nginx/nginx.conf
server {
listen 80;
server_name 10.10.8.11;

location / {
root /tmp/ambari_repo/;
autoindex on;
autoindex_localtime on;
autoindex_exact_size off;
}
}

[root@hadoop1 ~]# nginx -s reload

3.1.2 导入下载的镜像

1
2
3
4
[root@hadoop1 ~]# cd /tmp/ambari_repo/
[root@hadoop1 ambari_repo]# tar -xf ambari-2.7.4.0-centos7.tar.gz
[root@hadoop1 ambari_repo]# tar -xf HDP-3.1.4.0-centos7-rpm.tar.gz
[root@hadoop1 ambari_repo]# tar -xf HDP-UTILS-1.1.0.22-centos7.tar.gz

用浏览器访问nginx服务,会有如下页面

图片1

3.1.3 安装本地源工具

1
[root@hadoop1 ambari_repo]# yum install yum-utils createrepo yum-plugin-priorities -y

3.1.4 配置 ambari 本地源

创建本地源

1
[root@hadoop1 ambari_repo]# createrepo  ./

修改ambari 源

1
2
3
4
5
6
7
8
[root@hadoop1 ~]# vim /etc/yum.repos.d/ambari.repo
[ambari-2.7.4.0]
name=ambari Version - ambari-2.7.4.0
baseurl=http://10.10.8.11/ambari/centos7/2.7.4.0-118
gpgcheck=1
gpgkey=http://10.10.8.11/ambari/centos7/2.7.4.0-118/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1

修改HDP 源

1
2
3
4
5
6
7
8
[root@hadoop1 ~]# vim /etc/yum.repos.d/hdp.repo
[HDP-3.1.4.0]
name=HDP-GPL Version - HDP-GPL-3.1.4.0
baseurl=http://10.10.8.11/HDP/centos7/3.1.4.0-315
gpgcheck=1
gpgkey=http://10.10.8.11/HDP/centos7/3.1.4.0-315/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1

修改HDP-UTILS 源

1
2
3
4
5
6
7
8
[root@hadoop1 ~]# vim /etc/yum.repos.d/hdp-utils.repo
[HDP-UTILS-1.1.0.22]
name=HDP-UTILS Version - HDP-UTILS-1.1.0.22
baseurl=http://10.10.8.11/HDP-UTILS/centos7/1.1.0.22
gpgcheck=1
gpgkey=http://10.10.8.11/HDP-UTILS/centos7/1.1.0.22/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1

3.1.5 加载 yum缓存

1
2
[root@hadoop1 ~]# yum clean all
[root@hadoop1 ~]# yum makecache

3.2 安装 ambari-server

1
[root@hadoop1 ~]# yum -y install ambari-server

ambari-server 默认使用内置的postgresql数据库,为了方便统一管理这里使用mysql作为数据库

建立mysql与ambari连接

1
2
3
4
5
6
[root@hadoop1 ~]# cp mysql-connector-java-8.0.22.jar /usr/share/java/mysql-connector-java.jar
[root@hadoop1 ~]# cp /usr/share/java/mysql-connector-java.jar /var/lib/ambari-server/resources/mysql-jdbc-driver.jar

#ambari配置文件中添加mysql jar包
[root@hadoop1 ~]# vim /etc/ambari-server/conf/ambari.properties
server.jdbc.driver.path=/usr/share/java/mysql-connector-java.jar

配置MySQL ambari用户

1
2
3
mysql> create database ambari;

mysql> grant ALL PRIVILEGES ON ambari.* to "ambari"@"%" identified by "密码" WITH GRANT OPTION;

配置ambari-server

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[root@hadoop1 ~]# ambari-server setup
Using python /usr/bin/python
Setup ambari-server
Checking SELinux...
SELinux status is 'enabled'
SELinux mode is 'enforcing'
Temporarily disabling SELinux
WARNING: SELinux is set to 'permissive' mode and temporarily disabled.
OK to continue [y/n] (y)?
Customize user account for ambari-server daemon [y/n] (n)? y
Enter user account for ambari-server daemon (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: /home/hadoop/jdk1.8.0_301 #我这里JDK放在hadoop用户下,是因为后面安装hadoop相关组件都使用hadoop用户,后面安装组件想使用默认用户的这里最好选择一个公共目录
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)? n
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): localhost
Port (3306):
Database name (ambari): #ambari使用的数据库名
Username (ambari): ambari #ambari服务连接数据库的用户
Enter Database Password (bigdata): #ambari服务连接数据库的密码
Re-enter password: #再次输入密码
Configuring ambari database...
Enter full path to custom jdbc driver: /usr/share/java/mysql-connector-java-5.1.46.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.4.0.118.jar
....
Ambari repo file doesn't contain latest json url, skipping repoinfos modification
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.

注意:WARNING 处提示需要将路径 /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql 的sql导入到ambari服务使用的库中

设置ambari-server的mysql驱动路径

1
[root@hadoop1 ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar

启动ambari-server

1
[root@hadoop1 ~]# ambari-server start

启动完后使用浏览器访问ambari地址: http://ip:8080/ ,默认用户 admin/admin

图片2

3.3 安装 ambari-agent

在需要运行hadoop集群的服务器上安装ambari-agent(在后面部署hadoop的时候可以自动在节点安装agent,所以这一步是非必要的)

1
2
3
4
5
[root@hadoop1 ~]# yum install ambari-agent -y
[root@hadoop1 ~]# vim /etc/ambari-agent/conf/ambari-agent.ini
#hadoop1是安装ambari-server的服务器名称
[server]
hostname=hadoop1

到这里Ambari平台就安装完了

如果想更改配置信息

停止
ambari-server stop

重置
ambari-server reset

重新设置
ambari-server setup

四、部署 Hadoop 集群

接下来部署和运行集群使用hadoop用户

所有hadoop服务器上创建hadoop运行用户

1
2
3
4
5
6
7
[root@hadoop1 ~]# groupadd hadoop
[root@hadoop1 ~]# useradd -u 501 hadoop -g hadoop
[root@hadoop1 ~]# passwd hdfs

#配置hadoop用户sudo权限
[root@hadoop1 ~]# vim /etc/sudoers
hadoop ALL=(ALL) NOPASSWD:ALL

配置hosts解析或内网DNS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[hadoop@hadoop1 ~]$ sudo vim /etc/hosts
10.10.8.11 hadoop1
10.10.8.12 hadoop2
10.10.8.13 hadoop3

[hadoop@hadoop2 ~]$ sudo vim /etc/hosts
10.10.8.11 hadoop1
10.10.8.12 hadoop2
10.10.8.13 hadoop3

[hadoop@hadoop3 ~]$ sudo vim /etc/hosts
10.10.8.11 hadoop1
10.10.8.12 hadoop2
10.10.8.13 hadoop3

配置SSH免密登录

1
2
3
4
[hadoop@hadoop1 ~]$ ssh-keygen
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop@hadoop1
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop@hadoop2
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop@hadoop3

所有hadoop服务器配置JDK环境,这里的JDK环境变量是配置在hadoop用户下的

1
2
3
4
5
6
[hadoop@hadoop1 ~]$ tar xf downloads/jdk-8u301-linux-x64.tar.gz
[hadoop@hadoop1 ~]$ vim .bash_profile
export JAVA_HOME=/home/hadoop/jdk1.8.0_301
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

重新打开终端或切换hadoop用户使环境变量生效

4.1 使用安装向导创建集群

访问ambari地址: http://ip:8080/ ,使用安装向导创建集群

图片3

4.2 输入集群名称

图片4

4.3 选择 hadoop 集群版本

选择hadoop集群版本,也可以自己下载离线包上传

图片5

我这里使用的centos7系统,本地库只保留一个redhat7的配置,并将yum源文件中的hdp和hdp-utils地址复制过来

图片6

4.4 添加 hadoop 节点

添加hadoop节点主机名,并上传密钥(先做好免密登录,这里使用的是hadoop用户)

图片7

4.5 等待安装完成

等待 ambari-agent 安装完成

图片8

4.6 安装大数据组件

选择需要的大数据组件进行安装

图片9

4.7 分配大数据组件

图片10

4.8 配置节点的角色

图片11

4.9 帐号密码配置

图片13

如果添加了hive组件,需要配置数据库连接,注意数据库地址

1
2
3
4
5
#mysql数据库添加hive用户权限

mysql> create database hive;
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY '密码';
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' WITH GRANT OPTION;

图片12

配置大数据相关存储目录,这个根据实际环境进行调整应使用单独的磁盘

图片14

服务运行用户配置,默认会为每个服务创建以服务名为代表的用户,并使用该用户启动服务,如果想统一运行用户可以将 Username 改为你需要的用户

图片15

存储路径和内存配置

图片16

4.10 开始部署

将配置信息都确认完后,便可以开始部署了

图片17

图片18

等待部署完成

如果结果显示有黄色警告,配置已经成功了,只是由于某个服务没有正常启动导致的。

4.11 启动集群

部署完后就可以通过ambari管理hadoop集群了

图片19

图片20

4.12 可能遇到的问题

集群启动过程中可能遇到的问题

Timeline Service V2.0 Reader 无法启动

报错:

resource_management.core.exceptions.ExecuteTimeoutException: Execution of 'ambari-sudo.sh su hadoop -l -s /bin/bash -c 'export PATH='"'"'/usr/sbin:/sbin:/usr/lib/ambari-server/*:/usr/sbin:/sbin:/usr/lib/ambari-server/*:/root/jdk1.8.0_301/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/downloads/apache-maven-3.6.3/bin:/root/bin:/var/lib/ambari-agent:/var/lib/ambari-agent'"'"'; sleep 10;export HBASE_CLASSPATH_PREFIX=/usr/hdp/3.1.4.0-315/hadoop-yarn/timelineservice/*; /usr/hdp/3.1.4.0-315/hbase/bin/hbase --config /usr/hdp/3.1.4.0-315/hadoop/conf/embedded-yarn-ats-hbase org.apache.hadoop.yarn.server.timelineservice.storage.TimelineSchemaCreator -Dhbase.client.retries.number=35 -create -s'' was killed due timeout after 300 seconds

解决方法:

勾选yarn配置文件中的 is_hbase_system_service_launchuse_external_hbase 选项,并重启服务

图片21

-------------本文结束感谢您的阅读-------------