目录
一、简介
本文介绍使用HDP3.14+Ambari2.7.4安装,如果想使用其他的版本,可以去官网查询版本适配
另外,官网也有详细的指导安装流程,可以参照官网Installation
HADOOP主要有3个版本,
- Apache:原生版本,所有发行版均基于这个版本进行改进,
- Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称CDH)
- Hortonworks版本(Hortonworks Data Platform,简称HDP,现已被CDH收购)
Ambari是一个基于web的工具,用于配置、管理、和监控hadoop集群。支持HDFS、Hive、Spark、MapReduce、Sqoop、Zookeeper、Kafka等服务,Ambari还提供了集群状况仪表盘。
HDP是hortonworks的软件栈,里面包含了hadoop生态系统的所有软件。
二、环境准备
机器 | 3台 |
安装包 | ambari,HDP,HDP-UTILS |
规格 | 3台服务器,4c16g |
系统 | centos7 |
软件 | java8,mysql7+,ambari-2.7.4.0-centos7.tar.gz、HDP-3.1.4.0-centos7-rpm.tar.gz、HDP-UTILS-1.1.0.22-centos7.tar.gz |
1.关闭防火墙
为了在安装过程中与它部署和管理的主机通信,某些端口必须是开放的和可用的。最简单的方法是暂时禁用iptables
systemctl status firewalld # 通过此命令查看防火墙状态
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 关闭防火墙开机自启
安装完成后,可以重新启动iptables。如果您的环境中的安全协议不允许禁用iptables,那么如果所有所需的端口都是开放的且可用的,那么您可以继续启用iptables。
Ambari在Ambari服务器设置过程中检查iptables是否正在运行。如果iptables正在运行,将显示一个警告,提醒您检查所需的端口是否开放且可用。“群集安装向导”中的“主机确认”步骤还会对运行iptables的每台主机发出警告。
2.修改主机名
修改本机名
hostnamectl set-hostname hdp01
设置好之后可以查看修改之后的本机名,注意要加上-f
hostname -f
3.配置域名映射
三台机器都 vim /etc/hosts文件,使3台机器之间可以通过hdp01,hdp02,hdp03访问,不要删除前2行
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
ip1 hdp01
ip2 hdp02
ip3 hdp03
修改完之后,可通过scp命令将hosts文件发送到其他虚拟机。
scp /etc/hosts hdp02:/etc/
scp /etc/hosts hdp03:/etc/
测试是否可以通过ping主机名找到对应服务器
ping hdp01
4.配置网络文件
每台主机设置所需的网络配置 vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=<fully.qualified.domain.name>
5.检查最大文件打开数
建议打开的文件描述符的最大数量为10000或更多。在每台机器上执行
//查看文件最大打开数
ulimit -Sn
ulimit -Hn
//如果文件最大打开数低于1W,则设置为1W
ulimit -n 10000
6.配置免密
配置hdp01分别到hdp01,hdp02,hdp03的免密登录。
参照centos免密登录_q495673918的博客-CSDN博客
7.时间同步
如果每台机器都可以访问网络则直接每台机器都安装ntp服务
yum install -y ntp
systemctl enable ntpd
如果只有一台机器可以访问网络则这里选一台服务器作时间服务器,这里以hdp1作为时间服务器,其他服务器以时间服务器时间为准
1.时间服务器配置(root用户)
1.安装ntp服务
yum install -y ntp
2.修改ntp配置文件
修改/etc/ntp.conf文件
vi /etc/ntp.conf
2.1 授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间
修改
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
为
restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap #我这里使用的网段为80,具体网段根据服务器的ip而定
2.2 集群在局域网和非局域网时间配置
集群在局域网中,不使用其他互联网上的时间
修改
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
集群使用互联网时间,这里使用阿里云时间服务器的时间
# 将原来的注释掉
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 添加如下
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst
2.3 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
3.启动ntp服务并设置开机自启
systemctl start ntpd # 启动ntpd服务
systemctl enable ntpd # 配置ntpd服务开机自启
2.其他服务器配置(root用户)
1.非时间服务器都安装ntpdate服务
yum install -y ntpdate
2.同步时间
ntpdate hdp1
3.定时同步时间
通过crontab编写定时任务
crontab -e
# 添加如下内容
29,59 * * * * /usr/sbin/ntpdate hdp1 # 每小时的第29分和59分同步一次时间
到达时间点后通过date
命令查看时间是否已经同步,当然配置间隔时间更短的任务,这样可以更快的看到效果。
8.安装JDK(所有节点)
参照centos7下通过yum安装java8_q495673918的博客-CSDN博客
9.安装mysql
参照centos下mysql5.7安装_q495673918的博客-CSDN博客
10.上传安装包
ambari和hdp的包比较大,且因为是国外的网站下载速度感人,最不幸的是现在hdp官网已经要收费了,所以我们使用迅雷下载,迅雷有缓存服务器不会直接连国外的网站,所以要快很多,如果我们自己的电脑网速比较慢,我们还可以买个阿里云的ecs,系统使用windows,然后绑定弹性ip,带宽设置为按量付费,这样几分钟就下完了,费用也很便宜,然后再下载一个xshell上传文件至服务器,因为有文件超过了4g我们需要下载个sftp工具上传大文件。
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.4.0/ambari-2.7.4.0-centos7.tar.gz
http://public-repo-1.hortonworks.com/HDP/centos7/3.x/updates/3.1.4.0/HDP-3.1.4.0-centos7-rpm.tar.gz
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-centos7.tar.gz
下载好之后,上传到hdp01这一台服务器就好,不用上传到另外2台服务器
11.关闭SELinux
必须禁用SELinux才能使Ambari设置正常工作。在集群中的每个主机上,输入安装ambari-server的时候是需要关闭SELinux的,我们这里先查看SELinux是否是关闭的,如果是开启的则提前将其关闭
#查看SELinux是否是关闭的
more /etc/selinux/config
# 临时性关闭(立即生效,但是重启服务器后失效)
setenforce 0 #设置selinux为permissive模式(即关闭)
setenforce 1 #设置selinux为enforcing模式(即开启)
# 永久性关闭(这样需要重启服务器后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
12.check UMASK
大多数Linux发行版将022设置为默认的umask值。umask值022授予新文件或文件夹的读、写、执行权限755。umask值为027时,对新文件或文件夹授予750的读、写、执行权限。
Ambari、HDP和HDF支持umask值为022(0022功能等效)、027(0027功能等效)。必须在所有主机上设置这些值
//查看 umask
umask
//设置 umask 如果查看的umask不是0022的话则需要设置
umask 0022
//永久更改所有交互用户的umask
echo umask 0022 >> /etc/profile
13.修改YUM源,实现离线安装
1.hdp01安装httpd服务
yum -y install httpd #安装
systemctl start httpd #启动
systemctl status httpd #查看启动状态
chkconfig httpd on #设置开机启动
2.把上传的ambari,HDP,HDP-UTILS都解压到/var/www/html这个目录下
httpd安装好之后,可以看到原来目录下就有了/var/www/html这个目录,不用自己创建目录
tar -zxvf ambari-2.7.4.0-centos7.tar.gz -C /var/www/html/
tar -zxvf HDP-3.1.4.0-centos7-rpm.tar.gz -C /var/www/html/
tar -zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html/
3.配置基础源
在/etc/yum.repos.d/目录下创建ambari.repo
[ambari-2.7.4.0]
name=ambari
baseurl=http://hdp01/ambari/centos7/2.7.4.0-118
gpgkey=http://hdp01/ambari/centos7/2.7.4.0-118/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
gpgcheck=1
enabled=1
priority=1
[HDP-3.1.4.0]
name=HDP Version - HDP-3.1.4.0
baseurl=http://hdp01/HDP/centos7/3.1.4.0-315/
gpgcheck=1
gpgkey=http://hdp01/HDP/centos7/3.1.4.0-315/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
[HDP-UTILS-1.1.0.22]
name=HDP-UTILS Version - HDP-UTILS-1.1.0.22
baseurl=http://hdp01/HDP-UTILS/centos7/1.1.0.22/
gpgcheck=1
gpgkey=http://hdp01/HDP-UTILS/centos7/1.1.0.22/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
安装createrepo
yum install yum-utils createrepo yum-plugin-priorities -y
生成本地源
createrepo ./
清除yum缓存
yum clean all
yum makecache
yum repolist
将前面创建的ambari.repo复制到hdp02,hdp03
scp ambari.repo hdp02:$PWD
scp ambari.repo hdp03:$PWD
三、安装ambari-server
1.安装ambari-server
在hdp01执行
yum -y install ambari-server
2.安装jdbc驱动
jdbc驱动在后面设置ambari时要用到
yum install -y mysql-connector-java
3.ambari-server设置
[root@hdp01 yum.repos.d]# ambari-server setup
Using python /usr/bin/python
Setup ambari-server
Checking SELinux...
SELinux status is 'disabled'
Customize user account for ambari-server daemon [y/n] (n)? y
Enter user account for ambari-server daemon (root):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: /usr/lib/jvm/java-1.8.0
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):
Port (3306):
Database name (ambari):
Username (ambari): root
Enter Database Password (bigdata):
Re-enter password:
Configuring ambari database...
Should ambari use existing default jdbc /usr/share/java/mysql-connector-java.jar [y/n] (y)? y
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.
如果设置误操作,我们可以删除安装文件再重新安装
rpm -e ambari-server-2.7.4.0-118.x86_64
yum -y install ambari-server
四、创建ambari数据库
在前面安装好的数据库中创建ambari数据库,并初始化数据库ambari库
create database ambari;
use ambari;
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;
GRANT ALL PRIVILEGES ON ambari.* TO root@'%' IDENTIFIED BY '123456';#授权host hdp01可以访问这个库
五、启动ambari
服务启动成功会监听8080端口,失败的话可以查看日志/var/log/ambari-server/ambari-server.log
[root@hdp01 yum.repos.d]# ambari-server start
Using python /usr/bin/python
Starting ambari-server
Ambari Server running with administrator privileges.
Organizing resource files at /var/lib/ambari-server/resources...
Ambari database consistency check started...
Server PID at: /var/run/ambari-server/ambari-server.pid
Server out at: /var/log/ambari-server/ambari-server.out
Server log at: /var/log/ambari-server/ambari-server.log
Waiting for server start................................
Server started listening on 8080
DB configs consistency check: no errors and warnings were found.
Ambari Server 'start' completed successfully.
六、安装Hadoop集群
1.登录ambari web
使用浏览器登录http://hdp01:8080,账号密码admin/admin
2.开始安装
点击LAUNCH INSTALL WIZARD
3.集群命名
给集群起个名字
4.hdp版本选择
选择版本,我们服务器用的是centos7所以删除其他的保留redhat7就好,并修改本地源地址
5.集群拥有的节点
加节点信息,并将主节点私钥信息填入,用于集群免密码登录
私钥地址:cat /root/.ssh/id_rsa
6.集群host验证
如果报错提示
Ambari agent machine hostname (iz8vb4j5e67uyxxv6kztxoz) does not match expected ambari server hostname (hdp01). Aborting registration. Please check hostname, hostname -f and /etc/hosts file to confirm your hostname is setup correctly
解决:
cat /etc/ambari-agent/conf/ambari-agent.ini
发现hostname=iz8vb4j5e67uyxxv6kztxoz 不是我们前面设置的hdp01
hostname -f
iz8vb4j5e67uyxxv6kztxoz
发现是hosts配置的有点问题 我们删除hdp01前面的iz8vb4j5e67uyxxv6kztxoz再试试
vim /etc/hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
ip iz8vb4j5e67uyxxv6kztxoz iz8vb4j5e67uyxxv6kztxoz hdp01
删除ambari-agent再试发现可以了
rpm -e ambari-agent*
rm -rf /etc/ambari-agent
yum -y install ambari-agent
7.框架选择
选择要安装的框架
8.节点资源分配
9.安装从机及客户端
NFSGateway:HDFS的NFS网关允许客户端挂载HDFS并通过NFS与其进行交互,就像它是本地文件系统的一部分一样。
我们这里不需要这个功能所以不勾选,假如我们在多台机器上有文件需要上传到hdfs上时,我们可以先scp到一台机器上,然后hadoop fs -put上传到hdfs上。
10.账号设置
设置服务对应的账号和密码,然后下一步
11.创建hive数据库
在mysql客户端创建hive用户及授权,密码为上一步设置的密码。
create database hive;
CREATE USER 'hive'@'%'IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%';
FLUSH PRIVILEGES;
创建hive库之后填写连接信息
如果test connetion报错
The MySQL JDBC driver has not been set ……ambari-server setup --jdbc-db=mysql --jdbc-driver=/path/to/jdbc_driver
那么在hdp01执行
ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
12.组件路径设置
13.组件用户
14.集群资源设置
15.等待安装
16.安装完成
7.hive设置(可选)
1.修改hive表存储格式
调整hive.default.fileformat,hive.default.fileformat.managed这2个参数即可,习惯一般使用textfile
然后重启hive,再进入hive客户端创建表发现表格式已经改变
2.设置hive表存储位置
设置hive-site.xml中hive.metastore.warehouse.dir,hive.metastore.warehouse.external.dir这2个参数即可,需要注意的是如果是以前建好的数据库,在里面建表不会改变新表的存储位置,需要重新建一个库,在这个库里面的新表的存储位置才会
hive.metastore.warehouse.dir=/apps/hive/managed/warehouse
hive.metastore.warehouse.external.dir=/apps/hive/external/warehouse
重启hive,发现hdfs中已经自动给我们创建好了这2个目录
3.设置hive表创建为非事务表
修改hive-site.xml下面参数,让默认创建的表不是acid表
hive.strict.managed.tables=false
hive.create.as.insert.only=false
metastore.create.as.acid=false
8.spark设置(可选)
1.spark使用hive数仓
效果:hive建立外部表,使用sparksql连接hive元数据。
1、备份hive-site.xml
先将安装好的spark conf目录下生成的hive-site.xml重命名备份(其实用不到)
cd /usr/hdp/版本/spark2/conf/
mv hive-site.xml hive-site.xml.bak
2、拷贝hive中的hive-site.xml
将hive目录下的hive-site.xml拷贝过来,前提是hive可以正常工作,使用tez没有问题,元数据库一切配置完成。
cp /usr/hdp/版本/hive/conf/hive-site.xml ./
3、删除tez相关配置
编辑spark/conf/hive-site.xml,查找所有tez相关配置并删除。
4、修改spark配置并重启spark服务
将默认的连接spark内置hive元数据指定为hive,属性metastore.catalog.default由spark改成hive