(自己安装多遍,踩过各种坑,终于趟顺了,下面绝对完整版)
(安装6、7的步骤一样,只是相关执行命令6、7会有差别)
1.1 Ambari
Ambari的作用来说,就是创建、管理、监视 Hadoop的集群。Ambari自身也是一个分布式架构的软件,主要由两部分组成:Ambari Server和 Ambari Agent。简单来说,用户通过Ambari Server通知 Ambari Agent安装对应的软件;Agent会定时地发送各个机器每个软件模块的状态给 Ambari Server,最终这些状态信息会呈现在Ambari的 GUI,方便用户了解到集群的各种状态,并进行相应的维护。
1.2 HDP
HDP是hortonworks的软件栈,里面包含了hadoop生态系统的所有软件项目,比如HBase,Zookeeper,Hive,Pig等等。
1.3 HDP-UTILS
HDP-UTILS是工具类库。
2 搭建环境
虚拟机操作系统: CentOS6.5 64位
JDK:jdk-1.8.0_121
Ambari:2.4.2.0
HDP:2.5.3.0
HDP-UTILS:1.1.0.21
Mysql:mysql-5.7.20-1.el6.x86_64.rpm-bundle
2.1服务器安装准备工作(要离线安装所以下面的软件要提前下载好)
2.1.1下载CentOS6.5 ISO文件
http://mirrors.yun-idc.com/centos/6/isos/x86_64/CentOS-6.5-x86_64-Everything-1611.iso
2.1.2下载以下三种仓库软件包(tar.gz文件)
HDP Repository
http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.5.3.0/HDP-2.5.3.0-centos6-rpm.tar.gz
HDP-Utils Repository
Ambari Repository
http://public-repo-1.hortonworks.com/ambari/centos6/ambari-2.4.2.0-centos6.tar.gz
注意:
①由于centos和redhat的版本是一一对应的,所以Redhat6.5对应centos6,Redhat7.3对应centos7
②路径的版本号可以根据自己需要进行调整,比如ambari-2.1.0-centos6 可以 换成 ambari-2.6.0-centos6
2.1.3下载MySQL文件
Mysql rpm安装包:
https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar
Mysql驱动包:
https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.45.zip
2.1.4下载jdk-8u112-linux-x64.tar.gz
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
2.2Ambari安装准备工作(所有机器)
2.2.1 配置主机名
为了后续操作方便,确保机器的hostname是我们想要的。拿192.168.90.43这台机器为例,用root账户登录
修改主机名:vim /etc/hostname
把原来的内容修改为 master。
类似的,将其他两个机器,分别改名为slave1和slave2。
每当RedHat安装成功时,我们的机器名都是默认的,但为了以后集群中能够容易分辨各台服务器,需要给每台机器取个不同的名字。
修改网络配置文件:vim /etc/sysconfig/network
将HOSTNAME后面的值改为想要设置的主机名,然后重启即可。
1. # Created by anaconda
2. NETWORKING=yes
3. HOSTNAME=master
类似的,将其他两个机器,分别改名为slave1和slave2。
配置所有节点:
修改/etc/hosts文件
修改这3台机器的/etc/hosts文件,在文件中添加以下内容:
1. 192.168.168.200 master
2. 192.168.168.201 slave1
3. 192.168.168.202 slave2
配置完成后使用ping命令检查这3个机器是否相互ping得通,以master为例,
执行命令:ping slave1
执行命令:ping slave2
ping得通,说明机器是互联的,而且hosts配置也正确。
2.2.4关闭每台机器的防火墙
1. #停止iptables
2. Service iptables stop
3. #禁止iptables开机启动
4. Chkconfig iptables off
2.2.5关闭每台机器的Selinux
注意,在集群的每个节点,都要关闭Selinux。
使用sestatus -v 命令,查看Selinux状态。
如果不是disable状态,编辑/etc/sysconfig/selinux 文件
vi /etc/sysconfig/selinux
把里边的一行改为
SELINUX=disabled
保存,然后重启机器。
2.2.6关闭每台机器的THP服务(CentOS7没有redhat_transparent_hugepage所以只要关闭上面两个即可)
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enable
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrage
echo never > /sys/kernel/mm/transparent_hugepage/enable
Echo never > /sys/kernel/mm/transparent_hugepage/defrage
2.2.7配置每台机器的无密码登陆(SSH)
给3个机器生成秘钥文件
以master为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是:
1. [root@master .ssh]# ssh-keygen -t rsa -P ''
因为我现在用的是root账户,所以秘钥文件保存到了/root/.ssh/目录内,可以使用命令查看,命令是:
1. ls /root/.ssh/
使用同样的方法为slave1和slave2生成秘钥(命令完全相同,不用做如何修改):
1. [root@slave1 ~]# ssh-keygen -t rsa -P ''
1. [root@slave2 ~]# ssh-keygen -t rsa -P ''
登录master机器,输入命令:
1. [root@master ~]# cd /root/.ssh
2. [root@master .ssh]# cp id_rsa.pub authorized_keys
将id_rsa.pub公钥拷贝重命名为authorized_keys文件。
登录slave1和slave2机器,将其他主机的公钥文件内容都拷贝到master主机上的authorized_keys文件中,命令如下:
1. #登录slave1,将公钥拷贝到master的authorized_keys中
2. [root@slave1 ~]# ssh-copy-id -i master
1. #登录slave2,将公钥拷贝到master的authorized_keys中
2. [root@slave2 ~]# ssh-copy-id -i master
授权authorized_keys文件
登录master,在.ssh目录下输入命令:
1. [root@master .ssh]# cd /root/.ssh
2. [root@master .ssh]# chmod 600 authorized_keys
将authorized_keys文件复制到其他机器
1. [root@master .ssh]# scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
2. [root@master .ssh]# scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录。
测试连接成功的情况:
在每台机器上机器上运行:
1. [root@master ~]# ssh master date
2. 2017年 12月 10日 星期日 20:58:31 CST
3. [root@master ~]# ssh slave1 date
4. 2017年 12月 10日 星期日 20:58:31 CST
5. [root@master ~]# ssh slave2 date
6. 2017年 12月 10日 星期日 20:58:43 CST
至此,免密码登录已经设定完成!
2.2.8 同步时间
选择局域网中的一台机器作为ntp服务器,以master机器为例
在master机器上需安装并启动ntpd
1. [root@master ~]# service ntpd start
其他机器必须关闭ntpd
1. [root@slave1 ~]# service ntpd stop
1. [root@slave2 ~]# service ntpd stop
修改master机器上的ntp服务器文件
1. Vim /etc/ntp.conf
添加以下配置:
1. server 127.127.1.0
2. fudge 127.127.1.0 stratum 8
注意:后面那个数字在0-15之间都可以,这样就将这台机器的本地时间作为ntp服务提供给客户端。
配置局域网内的其他机器:
1. vim /etc/ntp.conf
注释掉原来的外网时间服务器,添加master机器的IP:
server 192.168.90.43
Master机器上重启ntpd服务
1. [root@master ~]# service ntpd restart
等几分钟,让ntpd完成自身的时间同步。
可通过以下命令查看状态
1. watch ntpq -p
注意:第6列reach达到17时就可以了,等待的时间是第5列poll的秒数乘以5
其他机器上手动执行:
1. [root@slave1 ~]# ntpdate 192.168.90.43
2. 10 Dec 22:00:21 ntpdate[8854]: step time server 192.168.168.200 offset -86396.562366 sec
1. [root@slave2 ~]# ntpdate 192.168.90.43
2. 10 Dec 22:03:22 ntpdate[8781]: step time server 192.168.168.200 offset 172798.320537 sec
其他机器设置间隔任意时间同步的方法:
查看定时任务指令编写的大致要求
1. [root@slave1 ~]# cat /etc/crontab
2. SHELL=/bin/bash
3. PATH=/sbin:/bin:/usr/sbin:/usr/bin
4. MAILTO=root
5. HOME=/
6.
7. # For details see man 4 crontabs
8.
9. # Example of job definition:
10. # .---------------- minute (0 - 59)
11. # | .------------- hour (0 - 23)
12. # | | .---------- day of month (1 - 31)
13. # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
14. # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
15. # | | | | |
16. # * * * * * user-name command to be executed
1. #添加一个新的定时任务
2. crontab -e
在弹出的新文件编辑框中输入:
1. */15 * * * * ntpdate 192.168.90.43
保存退出,会提示增加了一个新的任务,上面代表(每间隔15分钟向时间服务器192.168.90.43同步一次时间)
查看root用户的定时任务
1. [root@slave1 ~]# crontab -u root -l
2. */15 * * * * ntpdate 192.168.90.43
2.3 搭建Yum源服务器
2.3.1安装yum源
选择master服务器作为http服务器:
1. [root@master ~]# mkdir -p /var/www/html
使用安装系统的ISO镜像文件CentOS-6.5-x86_64-bin-DVD1.iso
把CentOS-6.5-x86_64-bin-DVD1.iso镜像复制到http服务器(选择master机器)的默认目录/var/www/html下
1. [root@master ~]# cd /var/www/html
2. [root@master html]# ls
3. CentOS-6.5-x86_64-bin-DVD1.iso
将ISO文件挂载至文件夹/var/www/html/CentOS下
1. [root@master html]# cd /mnt
2. [root@master html]# mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /var/www/html/CentOS
(取消挂载umount /var/www/html/CentOS)
查看文件夹/var/www/html/CentOS:cd/var/www/html/CentOS
---有内容就表示挂载上了
挂载完成后,进入/etc/yum.repos.d目录:
1. [root@master CentOS]# cd /etc/yum.repos.d/
创建centos.repo:
[centos]
name=centos6.5
baseurl=file:///var/www/html/CentOS
enable=1
gpgcheck=0
修改CentOS-Base.repo,在每一组中添加一行如下内容:enabled=0
运行如下命令:
1. #清除yum的缓存、头文件、已下载的软件包等等
2. yum clean all
1. #重建yum缓存
2. yum makecache
1. #查看已启用的镜像源
2. yum repolist all
ISO镜像yum源搭建OK!!!
将centos.repo、CentOS-Base.repo scp到另外两个机器
2.3.2安装http服务器
本文在集群机器中任选一台机器作为源服务器,以master机器为例
检查系统是否已经安装http服务
1. [root@master ~]# which httpd
2. /usr/sbin/httpd
若没有出现上述/usr/sbin/httpd目录信息,则说明没有安装;如果有,则跳过该步骤!
1. #如果没有安装则执行
2. yum install httpd
若出现目录信息,且工作目录默认在/var/www/html
http服务使用80端口,检查端口是否占用
1. netstat -nltp | grep 80
如果有占用情况,安装完毕后需要修改http服务的端口号
1. vim /etc/httpd/conf/httpd.conf
修改监听端口,Listen 80为其他端口
启动httpd服务器:
1. [root@master ~]# service httpd start
打开浏览器,访问http://192.168.90.43:80,能正确打开网页,服务正常启动
浏览器访问:http://192.168.168.200/CentOS/(能否访问)
2.3.3 制作离线源
Ambari、HDP、HDP-UTILS三个压缩包,提前下好
还有ambari.repo、hdp.repo文件也下载好。
将这三个Ambari及HDP相关安装包复制到http服务器(这里我们选择master机器)的/var/www/html目录下,解压Ambari及HDP相关rpm包,生成相应的目录:
1. [root@master ~]# cd /var/www/html
2. [root@master html]# ls
目录说明:
ambari目录:包含ambari-server,ambari-agent,ambari-log4j等rpm包
HDP目录:包含hadoop的生态圈的组件,比如hdfs,hive,hbase,mahout等
HDP-UTILS-1.1.0.21目录:包含HDP平台所包含的工具组件等,比如nagios,ganglia,puppet等
2.3.4 使用yum源
复制ambari.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)
1. [root@master 2.1.0]# cp ./ambari.repo /etc/yum.repos.d/
复制hdp.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)
1. [root@master 2.3.0.0]# cp ./hdp.repo /etc/yum.repos.d/
配置/etc/yum.repos.d目录下的ambari.repo和hdp.repo文件(该步骤在master机器上执行)
1. [root@master 2.3.0.0]# cd /etc/yum.repos.d
编辑ambari.repo文件:
1. [root@master yum.repos.d]# vim ambari.repo
修改配置为如下内容:
1. #VERSION_NUMBER=2.4.2.0-136
2.
3. [Updates-ambari-2.4.2.0]
4. name=ambari-2.4.2.0 - Updates
5. baseurl=http://192.168.90.43/ambari/centos6/2.4.2.0
6. gpgcheck=1
7. gpgkey=http://192.168.90.43/ambari/centos6/2.4.2.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
8. enabled=1
9. priority=1
10.
编辑hdp.repo文件:
1. [root@master yum.repos.d]# vim hdp.repo
修改配置为如下内容:
1. #VERSION_NUMBER=2.3.0.0-2557
2. [HDP-2.5.3.0]
3. name=HDP Version - HDP-2.5.3.0
4. baseurl=http://192.168.90.43/HDP/centos6
5. gpgcheck=1
6. gpgkey=http://192.168.90.43/HDP/centos6/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
7. enabled=1
8. priority=1
9.
10. [HDP-UTILS-1.1.0.21]
11. name=HDP Utils Version - HDP-UTILS-1.1.0.21
12. baseurl=http://192.168.90.43/HDP-UTILS-1.1.0.21/repos/centos6
13. gpgcheck=1
14. gpgkey=http://192.168.90.43/HDP-UTILS-1.1.0.21/repos/centos6/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
15. enabled=1
16. priority=1
2.3.5 复制repo文件到其他机器的/etc/yum.repo.d/目录下
2.4 安装MySQL(为了后续装Hive,Oozie)
2.4.1驱动包存放目录
mysql-connector-java.jar驱动包存放位置:/usr/share/java
更改权限chmod 777
2.4.2卸载旧的mysql
查找以前是否安装有mysql
1. [root@master ~]# rpm -qa|grep -i mysql
如果木有结果,可以进行下一步的mysql数据库安装
如果出现mysql的相关文件,说明已经安装
停止mysql服务、删除之前安装的mysql
删除命令: rpm -e --nodeps包名
1. [root@master ~]# rpm -e --nodeps mysql-community-client-5.7.20-1.el6.x86_64
2. [root@master ~]# rpm -e --nodeps mysql-community-server-5.7.20-1.el6.x86_64
3. [root@master ~]# rpm -e --nodeps mysql-community-devel-5.7.20-1.el6.x86_64
4. [root@master ~]# rpm -qa|grep -i mysql
如果存在CentOS自带的mysql-libs相关jar包,卸载命令:
1. rpm -ev --nodeps mysql-libs*
查找旧版本mysql的目录,并且删除旧版本mysql的文件和库:
1. [root@master yum.repos.d]# find / -name mysql
2. /etc/selinux/targeted/active/modules/100/mysql
3. /var/www/html/HDP-UTILS-1.1.0.20/repos/centos7/mysql
4. /usr/lib64/mysql
5. /usr/share/mysql
删除对应的mysql目录:
1. [root@master ~]# rm -rf /usr/lib64/mysql
2. [root@master ~]# rm -rf /usr/share/mysql
删除配置文档
1. [root@master ~]# rm -rf /etc/my.cnf
再次查找机器是否安装mysql
1. [root@master ~]# rpm -qa|grep -i mysql
显示无结果,说明已经卸载彻底,接下来直接安装mysql即可!
安装好mysql创建ambari、hive、oozie数据库和用户:
>mysql
安装完成后创建ambari数据库及用户,登录root用户执行下面语句:
create database ambari character set utf8 ;
CREATE USER 'ambari'@'%'IDENTIFIED BY 'Ambari-123';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
FLUSH PRIVILEGES;
如果要安装Hive,再创建hive数据库和用户再执行下面的语句:
create database hive character set utf8 ;
CREATE USER 'hive'@'%'IDENTIFIED BY 'Hive-123';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%';
FLUSH PRIVILEGES;
如果要安装Oozie,再创建Oozie数据库和用户 再执行下面的语句:
create database oozie character set utf8 ;
CREATE USER 'oozie'@'%'IDENTIFIED BY 'Oozie-123';
GRANT ALL PRIVILEGES ON *.* TO 'oozie'@'%';
FLUSH PRIVILEGES;
2.4.3卸载CentOS自带的mariadb
查看现有的包mariadb
1. [root@master yum.repos.d]# rpm -qa|grep -i mariadb
2. mariadb-libs-5.5.52-1.el7.x86_64
如果存在,删除全部包
1. [root@master ~]# rpm -ev --nodeps mariadb-libs-5.5.52-1.el7.x86_64
2.5 Ambari安装过程
2.5.1 在各个节点上清空缓存文件
1. [root@master .ssh]# yum clean all
1. [root@slave1 ~]# yum clean all
1. [root@slave2 ~]# yum clean all
2.5.2 将master服务器上的软件包信息缓存到本地
目的:提高搜索安装软件的速度
1. [root@master .ssh]# yum makecache
1. [root@slave1 .ssh]# yum makecache
1. [root@slave2 .ssh]# yum makecache
为了检验文件是否配置正确,可以使用:
1. [root@master .ssh]# yum search ambari-agent
2. [root@master .ssh]# yum search Oozie
3. [root@master .ssh]# yum search gangli
1. [root@slave1 .ssh]# yum search ambari-agent
2. [root@slave1 .ssh]# yum search Oozie
3. [root@slave1 .ssh]# yum search gangli
1. [root@slave2 .ssh]# yum search ambari-agent
2. [root@slave2 .ssh]# yum search Oozie
3. [root@slave2 .ssh]# yum search gangli
如果配置有问题,就会出现找不到文件包的问题。
察看仓库列表:
1. [root@master .ssh]# yum repolist
1. [root@slave1 .ssh]# yum repolist
1. [root@slave2 .ssh]# yum repolist
如果可以看到Ambari的对应版本的安装包列表,说明公共库已配置成功。
然后就可以安装 Ambari的 package了。执行下面的步骤安装 Ambari Server。
2.5.3 Ambari Server安装
安装之前先准备JDK1.8:
1. [root@master ~]# mkdir -p /usr/java
把jdk包解压到/usr/java目录下面:
注意:将jdk目录下的bin更改成可执行权限!!
将master下面的jdk复制到slave1和slave2节点:
1. [root@slave1 ~]# mkdir -p /usr/java
1. [root@slave2 ~]# mkdir -p /usr/java
1. [root@master java]# scp -r /usr/java/jdk1.8.0_121 root@slave1:/usr/java
2. [root@master java]# scp -r /usr/java/jdk1.8.0_121 root@slave2:/usr/java
先卸载
1. [root@master .ssh]# yum erase ambari-server
再安装,这个命令同时安装了PostgreSQL:
1. [root@master .ssh]# yum install ambari-server
在出现的界面输入y,继续安装到成功
将mysql-connector-java.jar复制到/var/lib/ambari-server/resources目录下
cp /usr/share/java/mysql-connector-java.jar /var/lib/ambari-server/resources/mysql-jdbc-driver.jar
编辑ambari.properties
vi /etc/ambari-server/conf/ambari.properties
添加server.jdbc.driver.path=/usr/share/java/mysql-connector-java.jar
将Ambari数据库脚本导入到数据库
如果使用自己定义的数据库,必须在启动Ambari服务之前导入Ambari的sql脚本
用Ambari用户(上面设置的用户)登录mysql
[root@namenode1~]# mysql -u root -p
mysql>use ambari
mysql>source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
待安装完成后,便需要对 Ambari Server做一个简单的配置。执行下面的命令
1. [root@master .ssh]# ambari-server setup
如果还没有关闭SELinux,执行这个命令的过程中会提示,选择y,即可临时关闭。
[root@master ~]# ambari-server setup
Usingpython /usr/bin/python
Setupambari-server
CheckingSELinux...
SELinuxstatus is 'disabled'
Customizeuser account for ambari-server daemon [y/n] (n)? y
Enter useraccount for ambari-server daemon (root):
Adjustingambari-server permissions and ownership...
Checkingfirewall status...
CheckingJDK...
[1] OracleJDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
[2] OracleJDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7
[3] CustomJDK
==============================================================================
Enter choice(1): 3
WARNING: JDKmust be installed on all hosts and JAVA_HOME must be valid on all hosts.
WARNING: JCEPolicy files are required for configuring Kerberos security. If you plan to useKerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files arevalid on all hosts.
Path toJAVA_HOME: /usr/java/jdk1.8.0_121
ValidatingJDK on Ambari Server...done.
Completingsetup...
2.设置数据库,Ambari默认使用的是PostgreSQL,改为mysql数据库Configuringdatabase...
Enteradvanced database configuration [y/n] (n)? y
Configuringdatabase...
==============================================================================
Choose oneof the following options:
[1] -PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL/ MariaDB
[4] -PostgreSQL
[5] -Microsoft SQL Server (Tech Preview)
[6] - SQLAnywhere
[7] - BDB
==============================================================================
Enter choice(1): 3
Hostname(localhost):
Port (3306):
Databasename (ambari):
Username(ambari):
EnterDatabase Password (bigdata):(自己创建的ambari的数据库密码)
Re-enterpassword:
Configuringambari database...
Copying JDBCdrivers to server resources...
Configuringremote database connection properties...
WARNING:Before starting Ambari Server, you must run the following DDL against thedatabase to create the schema:/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
Proceed withconfiguring remote database connection properties [y/n] (y)? y
Extractingsystem views...
.....ambari-admin-2.4.1.0.22.jar
......
Adjustingambari-server permissions and ownership...
AmbariServer 'setup' completed successfully.
设置驱动:
[root@master ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-5.1.45-bin.jar
2.5.5启动Ambari界面
简单的 setup配置完成后。就可以启动 Ambari了。运行下面的命令:
1. [root@master resources]# ambari-server start
2. (启动比较慢,多等一会。。。)
如下命令端口监听:
1. [root@master resources]# netstat -tnlp|grep java
如果8080端口监听了,表示启动正常。
如果没有正常监听,就查看日志/var/log/ambari-server/ambari-server.log,察看是否有错误,根据提示解决即可。
查看ambari-server状态
1. [root@master resources]# ambari-server status
查看ambari-server进程
1. # jps 或 # ps -ef|grep Ambari
2. [root@master resources]# ps -ef|grep Ambari
当成功启动 Ambari Server之后,便可以从浏览器登录,默认的端口为 8080。如果端口被占用,可修改配置文件/etc/ambari-server/conf/ambari.properties,在文件中增加 client.api.port=<port_number>
以本文环境为例,在主机的浏览器的地址栏输入http://192.168.90.43:8080,登录密码为 admin/admin
至此,Ambari Server就安装完成了.