CentOS7局域网下安装离线Ambari
CentOS7局域网下安装离线Ambari
1.1 Ambari
Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目。目前最新的发布版本是 2.6.0。就 Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,但是这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等), 而并不仅是特指 Hadoop。用一句话来说,Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。
Ambari 现在所支持的平台组件也越来越多,例如流行的 Spark,Storm 等计算框架,以及资源调度平台 YARN 等,我们都能轻松地通过 Ambari 来进行部署。
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 搭建环境
虚拟机操作系统: CentOS7 64位
JDK:jdk-8u112-linux-x64
Ambari:2.1.0
HDP:2.3.0
HDP-UTILS:1.1.0.20
2.1 服务器安装准备工作
2.1.1下载CentOS7 ISO文件
http://mirrors.yun-idc.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1611.iso
2.1.2下载以下三种仓库软件包(tar.gz文件)
HDP Repository
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.3.0.0/HDP-2.3.0.0-centos7-rpm.tar.gz
附百度云盘下载链接:链接:https://pan.baidu.com/s/1o8Of97W 密码:so8o
HDP-Utils Repository
附百度云盘下载链接:链接:https://pan.baidu.com/s/1jH5GBvK 密码:m264
Ambari Repository
http://public-repo-1.hortonworks.com/ambari/centos7/ambari-2.1.0-centos7.tar.gz
附百度云盘下载链接:链接:https://pan.baidu.com/s/1eRNzH3G 密码:9krz
注意:
①由于centos和redhat的版本是一一对应的,所以Redhat6.5对应centos6,Redhat7.3对应centos7
②路径的版本号可以根据自己需要进行调整,比如ambari-2.1.0-centos7 可以 换成 ambari-2.6.0-centos7
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
附百度云盘下载链接:链接:https://pan.baidu.com/s/1hsndQJi 密码:cjez
解压查看:
Mysql驱动包:
https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.45.zip
附百度云盘下载链接:链接:https://pan.baidu.com/s/1o8CAhi6 密码:i9lf
解压查看:
2.1.4下载jdk-8u112-linux-x64.tar.gz
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
附百度云盘下载链接:链接:https://pan.baidu.com/s/1eRUlgR4 密码:xr4b
2.2Ambari安装准备工作(所有机器)
2.2.1 安装3个机器
由于在这里我使用的CentOS-7-x86_64-Everything-1611.iso,安装的时候自带了ssh服务,所以省去装SSH服务。
CentOS7安装:必须安装英文版的,如果安装中文后面可能会出现一些不可描述的错误!
输出 ssh localhost 是否已安装ssh服务,例如Ubuntu就需要安装openssh服务。
安装3个机器,机器名称分别叫master、slave1、slave2(说明机器名不这么叫可以,待会用hostname命令修改也行)。
此处我使用的VMware虚拟机软件,直接采用克隆模式,克隆出两台新的机器。
如图:
这一步需要注意一下:
克隆完之后:
说明:为了免去后面一系列授权的麻烦,这里直接使用root账户登录和操作了。
使用ifconfig命令,查看这3个机器的IP。我的机器名和ip的对应关系是:
192.168.168.200 master
192.168.168.201 slave1
192.168.168.202 slave2
把3台机器的IP地址按上述对应关系进行配置即可。
2.2.2设置静态ip地址
sudo gedit /etc/sysconfig/network-scripts/ifcfg-ens33
开始编辑,填写ip地址、子网掩码、网关、DNS等。
修改:
BOOTPROTO=static
ONBOOT=yes
添加:
IPADDR=192.168.168.200
NETMASK=255.255.255.0
GATEWAY=192.168.168.1
编辑完后,保存退出。
#重启网络服务
service network restart
2.2.3 配置主机名
为了后续操作方便,确保机器的hostname是我们想要的。拿192.168.168.200这台机器为例,用root账户登录,然后使用hostname命令查看机器名称
如图:
发现,这个机器名称不是我们想要的。不过这个好办, 我给它改个名称,命令是:
hostname master #立即生效
如图:
类似的,将其他两个机器,分别改名为slave1和slave2。
修改主机名:
sudo gedit /etc/hostname
把原来的localhost.localdomain修改为 master。
类似的,将其他两个机器,分别改名为slave1和slave2。
sudo gedit /etc/sysconfig/network #永久生效
将HOSTNAME后面的值改为想要设置的主机名,然后重启即可。
# Created by anaconda
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=master
GATEWAY=192.168.168.1
类似的,将其他两个机器,分别改名为slave1和slave2。
配置所有节点:
修改这3台机器的/etc/hosts文件,在文件中添加以下内容:
192.168.168.200 master
192.168.168.201 slave1
192.168.168.202 slave2
sudo gedit /etc/hosts
如图:
配置完成后使用ping命令检查这3个机器是否相互ping得通,以master为例,在什么执行命令:
ping slave1
如图:
执行命令:
ping slave2
如图:
ping得通,说明机器是互联的,而且hosts配置也正确。
2.2.4 关闭每台机器的防火墙
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
#查看默认防火墙状态(关闭后显示not running,开启后显示running)
firewall-cmd --state
上图表示防火墙已关闭。
2.2.5 关闭每台机器的Selinux
禁用selinux,也就是修改/etc/selinux/config文件,修改后的内容为:
sudo gedit /etc/selinux/config
修改:SELINUX=disabled
输入reboot重启系统
[root@master ~]# sestatus
SELinux status: disabled
2.2.6 关闭每台机器的THP服务
sudo gedit /etc/rc.local
添加:
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
exit 0
结果如图:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
检查:有[never]则表示THP被禁用
[root@master ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
2.2.7 配置每台机器的无密码登陆(SSH)
给3个机器生成秘钥文件
以master为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是:
[root@master .ssh]# ssh-****** -t rsa -P ''
如图:
因为我现在用的是root账户,所以秘钥文件保存到了/root/.ssh/目录内,可以使用命令查看,命令是:
ls /root/.ssh/
如图:
使用同样的方法为slave1和slave2生成秘钥(命令完全相同,不用做如何修改):
[root@slave1 ~]# ssh-****** -t rsa -P ''
[root@slave2 ~]# ssh-****** -t rsa -P ''
登录master机器,输入命令:
[root@master ~]# cd /root/.ssh
[root@master .ssh]# cp id_rsa.pub authorized_keys
将id_rsa.pub公钥拷贝重命名为authorized_keys文件。
登录slave1和slave2机器,将其他主机的公钥文件内容都拷贝到master主机上的authorized_keys文件中,命令如下:
#登录slave1,将公钥拷贝到master的authorized_keys中
[root@slave1 ~]# ssh-copy-id -i master
#登录slave2,将公钥拷贝到master的authorized_keys中
[root@slave2 ~]# ssh-copy-id -i master
授权authorized_keys文件
登录master,在.ssh目录下输入命令:
[root@master .ssh]# cd /root/.ssh
[root@master .ssh]# chmod 600 authorized_keys
[root@master .ssh]# scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
[root@master .ssh]# scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录。
测试连接成功的情况:
在每台机器上机器上运行:
[root@master ~]# ssh master date
2017年 12月 10日 星期日 20:58:31 CST
[root@master ~]# ssh slave1 date
2017年 12月 10日 星期日 20:58:31 CST
[root@master ~]# ssh slave2 date
2017年 12月 10日 星期日 20:58:43 CST
至此,免密码登录已经设定完成!
2.2.8 同步时间
选择局域网中的一台机器作为ntp服务器,以master机器为例
在master机器上需安装并启动ntpd
[root@master ~]# /bin/systemctl start ntpd.service
[root@master .ssh]# /bin/systemctl enable ntpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@master .ssh]# ntpstat
unsynchronised
time server re-starting
polling server every 8 s
其他机器必须关闭ntpd
[root@slave1 ~]# /bin/systemctl stop ntpd.service
[root@slave1 ~]# ntpstat
Unable to talk to NTP daemon. Is it running?
[root@slave2 ~]# /bin/systemctl stop ntpd.service
[root@slave2 ~]# ntpstat
Unable to talk to NTP daemon. Is it running?
CentOS7上ntpd,ntpdate这两个软件都是自带的,只需根据需要打开或关闭
修改master机器上的ntp服务器文件
sudo gedit /etc/ntp.conf
添加以下配置:
server 127.127.1.0
fudge 127.127.1.0 stratum 8
注意:后面那个数字在0-15之间都可以,这样就将这台机器的本地时间作为ntp服务提供给客户端。
配置局域网内的其他机器:
sudo gedit /etc/ntp.conf
注释掉原来的外网时间服务器,添加master机器的IP : server 192.168.168.200
Master机器上重启ntpd服务
[root@master ~]# /bin/systemctl restart ntpd.service
等几分钟,让ntpd完成自身的时间同步。
可通过以下命令查看状态
watch ntpq -p
注意:第6列reach达到17时就可以了,等待的时间是第5列poll的秒数乘以5
其他机器上手动执行:
[root@slave1 ~]# ntpdate 192.168.168.200
10 Dec 22:00:21 ntpdate[8854]: step time server 192.168.168.200 offset -86396.562366 sec
[root@slave2 ~]# ntpdate 192.168.168.200
10 Dec 22:03:22 ntpdate[8781]: step time server 192.168.168.200 offset 172798.320537 sec
其他机器设置间隔任意时间同步的方法:
查看定时任务指令编写的大致要求
[root@slave1 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#添加一个新的定时任务
crontab -e
在弹出的新文件编辑框中输入:
*/15 * * * * ntpdate 192.168.168.200
保存退出,会提示增加了一个新的任务,上面代表(每间隔15分钟向时间服务器192.168.168.200同步一次时间)
查看root用户的定时任务
[root@slave1 ~]# crontab -u root -l
*/15 * * * * ntpdate 192.168.168.200
2.3 搭建Yum源服务器
2.3.1 安装yum源
选择master服务器作为http服务器:
[root@master ~]# mkdir -p /var/www/html
使用安装系统的ISO镜像文件CentOS-7-x86_64-Everything-1611.iso
把CentOS-7-x86_64-Everything-1611.iso镜像复制到http服务器(选择master机器)的默认目录/var/www/html下
[root@master ~]# cd /var/www/html
[root@master html]# ls
CentOS-7-x86_64-Everything-1611.iso
在/var/www/html目录下创建文件夹CentOS
[root@master html]# mkdir CentOS
[root@master html]# ls
CentOS CentOS-7-x86_64-Everything-1611.iso
将ISO文件挂载至文件夹/var/www/html/CentOS下
[root@master html]# cd /var/www/html
[root@master html]# mount -o loop CentOS-7-x86_64-Everything-1611.iso CentOS
(取消挂载 umount /var/www/html/CentOS)
查看文件夹/var/www/html/CentOS
挂载完成后,进入/etc/yum.repos.d目录,备份原有repo文件:
[root@master CentOS]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# mkdir -p /etc/yum.repos.d/bak
[root@master yum.repos.d]# cp *.repo ./bak
修改CentOS-Media.repo,删去原有内容并写入如下内容:
[root@master yum.repos.d]# sudo gedit CentOS-Media.repo
原有内容:
修改后内容:
[c7-media]
name=CentOS-$releasever - Everything_ISO
enabled=1
baseurl=file:///var/www/html/CentOS
gpgcheck=1
gpgkey=file:///var/www/html/CentOS/RPM-GPG-KEY-CentOS-7
修改CentOS-Base.repo,在每一组中添加一行如下内容:enabled=0
[root@master yum.repos.d]# sudo gedit CentOS-Base.repo
运行如下命令:
#清除yum的缓存、头文件、已下载的软件包等等
yum clean all
#重建yum缓存
yum makecache
#查看已启用的镜像源
yum repolist all
ISO镜像yum源搭建OK!!!
2.3.2 安装http服务器
本文在集群机器中任选一台机器作为源服务器,以master机器为例
检查系统是否已经安装http服务
[root@master ~]# which httpd
/usr/sbin/httpd
若没有出现上述/usr/sbin/httpd目录信息,则说明没有安装;如果有,则跳过该步骤!
#如果没有安装则执行
yum install httpd
若出现目录信息,且工作目录默认在/var/www/html
http服务使用80端口,检查端口是否占用
netstat -nltp | grep 80
如果有占用情况,安装完毕后需要修改http服务的端口号
sudo gedit /etc/httpd/conf/httpd.conf
修改监听端口,Listen 80为其他端口
启动httpd服务器:
[root@master ~]# systemctl start httpd.service
打开浏览器,访问http://192.168.168.200:80,能正确打开网页,服务正常启动
浏览器访问:http://192.168.168.200/CentOS/
2.3.3 制作离线源
将这三个Ambari及HDP相关安装包复制到http服务器(这里我们选择master机器)的/var/www/html目录下,解压Ambari及HDP相关rpm包,生成相应的目录:
[root@master ~]# cd /var/www/html
[root@master html]# ls
[root@master html]# tar -xzvf ambari-2.1.0-centos7.tar.gz
[root@master html]# tar -xzvf HDP-2.3.0.0-centos7-rpm.tar.gz
[root@master html]# tar -xzvf HDP-UTILS-1.1.0.20-centos7.tar.gz
目录说明:
ambari目录:包含ambari-server,ambari-agent,ambari-log4j等rpm包
HDP目录:包含hadoop的生态圈的组件,比如hdfs,hive,hbase,mahout等
HDP-UTILS-1.1.0.20目录:包含HDP平台所包含的工具组件等,比如nagios,ganglia,puppet等
2.3.4 使用yum源
删除所有机器自带的/etc/yum.repos.d目录下的所有repo文件
[root@master html]# cd /etc/yum.repos.d
[root@master yum.repos.d]# rm -rf *
[root@master yum.repos.d]# ls
[root@slave1 html]# cd /etc/yum.repos.d
[root@slave1 yum.repos.d]# rm -rf *
[root@slave1 yum.repos.d]# ls
[root@slave2 html]# cd /etc/yum.repos.d
[root@slave2 yum.repos.d]# rm -rf *
[root@slave2 yum.repos.d]# ls
复制ambari.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)
[root@master ~]# cd /var/www/html/ambari/centos7/2.x/updates/2.1.0
[root@master 2.1.0]# ls
[root@master 2.1.0]# cp ./ambari.repo /etc/yum.repos.d/
复制hdp.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)
[root@master 2.1.0]# cd /var/www/html/HDP/centos7/2.x/updates/2.3.0.0
[root@master 2.3.0.0]# ls
[root@master 2.3.0.0]# cp ./hdp.repo /etc/yum.repos.d/
配置/etc/yum.repos.d目录下的ambari.repo和hdp.repo文件(该步骤在master机器上执行)
[root@master 2.3.0.0]# cd /etc/yum.repos.d
[root@master yum.repos.d]# ls
ambari.repo hdp.repo
编辑ambari.repo文件:
[root@master yum.repos.d]# sudo gedit ambari.repo
原来的内容如下图:
修改配置为如下内容:
#VERSION_NUMBER=2.1.0-1470
[Updates-ambari-2.1.0]
name=ambari-2.1.0 - Updates
baseurl=http://192.168.168.200/ambari/centos7/2.x/updates/2.1.0
gpgcheck=1
gpgkey=http://192.168.168.200/ambari/centos7/2.x/updates/2.1.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
[base]
name=CentOS
baseurl=http://192.168.168.200/CentOS
gpgcheck=1
gpgkey=http://192.168.168.200/CentOS/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS
baseurl=http://192.168.168.200/CentOS
gpgcheck=1
gpgkey=http://192.168.168.200/CentOS/RPM-GPG-KEY-CentOS-7
[extras]
name=RedHat
baseurl=http://192.168.168.200/CentOS
gpgcheck=1
gpgkey=http://192.168.168.200/CentOS/RPM-GPG-KEY-CentOS-7
编辑hdp.repo文件:
[root@master yum.repos.d]# sudo gedit hdp.repo
原来的内容如下图:
修改配置为如下内容:
#VERSION_NUMBER=2.3.0.0-2557
[HDP-2.3.0.0]
name=HDP Version - HDP-2.3.0.0
baseurl=http://192.168.168.200/HDP/centos7/2.x/updates/2.3.0.0
gpgcheck=1
gpgkey=http://192.168.168.200/HDP/centos7/2.x/updates/2.3.0.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
[HDP-UTILS-1.1.0.20]
name=HDP Utils Version - HDP-UTILS-1.1.0.20
baseurl=http://192.168.168.200/HDP-UTILS-1.1.0.20/repos/centos7
gpgcheck=1
gpgkey=http://192.168.168.200/HDP/centos7/2.x/updates/2.3.0.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
2.3.5 复制repo文件到其他机器的/etc/yum.repo.d/目录下
[root@master 2.1.0]# scp /etc/yum.repos.d/*.repo root@slave1:/etc/yum.repos.d/
ambari.repo 100% 674 0.7KB/s 00:00
hdp.repo 100% 520 0.5KB/s 00:00
[root@master 2.1.0]# scp /etc/yum.repos.d/*.repo root@slave2:/etc/yum.repos.d/
ambari.repo 100% 674 0.7KB/s 00:00
hdp.repo 100% 520 0.5KB/s 00:00
查看slave1机器:
[root@slave1 ~]# cd /etc/yum.repos.d
[root@slave1 yum.repos.d]# ls
ambari.repo hdp.repo
查看slave2机器:
[root@slave2 ~]# cd /etc/yum.repos.d
[root@slave2 yum.repos.d]# ls
ambari.repo hdp.repo
2.4 安装MySQL(为了后续装Hive)
2.4.1驱动包存放目录
mysql-connector-java-5.1.45-bin.jar驱动包存放位置:/usr/share/java
2.4.2卸载旧的mysql
查找以前是否安装有mysql
[root@master ~]# rpm -qa|grep -i mysql
如果木有结果,可以进行下一步的mysql数据库安装
如果出现mysql的相关文件,说明已经安装,如:
停止mysql服务、删除之前安装的mysql
删除命令: rpm -e --nodeps 包名
[root@master ~]# rpm -e --nodeps mysql-community-client-5.7.20-1.el6.x86_64
[root@master ~]# rpm -e --nodeps mysql-community-server-5.7.20-1.el6.x86_64
[root@master ~]# rpm -e --nodeps mysql-community-devel-5.7.20-1.el6.x86_64
[root@master ~]# rpm -qa|grep -i mysql
如果存在CentOS自带的mysql-libs相关jar包,卸载命令:
rpm -ev --nodeps mysql-libs*
查找旧版本mysql的目录,并且删除旧版本mysql的文件和库:
[root@master yum.repos.d]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/var/www/html/HDP-UTILS-1.1.0.20/repos/centos7/mysql
/usr/lib64/mysql
/usr/share/mysql
删除对应的mysql目录:
[root@master ~]# rm -rf /usr/lib64/mysql
[root@master ~]# rm -rf /usr/share/mysql
删除配置文档
[root@master ~]# rm -rf /etc/my.cnf
再次查找机器是否安装mysql
[root@master ~]# rpm -qa|grep -i mysql
显示无结果,说明已经卸载彻底,接下来直接安装mysql即可!
2.4.3卸载CentOS自带的mariadb
查看现有的包mariadb
[root@master yum.repos.d]# rpm -qa|grep -i mariadb
mariadb-libs-5.5.52-1.el7.x86_64
如果存在,删除全部包
[root@master ~]# rpm -ev --nodeps mariadb-libs-5.5.52-1.el7.x86_64
2.4.4安装自己下载的mysql
把下载的mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar复制到/var/www/html目录下,并解压成mysql-5.7.20-1.el6.x86_64.rpm-bundle
[root@master html]# tar -xvf mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar
安装mysql服务端:
[root@master html]# rpm -ivh mysql-community-server-5.7.20-1.el6.x86_64.rpm --force --nodeps
安装mysql客户端:
[root@master html]# rpm -ivh mysql-community-client-5.7.20-1.el6.x86_64.rpm --force --nodeps
检验:
[root@master html]# find /usr/bin -name mysqladmin
/usr/bin/mysqladmin
[root@master html]# find /usr/bin -name mysqldump
/usr/bin/mysqldump
安装mysql的库和头文件:
[root@master html]# rpm -ivh mysql-community-devel-5.7.20-1.el6.x86_64.rpm --force --nodeps
mysql安装目录说明:
数据库目录 【mysql-server安装后存在】
/var/lib/mysql/
配置文件 【mysql-server安装后存在】
/usr/share/mysql(mysql.server命令及配置文件)
启动脚本 【mysql-server安装后存在】
/etc/rc.d/init.d/(启动脚本文件mysql的目录)
相关命令 【mysql-client安装后存在】
/usr/bin(mysqladmin mysqldump等命令)
启动mysql
[root@master html]# /bin/systemctl start mysqld.service
使用netstat 命令查看mysql是否启动成功
[root@master html]# netstat -nat
mysql默认端口号为3306,以上信息中出现3306端口号,则启动成功
2.4.5设置root密码
设置/etc/my.cnf
[root@master ~]# sudo gedit /etc/my.cnf
添加:skip-grant-tables
保存后重启MySQL服务:service mysqld restart,然后重新登录。
[root@master html]# /bin/systemctl restart mysqld.service
登录:mysql -u root -p,初次登录密码为空,直接回车:
[root@master ~]# mysql -u root -p
修改密码,用户密码是在名为mysql的database下面:依次执行以下指令:
mysql> use mysql
mysql> update user set password_expired='N' where user='root';
mysql> update user set authentication_string=password('root') where user='root';
mysql> flush privileges;
修改root用户的密码为root
2.4.6 创建MySQL ambari用户
localhost
mysql> CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambari';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'localhost';
%
mysql> CREATE USER 'ambari'@'%' IDENTIFIED BY 'ambari';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
master
mysql> CREATE USER 'ambari'@'master' IDENTIFIED BY 'ambari';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'master';
mysql> FLUSH PRIVILEGES;
注意:以上说明:创建用户:ambari,密码:ambari
2.5 Ambari安装过程
2.5.1 在各个节点上清空缓存文件
[root@master .ssh]# yum clean all
[root@slave1 ~]# yum clean all
[root@slave2 ~]# yum clean all
2.5.2 将master服务器上的软件包信息缓存到本地
目的:提高搜索安装软件的速度
[root@master .ssh]# yum makecache
[root@slave1 .ssh]# yum makecache
[root@slave2 .ssh]# yum makecache
为了检验文件是否配置正确,可以使用 :
[root@master .ssh]# yum search ambari-agent
[root@master .ssh]# yum search Oozie
[root@master .ssh]# yum search gangli
[root@slave1 .ssh]# yum search ambari-agent
[root@slave1 .ssh]# yum search Oozie
[root@slave1 .ssh]# yum search gangli
[root@slave2 .ssh]# yum search ambari-agent
[root@slave2 .ssh]# yum search Oozie
[root@slave2 .ssh]# yum search gangli
如果配置有问题,就会出现找不到文件包的问题。
察看仓库列表:
[root@master .ssh]# yum repolist
[root@slave1 .ssh]# yum repolist
[root@slave2 .ssh]# yum repolist
[root@master .ssh]# yum search ambari-agent
[root@slave1 .ssh]# yum search ambari-agent
[root@slave2 .ssh]# yum search ambari-agent
如果可以看到Ambari 的对应版本的安装包列表,说明公共库已配置成功。
然后就可以安装 Ambari 的 package 了。执行下面的步骤安装 Ambari Server 。
2.5.3 Ambari Server安装
安装之前先准备JDK1.8:
[root@master ~]# mkdir -p /usr/java
把jdk-8u112-linux-x64.tar.gz复制到/usr/java目录下面,并解压:
[root@master java]# ls
jdk-8u112-linux-x64.tar.gz
[root@master java]# tar -zvxf jdk-8u112-linux-x64.tar.gz
[root@master java]# ls
jdk1.8.0_112 jdk-8u112-linux-x64.tar.gz
slave1和slave2节点也要重复以上JDK准备操作:
[root@slave1 java]# mkdir -p /usr/java
[root@slave2 ~]# mkdir -p /usr/java
[root@master java]# scp -r /usr/java/jdk1.8.0_112 root@slave1:/usr/java
[root@master java]# scp -r /usr/java/jdk1.8.0_112 root@slave2:/usr/java
先卸载
[root@master .ssh]# yum erase ambari-server
再安装,这个命令同时安装了PostgreSQL:
[root@master .ssh]# yum install ambari-server
输入y之后:
待安装完成后,便需要对 Ambari Server 做一个简单的配置。执行下面的命令
[root@master .ssh]# ambari-server setup
如果还没有关闭SELinux,执行这个命令的过程中会提示,选择y,即可临时关闭。
直接回车,并且默认指定 Ambari Server 的运行用户为 root
选择3,自定义已经安装JDK路径:
#Path to JAVA_HOME: 这里的JDK路径我们使用的是
/usr/java/jdk1.8.0_112
默认高级数据库配置,在这里输入y,选择数据库:
选择默认,直接回车:
Username (ambari): admin
Enter Database Password (bigdata): admin
Re-enter password: admin
默认设置了 Ambari GUI 的登录用户为 admin/admin,并且指定 Ambari Server 的运行用户为 root。
2.5.4 创建数据库hive
[root@master ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-5.1.45-bin.jar
#前面设置的root用户密码为root
[root@master lib]# mysql -u root -p
Enter password:
mysql> CREATE DATABASE hive;
localhost
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'localhost';
%
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%';
master
mysql> CREATE USER 'hive'@'master' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'master';
mysql> flush privileges;
注意:以上说明:创建数据库:hive,创建用户:hive,密码:hive
mysql> use hive;
mysql> source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;
查看数据库
mysql> show databases;
使用hive数据库,并且查看表:
mysql> show tables;
2.5.5启动Ambari 界面
简单的 setup 配置完成后。就可以启动 Ambari 了。运行下面的命令:
[root@master resources]# ambari-server start
如下命令端口监听:
[root@master resources]# netstat -tnlp|grep java
如果8080端口监听了,表示启动正常。
如果没有正常监听,就查看日志/var/log/ambari-server/ambari-server.log,察看是否有错误,根据提示解决即可。
查看ambari-server状态
[root@master resources]# ambari-server status
查看ambari-server进程
# jps 或 # ps -ef|grep Ambari
[root@master resources]# ps -ef|grep Ambari
当成功启动 Ambari Server 之后,便可以从浏览器登录,默认的端口为 8080。
以本文环境为例,在主机的浏览器的地址栏输入http://192.168.168.200:8080,登录密码为 admin/admin
登入 Ambari 之后的管理控制台页面如下图:
至此,Ambari Server 就安装完成了.
2.6 部署一个Hadoop2.x集群
2.6.1 命名集群的名字
登录 Ambari 之后,点击按钮“Launch In stall Wizard”,就可以开始创建属于自己的大数据平台。本环境配置集群名称为BigData,在这里只能先建立namenode的集群。
2.6.2 选择Stack---Hadoop生态圈软件的集合
指定HDP版本和HDP的yum仓库位置.
Stack 的版本越高,里面的软件版本也就越高。这里我们选择 HDP2.3,里面的对应的 Hadoop 版本为 2.7.x。(选择HDP版本)
在仓库baseurl中指定本地的HDP和HDP UTILS仓库的BaseURL
HDP-2.3:
http://192.168.168.200:80/HDP/centos7/2.x/updates/2.3.0.0
HDP-UTILS-1.1.0.20:
http://192.168.168.200:80/HDP-UTILS-1.1.0.20/repos/centos7
2.6.3 Install Options--------添加hadoop主机
指定 Agent 机器, 这些机器会被安装 Hadoop 等软件包。添加主机:
master
slave1
slave2
另外不要选择“Perform manual registration on hosts and do not use SSH“。因为我们需要 Ambari Server 自动去安装 Ambari Agent。具体参见下图示例:
点击“浏览...”选择Ambari Server机器的私钥,本环境是:需要提供Ambari Server root账户的私钥,即/root/.ssh/ id_rsa文件,由于.ssh是隐藏文件,需要在/root目录下右击,选择”
show Hidden Files”,即可,进入.ssh文件:
选择”id_rsa”私钥文件:
完成:
2.6.4 自动安装Ambari Agent
Ambari Server 会自动安装 Ambari Agent 到刚才指定的机器列表(slave1、slave2)。
安装完成后,Agent 会向 Ambari Server 注册。成功注册后,就可以继续 Next 到下一步。
Click here to see the warnings.察看警告:
“2.2.8同步时间”已经实现了时间同步,直接Next!
2.6.5 查看并且选择Hadoop相关组件
我们需要选择要安装的软件名称。本文环境只是选择了 HDFS,YARN + MapReduce2,Zoopkeeper,Ambari Metrics 。选的越多,就会需要越多的机器内存。选择之后就可以继续下一步了。
注意:Metrics与其它组件不要装在一台机器上,因为Metrics内置了HBase和Zookeeper,容易产生问题。
这里需要注意某些 Service 是有依赖关系的。如果您选了一个需要依赖其他 Service 的一个 Service,Ambari 会提醒安装对应依赖的 Service。
2.6.6 指定Master,Slave,Client机器
分别是选择安装软件所指定的 Master 机器和 Slave 机器,以及 Client 机器。
注意:Assign Masters中SNameNode必须跟NameNode在同一主机,否则Secondnamenode不能运行!!
Assign Slaves and Clients :
DataNode和NodeManager一定要选(2.0以下没有NodeManager选项,但有TaskTraker,将它选上)。
2.6.7 组件(Service)配置
绝大部分配置已经有默认值,不需要修改。初学者,如果不需要进行调优是可以直接使用默认配置的。有些 Service 会有一些必须的手工配置项,则必须手动输入,才可以下一步------本文环境直接使用默认配置
2.6.8 显示配置信息
Ambari 会总结一个安装列表,供用户审阅。这里没问题,就直接下一步。
2.6.9 安装启动并测试
Ambari 会开始安装选择的 Service 到 Ambari Agent 的机器(如下图)。这里可能需要等好一会。安装完成之后,Ambari 就会启动这些 Service。如图所示:Service的安装进度
Ambari会在各主机下生成hdp的repo文件,自动进行安装,一般失败后继续Retry,在不停的fail、retry后,就成功了。
进入下一步:
2.6.10 查看Ambari 的Dashboard
安装完成之后,就可以查看 Ambari 的 Dashboard 了。例如下图:Amabri的Dashboard页面:
2.7利用Ambari管理Hadoop2.x集群
2.7.1 Service Level Action(服务级别的操作)
首先我们进到 Ambari 的 GUI 页面,并查看 Dashboard。在左侧的 Service 列表中,我们可以点击任何一个您想要操作的 Service。以 MapReduce2 为例(Hadoop 这里的版本为 2.7.x,也就是 YARN+HDFS+MapReduce),当点击 MapReduce2 后,就会看到该 Service 的相关信息,如下图:
中间部分是 Service 的模块(Component)信息,也就是该 Service 有哪些模块及其数目。右上角有个 Service Action 的按钮,当点击该按钮后就可以看到很多 Service 的控制命令。也就是通过这些 Service Action 命令,对 Service 进行管理的。
可能有的人会说,装完 Hadoop 的集群后,并不知道这个集群是不是可用。这时候我们就可以运行一个“Run Service Check”。点击这个命令后,就会出现下图的进度显示。如图所示:
其实这里就是通过运行一个经典的 MapReduce Wordcount 实例,来检查 MapReduce 是不是正常。对于 Service Action 里面的 Start、Stop 的含义就是,启停整个集群所有该 Service 的模块(也就是 Service level)。当执行进度页面弹出来的时候,我们可以点击 Operations 的名字,进而查看每个机器的进度和运行 log。如图:
2.7.2 Host Level Action(机器级别的操作)
首先,我们回到 Ambari 的 Dashboard 页面。页面最上面中间的地方有个 Hosts,点击这个标签,我们就可以看到 Ambari 所管理的机器列表。如下图:
如果有红色提示信息,图片中红色的数字是警告信息(Ambari Alert),这里我们先略过它,后续再做介绍。先看左上角的 Actions,点击这个按钮,就可以看到 Host level Action 的选项了,其实和 Service Level 是类似的,只是执行的范围不一样。如下图:
当用户选择 All Hosts -> Hosts -> Start All Components,Ambari 就会将所有 Service 的所有模块启动:
如果用户选择 All Hosts-> DataNodes -> Stop,Ambari 就会把所有机器的 DataNode 这个模块关闭。如下图:
2.7.3 Component Level Action(模块级别的操作)
上面的图中,我们可以看到 Decommisson、Recommission。这些命令其实是自定义的模块级别的操作(Component Level Action)。不过上图中命令一旦执行,就是对多个机器的同个模块执行。
我们现在尝试只对单个机器的一个模块(Component)执行。首先我们回到 Hosts 的页面。这时候点击机器名,如下图:例如点击master机器:
我们就会进入到该机器的 Component 页面。
这时候只要点击每个 Component(模块)后面的按钮,就可以看到该模块的操作命令了。例如,我们可以停掉这台机器的 NameNode 模块:
停止后,如图所示:
2.7.4 Add Service
本次添加:Hive,同时自动添加需要依赖的服务Tez,Pig组件:察看
因为MySQL是安装在master节点上的,所以必须修改hive的服务器为master:
其中hive的数据库password配置成hive
选择“Existing MySQL Database",Database Host 配置为master,点击测试连接
提示:
把下面的有重启符号按钮提示的服务重启一下:
重启完毕如下图:
至此,hive安装完毕!
2.7.5 Ambari扩容集群
①Ambari 可以给自身的集群添加机器(也就是添加 Ambari Agent),然后将 Service 的模块安装在新的机器,也可以把某些模块安装到已有的其他的机器。
②如果选择使用私钥的方式安装不成功的话,请多试几次。
③如果还是不成功,使用手动方式,但前提是在目标机器上要安装ambari-agent并启动,推荐使用这种方法,成功率非常高。
④如果安装失败了,确认免登录没有问题的前提下,多retry几次。如果安装的时间太久,可以删除安装重来。
2.8 安装完成后,测试
2.8.1 验证HDFS
创建HDFS测试目录及其设置权限
[root@master ~]# sudo -u hdfs hadoop fs -mkdir /hdfstest
[root@master ~]# sudo -u hdfs hadoop fs -chown -R root:hdfs /hdfstest
[root@master ~]# hadoop fs -ls /
导入数据到HDFS:【-put命令别名:-copyFromLocal】
在/var/www/html/目录下创建一个words.txt文件,并输入:I am ambari.
[root@master ~]# touch /var/www/html/words.txt
[root@master ~]# ls /var/www/html/
[root@master ~]# echo I am ambari >> /var/www/html/words.txt
[root@master ~]# cat /var/www/html/words.txt
I am ambari
导入本地系统文件到HDFS上,并且验证是否成功导入到HDFS上:
[root@master ~]# hadoop fs -put /var/www/html/words.txt /hdfstest
[root@master ~]# hadoop fs -ls /hdfstest
Found 1 items
-rw-r--r-- 3 root hdfs 12 2018-01-01 22:04 /hdfstest/words.txt
从HDFS中导出数据: 【-get命令别名:-copyToLocal】
[root@master ~]# hadoop fs -get /hdfstest/words.txt /root/Documents/
[root@master ~]# ls /root/Documents
words.txt
HDFS主要模块:dfs ,dfsadmin
2.8.2 验证Map/Reduce
测试hadoop自带的wordcount程序验证MapReduce过程:
输入文件是HDFS文件系统上的:
[root@master ~]# hadoop jar /usr/hdp/2.3.0.0-2557/hadoop-mapreduce/hadoop-mapreduce-examples-2.7.1.2.3.0.0-2557.jar wordcount /hdfstest/words.txt /hdfstest/output
查看运行结果:
[root@master ~]# hadoop fs -cat /hdfstest/output/*
I 1
am 1
ambari 1
删除output文件夹:
[root@master ~]# sudo -u hdfs hadoop fs -rm -r /hdfstest/output
2.8.3 验证Hive
在命令行中输入hive可以直接进入到hive:
[root@master ~]# sudo -u hdfs hive
创建2个字段的wc表:
hive> create table wc
> (name string,id int)
> row format delimited
> fields terminated by '\t';
查看wc表的描述信息:
hive> select * from wc;
2.8.4 停止ambari
所有集群机器:
ambari-agent stop
Ambari-Server机器:
ambari-server stop
Ambari-Server重启:
ambari-server restart
1.1 Ambari
Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目。目前最新的发布版本是 2.6.0。就 Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,但是这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等), 而并不仅是特指 Hadoop。用一句话来说,Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。
Ambari 现在所支持的平台组件也越来越多,例如流行的 Spark,Storm 等计算框架,以及资源调度平台 YARN 等,我们都能轻松地通过 Ambari 来进行部署。
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 搭建环境
虚拟机操作系统: CentOS7 64位
JDK:jdk-8u112-linux-x64
Ambari:2.1.0
HDP:2.3.0
HDP-UTILS:1.1.0.20
2.1 服务器安装准备工作
2.1.1下载CentOS7 ISO文件
http://mirrors.yun-idc.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1611.iso
2.1.2下载以下三种仓库软件包(tar.gz文件)
HDP Repository
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.3.0.0/HDP-2.3.0.0-centos7-rpm.tar.gz
附百度云盘下载链接:链接:https://pan.baidu.com/s/1o8Of97W 密码:so8o
HDP-Utils Repository
附百度云盘下载链接:链接:https://pan.baidu.com/s/1jH5GBvK 密码:m264
Ambari Repository
http://public-repo-1.hortonworks.com/ambari/centos7/ambari-2.1.0-centos7.tar.gz
附百度云盘下载链接:链接:https://pan.baidu.com/s/1eRNzH3G 密码:9krz
注意:
①由于centos和redhat的版本是一一对应的,所以Redhat6.5对应centos6,Redhat7.3对应centos7
②路径的版本号可以根据自己需要进行调整,比如ambari-2.1.0-centos7 可以 换成 ambari-2.6.0-centos7
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
附百度云盘下载链接:链接:https://pan.baidu.com/s/1hsndQJi 密码:cjez
解压查看:
Mysql驱动包:
https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.45.zip
附百度云盘下载链接:链接:https://pan.baidu.com/s/1o8CAhi6 密码:i9lf
解压查看:
2.1.4下载jdk-8u112-linux-x64.tar.gz
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
附百度云盘下载链接:链接:https://pan.baidu.com/s/1eRUlgR4 密码:xr4b
2.2Ambari安装准备工作(所有机器)
2.2.1 安装3个机器
由于在这里我使用的CentOS-7-x86_64-Everything-1611.iso,安装的时候自带了ssh服务,所以省去装SSH服务。
CentOS7安装:必须安装英文版的,如果安装中文后面可能会出现一些不可描述的错误!
输出 ssh localhost 是否已安装ssh服务,例如Ubuntu就需要安装openssh服务。
安装3个机器,机器名称分别叫master、slave1、slave2(说明机器名不这么叫可以,待会用hostname命令修改也行)。
此处我使用的VMware虚拟机软件,直接采用克隆模式,克隆出两台新的机器。
如图:
这一步需要注意一下:
克隆完之后:
说明:为了免去后面一系列授权的麻烦,这里直接使用root账户登录和操作了。
使用ifconfig命令,查看这3个机器的IP。我的机器名和ip的对应关系是:
192.168.168.200 master
192.168.168.201 slave1
192.168.168.202 slave2
把3台机器的IP地址按上述对应关系进行配置即可。
2.2.2设置静态ip地址
sudo gedit /etc/sysconfig/network-scripts/ifcfg-ens33
开始编辑,填写ip地址、子网掩码、网关、DNS等。
修改:
BOOTPROTO=static
ONBOOT=yes
添加:
IPADDR=192.168.168.200
NETMASK=255.255.255.0
GATEWAY=192.168.168.1
编辑完后,保存退出。
#重启网络服务
service network restart
2.2.3 配置主机名
为了后续操作方便,确保机器的hostname是我们想要的。拿192.168.168.200这台机器为例,用root账户登录,然后使用hostname命令查看机器名称
如图:
发现,这个机器名称不是我们想要的。不过这个好办, 我给它改个名称,命令是:
hostname master #立即生效
如图:
类似的,将其他两个机器,分别改名为slave1和slave2。
修改主机名:
sudo gedit /etc/hostname
把原来的localhost.localdomain修改为 master。
类似的,将其他两个机器,分别改名为slave1和slave2。
sudo gedit /etc/sysconfig/network #永久生效
将HOSTNAME后面的值改为想要设置的主机名,然后重启即可。
# Created by anaconda
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=master
GATEWAY=192.168.168.1
类似的,将其他两个机器,分别改名为slave1和slave2。
配置所有节点:
修改这3台机器的/etc/hosts文件,在文件中添加以下内容:
192.168.168.200 master
192.168.168.201 slave1
192.168.168.202 slave2
sudo gedit /etc/hosts
如图:
配置完成后使用ping命令检查这3个机器是否相互ping得通,以master为例,在什么执行命令:
ping slave1
如图:
执行命令:
ping slave2
如图:
ping得通,说明机器是互联的,而且hosts配置也正确。
2.2.4 关闭每台机器的防火墙
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
#查看默认防火墙状态(关闭后显示not running,开启后显示running)
firewall-cmd --state
上图表示防火墙已关闭。
2.2.5 关闭每台机器的Selinux
禁用selinux,也就是修改/etc/selinux/config文件,修改后的内容为:
sudo gedit /etc/selinux/config
修改:SELINUX=disabled
输入reboot重启系统
[root@master ~]# sestatus
SELinux status: disabled
2.2.6 关闭每台机器的THP服务
sudo gedit /etc/rc.local
添加:
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
exit 0
结果如图:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
检查:有[never]则表示THP被禁用
[root@master ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
2.2.7 配置每台机器的无密码登陆(SSH)
给3个机器生成秘钥文件
以master为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是:
[root@master .ssh]# ssh-****** -t rsa -P ''
如图:
因为我现在用的是root账户,所以秘钥文件保存到了/root/.ssh/目录内,可以使用命令查看,命令是:
ls /root/.ssh/
如图:
使用同样的方法为slave1和slave2生成秘钥(命令完全相同,不用做如何修改):
[root@slave1 ~]# ssh-****** -t rsa -P ''
[root@slave2 ~]# ssh-****** -t rsa -P ''
登录master机器,输入命令:
[root@master ~]# cd /root/.ssh
[root@master .ssh]# cp id_rsa.pub authorized_keys
将id_rsa.pub公钥拷贝重命名为authorized_keys文件。
登录slave1和slave2机器,将其他主机的公钥文件内容都拷贝到master主机上的authorized_keys文件中,命令如下:
#登录slave1,将公钥拷贝到master的authorized_keys中
[root@slave1 ~]# ssh-copy-id -i master
#登录slave2,将公钥拷贝到master的authorized_keys中
[root@slave2 ~]# ssh-copy-id -i master
授权authorized_keys文件
登录master,在.ssh目录下输入命令:
[root@master .ssh]# cd /root/.ssh
[root@master .ssh]# chmod 600 authorized_keys
[root@master .ssh]# scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
[root@master .ssh]# scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录。
测试连接成功的情况:
在每台机器上机器上运行:
[root@master ~]# ssh master date
2017年 12月 10日 星期日 20:58:31 CST
[root@master ~]# ssh slave1 date
2017年 12月 10日 星期日 20:58:31 CST
[root@master ~]# ssh slave2 date
2017年 12月 10日 星期日 20:58:43 CST
至此,免密码登录已经设定完成!
2.2.8 同步时间
选择局域网中的一台机器作为ntp服务器,以master机器为例
在master机器上需安装并启动ntpd
[root@master ~]# /bin/systemctl start ntpd.service
[root@master .ssh]# /bin/systemctl enable ntpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@master .ssh]# ntpstat
unsynchronised
time server re-starting
polling server every 8 s
其他机器必须关闭ntpd
[root@slave1 ~]# /bin/systemctl stop ntpd.service
[root@slave1 ~]# ntpstat
Unable to talk to NTP daemon. Is it running?
[root@slave2 ~]# /bin/systemctl stop ntpd.service
[root@slave2 ~]# ntpstat
Unable to talk to NTP daemon. Is it running?
CentOS7上ntpd,ntpdate这两个软件都是自带的,只需根据需要打开或关闭
修改master机器上的ntp服务器文件
sudo gedit /etc/ntp.conf
添加以下配置:
server 127.127.1.0
fudge 127.127.1.0 stratum 8
注意:后面那个数字在0-15之间都可以,这样就将这台机器的本地时间作为ntp服务提供给客户端。
配置局域网内的其他机器:
sudo gedit /etc/ntp.conf
注释掉原来的外网时间服务器,添加master机器的IP : server 192.168.168.200
Master机器上重启ntpd服务
[root@master ~]# /bin/systemctl restart ntpd.service
等几分钟,让ntpd完成自身的时间同步。
可通过以下命令查看状态
watch ntpq -p
注意:第6列reach达到17时就可以了,等待的时间是第5列poll的秒数乘以5
其他机器上手动执行:
[root@slave1 ~]# ntpdate 192.168.168.200
10 Dec 22:00:21 ntpdate[8854]: step time server 192.168.168.200 offset -86396.562366 sec
[root@slave2 ~]# ntpdate 192.168.168.200
10 Dec 22:03:22 ntpdate[8781]: step time server 192.168.168.200 offset 172798.320537 sec
其他机器设置间隔任意时间同步的方法:
查看定时任务指令编写的大致要求
[root@slave1 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#添加一个新的定时任务
crontab -e
在弹出的新文件编辑框中输入:
*/15 * * * * ntpdate 192.168.168.200
保存退出,会提示增加了一个新的任务,上面代表(每间隔15分钟向时间服务器192.168.168.200同步一次时间)
查看root用户的定时任务
[root@slave1 ~]# crontab -u root -l
*/15 * * * * ntpdate 192.168.168.200
2.3 搭建Yum源服务器
2.3.1 安装yum源
选择master服务器作为http服务器:
[root@master ~]# mkdir -p /var/www/html
使用安装系统的ISO镜像文件CentOS-7-x86_64-Everything-1611.iso
把CentOS-7-x86_64-Everything-1611.iso镜像复制到http服务器(选择master机器)的默认目录/var/www/html下
[root@master ~]# cd /var/www/html
[root@master html]# ls
CentOS-7-x86_64-Everything-1611.iso
在/var/www/html目录下创建文件夹CentOS
[root@master html]# mkdir CentOS
[root@master html]# ls
CentOS CentOS-7-x86_64-Everything-1611.iso
将ISO文件挂载至文件夹/var/www/html/CentOS下
[root@master html]# cd /var/www/html
[root@master html]# mount -o loop CentOS-7-x86_64-Everything-1611.iso CentOS
(取消挂载 umount /var/www/html/CentOS)
查看文件夹/var/www/html/CentOS
挂载完成后,进入/etc/yum.repos.d目录,备份原有repo文件:
[root@master CentOS]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# mkdir -p /etc/yum.repos.d/bak
[root@master yum.repos.d]# cp *.repo ./bak
修改CentOS-Media.repo,删去原有内容并写入如下内容:
[root@master yum.repos.d]# sudo gedit CentOS-Media.repo
原有内容:
修改后内容:
[c7-media]
name=CentOS-$releasever - Everything_ISO
enabled=1
baseurl=file:///var/www/html/CentOS
gpgcheck=1
gpgkey=file:///var/www/html/CentOS/RPM-GPG-KEY-CentOS-7
修改CentOS-Base.repo,在每一组中添加一行如下内容:enabled=0
[root@master yum.repos.d]# sudo gedit CentOS-Base.repo
运行如下命令:
#清除yum的缓存、头文件、已下载的软件包等等
yum clean all
#重建yum缓存
yum makecache
#查看已启用的镜像源
yum repolist all
ISO镜像yum源搭建OK!!!
2.3.2 安装http服务器
本文在集群机器中任选一台机器作为源服务器,以master机器为例
检查系统是否已经安装http服务
[root@master ~]# which httpd
/usr/sbin/httpd
若没有出现上述/usr/sbin/httpd目录信息,则说明没有安装;如果有,则跳过该步骤!
#如果没有安装则执行
yum install httpd
若出现目录信息,且工作目录默认在/var/www/html
http服务使用80端口,检查端口是否占用
netstat -nltp | grep 80
如果有占用情况,安装完毕后需要修改http服务的端口号
sudo gedit /etc/httpd/conf/httpd.conf
修改监听端口,Listen 80为其他端口
启动httpd服务器:
[root@master ~]# systemctl start httpd.service
打开浏览器,访问http://192.168.168.200:80,能正确打开网页,服务正常启动
浏览器访问:http://192.168.168.200/CentOS/
2.3.3 制作离线源
将这三个Ambari及HDP相关安装包复制到http服务器(这里我们选择master机器)的/var/www/html目录下,解压Ambari及HDP相关rpm包,生成相应的目录:
[root@master ~]# cd /var/www/html
[root@master html]# ls
[root@master html]# tar -xzvf ambari-2.1.0-centos7.tar.gz
[root@master html]# tar -xzvf HDP-2.3.0.0-centos7-rpm.tar.gz
[root@master html]# tar -xzvf HDP-UTILS-1.1.0.20-centos7.tar.gz
目录说明:
ambari目录:包含ambari-server,ambari-agent,ambari-log4j等rpm包
HDP目录:包含hadoop的生态圈的组件,比如hdfs,hive,hbase,mahout等
HDP-UTILS-1.1.0.20目录:包含HDP平台所包含的工具组件等,比如nagios,ganglia,puppet等
2.3.4 使用yum源
删除所有机器自带的/etc/yum.repos.d目录下的所有repo文件
[root@master html]# cd /etc/yum.repos.d
[root@master yum.repos.d]# rm -rf *
[root@master yum.repos.d]# ls
[root@slave1 html]# cd /etc/yum.repos.d
[root@slave1 yum.repos.d]# rm -rf *
[root@slave1 yum.repos.d]# ls
[root@slave2 html]# cd /etc/yum.repos.d
[root@slave2 yum.repos.d]# rm -rf *
[root@slave2 yum.repos.d]# ls
复制ambari.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)
[root@master ~]# cd /var/www/html/ambari/centos7/2.x/updates/2.1.0
[root@master 2.1.0]# ls
[root@master 2.1.0]# cp ./ambari.repo /etc/yum.repos.d/
复制hdp.repo文件到/etc/yum.repos.d(该步骤在master机器上执行)
[root@master 2.1.0]# cd /var/www/html/HDP/centos7/2.x/updates/2.3.0.0
[root@master 2.3.0.0]# ls
[root@master 2.3.0.0]# cp ./hdp.repo /etc/yum.repos.d/
配置/etc/yum.repos.d目录下的ambari.repo和hdp.repo文件(该步骤在master机器上执行)
[root@master 2.3.0.0]# cd /etc/yum.repos.d
[root@master yum.repos.d]# ls
ambari.repo hdp.repo
编辑ambari.repo文件:
[root@master yum.repos.d]# sudo gedit ambari.repo
原来的内容如下图:
修改配置为如下内容:
#VERSION_NUMBER=2.1.0-1470
[Updates-ambari-2.1.0]
name=ambari-2.1.0 - Updates
baseurl=http://192.168.168.200/ambari/centos7/2.x/updates/2.1.0
gpgcheck=1
gpgkey=http://192.168.168.200/ambari/centos7/2.x/updates/2.1.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
[base]
name=CentOS
baseurl=http://192.168.168.200/CentOS
gpgcheck=1
gpgkey=http://192.168.168.200/CentOS/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS
baseurl=http://192.168.168.200/CentOS
gpgcheck=1
gpgkey=http://192.168.168.200/CentOS/RPM-GPG-KEY-CentOS-7
[extras]
name=RedHat
baseurl=http://192.168.168.200/CentOS
gpgcheck=1
gpgkey=http://192.168.168.200/CentOS/RPM-GPG-KEY-CentOS-7
编辑hdp.repo文件:
[root@master yum.repos.d]# sudo gedit hdp.repo
原来的内容如下图:
修改配置为如下内容:
#VERSION_NUMBER=2.3.0.0-2557
[HDP-2.3.0.0]
name=HDP Version - HDP-2.3.0.0
baseurl=http://192.168.168.200/HDP/centos7/2.x/updates/2.3.0.0
gpgcheck=1
gpgkey=http://192.168.168.200/HDP/centos7/2.x/updates/2.3.0.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
[HDP-UTILS-1.1.0.20]
name=HDP Utils Version - HDP-UTILS-1.1.0.20
baseurl=http://192.168.168.200/HDP-UTILS-1.1.0.20/repos/centos7
gpgcheck=1
gpgkey=http://192.168.168.200/HDP/centos7/2.x/updates/2.3.0.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
2.3.5 复制repo文件到其他机器的/etc/yum.repo.d/目录下
[root@master 2.1.0]# scp /etc/yum.repos.d/*.repo root@slave1:/etc/yum.repos.d/
ambari.repo 100% 674 0.7KB/s 00:00
hdp.repo 100% 520 0.5KB/s 00:00
[root@master 2.1.0]# scp /etc/yum.repos.d/*.repo root@slave2:/etc/yum.repos.d/
ambari.repo 100% 674 0.7KB/s 00:00
hdp.repo 100% 520 0.5KB/s 00:00
查看slave1机器:
[root@slave1 ~]# cd /etc/yum.repos.d
[root@slave1 yum.repos.d]# ls
ambari.repo hdp.repo
查看slave2机器:
[root@slave2 ~]# cd /etc/yum.repos.d
[root@slave2 yum.repos.d]# ls
ambari.repo hdp.repo
2.4 安装MySQL(为了后续装Hive)
2.4.1驱动包存放目录
mysql-connector-java-5.1.45-bin.jar驱动包存放位置:/usr/share/java
2.4.2卸载旧的mysql
查找以前是否安装有mysql
[root@master ~]# rpm -qa|grep -i mysql
如果木有结果,可以进行下一步的mysql数据库安装
如果出现mysql的相关文件,说明已经安装,如:
停止mysql服务、删除之前安装的mysql
删除命令: rpm -e --nodeps 包名
[root@master ~]# rpm -e --nodeps mysql-community-client-5.7.20-1.el6.x86_64
[root@master ~]# rpm -e --nodeps mysql-community-server-5.7.20-1.el6.x86_64
[root@master ~]# rpm -e --nodeps mysql-community-devel-5.7.20-1.el6.x86_64
[root@master ~]# rpm -qa|grep -i mysql
如果存在CentOS自带的mysql-libs相关jar包,卸载命令:
rpm -ev --nodeps mysql-libs*
查找旧版本mysql的目录,并且删除旧版本mysql的文件和库:
[root@master yum.repos.d]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/var/www/html/HDP-UTILS-1.1.0.20/repos/centos7/mysql
/usr/lib64/mysql
/usr/share/mysql
删除对应的mysql目录:
[root@master ~]# rm -rf /usr/lib64/mysql
[root@master ~]# rm -rf /usr/share/mysql
删除配置文档
[root@master ~]# rm -rf /etc/my.cnf
再次查找机器是否安装mysql
[root@master ~]# rpm -qa|grep -i mysql
显示无结果,说明已经卸载彻底,接下来直接安装mysql即可!
2.4.3卸载CentOS自带的mariadb
查看现有的包mariadb
[root@master yum.repos.d]# rpm -qa|grep -i mariadb
mariadb-libs-5.5.52-1.el7.x86_64
如果存在,删除全部包
[root@master ~]# rpm -ev --nodeps mariadb-libs-5.5.52-1.el7.x86_64
2.4.4安装自己下载的mysql
把下载的mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar复制到/var/www/html目录下,并解压成mysql-5.7.20-1.el6.x86_64.rpm-bundle
[root@master html]# tar -xvf mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar
安装mysql服务端:
[root@master html]# rpm -ivh mysql-community-server-5.7.20-1.el6.x86_64.rpm --force --nodeps
安装mysql客户端:
[root@master html]# rpm -ivh mysql-community-client-5.7.20-1.el6.x86_64.rpm --force --nodeps
检验:
[root@master html]# find /usr/bin -name mysqladmin
/usr/bin/mysqladmin
[root@master html]# find /usr/bin -name mysqldump
/usr/bin/mysqldump
安装mysql的库和头文件:
[root@master html]# rpm -ivh mysql-community-devel-5.7.20-1.el6.x86_64.rpm --force --nodeps
mysql安装目录说明:
数据库目录 【mysql-server安装后存在】
/var/lib/mysql/
配置文件 【mysql-server安装后存在】
/usr/share/mysql(mysql.server命令及配置文件)
启动脚本 【mysql-server安装后存在】
/etc/rc.d/init.d/(启动脚本文件mysql的目录)
相关命令 【mysql-client安装后存在】
/usr/bin(mysqladmin mysqldump等命令)
启动mysql
[root@master html]# /bin/systemctl start mysqld.service
使用netstat 命令查看mysql是否启动成功
[root@master html]# netstat -nat
mysql默认端口号为3306,以上信息中出现3306端口号,则启动成功
2.4.5设置root密码
设置/etc/my.cnf
[root@master ~]# sudo gedit /etc/my.cnf
添加:skip-grant-tables
保存后重启MySQL服务:service mysqld restart,然后重新登录。
[root@master html]# /bin/systemctl restart mysqld.service
登录:mysql -u root -p,初次登录密码为空,直接回车:
[root@master ~]# mysql -u root -p
修改密码,用户密码是在名为mysql的database下面:依次执行以下指令:
mysql> use mysql
mysql> update user set password_expired='N' where user='root';
mysql> update user set authentication_string=password('root') where user='root';
mysql> flush privileges;
修改root用户的密码为root
2.4.6 创建MySQL ambari用户
localhost
mysql> CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambari';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'localhost';
%
mysql> CREATE USER 'ambari'@'%' IDENTIFIED BY 'ambari';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
master
mysql> CREATE USER 'ambari'@'master' IDENTIFIED BY 'ambari';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'master';
mysql> FLUSH PRIVILEGES;
注意:以上说明:创建用户:ambari,密码:ambari
2.5 Ambari安装过程
2.5.1 在各个节点上清空缓存文件
[root@master .ssh]# yum clean all
[root@slave1 ~]# yum clean all
[root@slave2 ~]# yum clean all
2.5.2 将master服务器上的软件包信息缓存到本地
目的:提高搜索安装软件的速度
[root@master .ssh]# yum makecache
[root@slave1 .ssh]# yum makecache
[root@slave2 .ssh]# yum makecache
为了检验文件是否配置正确,可以使用 :
[root@master .ssh]# yum search ambari-agent
[root@master .ssh]# yum search Oozie
[root@master .ssh]# yum search gangli
[root@slave1 .ssh]# yum search ambari-agent
[root@slave1 .ssh]# yum search Oozie
[root@slave1 .ssh]# yum search gangli
[root@slave2 .ssh]# yum search ambari-agent
[root@slave2 .ssh]# yum search Oozie
[root@slave2 .ssh]# yum search gangli
如果配置有问题,就会出现找不到文件包的问题。
察看仓库列表:
[root@master .ssh]# yum repolist
[root@slave1 .ssh]# yum repolist
[root@slave2 .ssh]# yum repolist
[root@master .ssh]# yum search ambari-agent
[root@slave1 .ssh]# yum search ambari-agent
[root@slave2 .ssh]# yum search ambari-agent
如果可以看到Ambari 的对应版本的安装包列表,说明公共库已配置成功。
然后就可以安装 Ambari 的 package 了。执行下面的步骤安装 Ambari Server 。
2.5.3 Ambari Server安装
安装之前先准备JDK1.8:
[root@master ~]# mkdir -p /usr/java
把jdk-8u112-linux-x64.tar.gz复制到/usr/java目录下面,并解压:
[root@master java]# ls
jdk-8u112-linux-x64.tar.gz
[root@master java]# tar -zvxf jdk-8u112-linux-x64.tar.gz
[root@master java]# ls
jdk1.8.0_112 jdk-8u112-linux-x64.tar.gz
slave1和slave2节点也要重复以上JDK准备操作:
[root@slave1 java]# mkdir -p /usr/java
[root@slave2 ~]# mkdir -p /usr/java
[root@master java]# scp -r /usr/java/jdk1.8.0_112 root@slave1:/usr/java
[root@master java]# scp -r /usr/java/jdk1.8.0_112 root@slave2:/usr/java
先卸载
[root@master .ssh]# yum erase ambari-server
再安装,这个命令同时安装了PostgreSQL:
[root@master .ssh]# yum install ambari-server
输入y之后:
待安装完成后,便需要对 Ambari Server 做一个简单的配置。执行下面的命令
[root@master .ssh]# ambari-server setup
如果还没有关闭SELinux,执行这个命令的过程中会提示,选择y,即可临时关闭。
直接回车,并且默认指定 Ambari Server 的运行用户为 root
选择3,自定义已经安装JDK路径:
#Path to JAVA_HOME: 这里的JDK路径我们使用的是
/usr/java/jdk1.8.0_112
默认高级数据库配置,在这里输入y,选择数据库:
选择默认,直接回车:
Username (ambari): admin
Enter Database Password (bigdata): admin
Re-enter password: admin
默认设置了 Ambari GUI 的登录用户为 admin/admin,并且指定 Ambari Server 的运行用户为 root。
2.5.4 创建数据库hive
[root@master ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-5.1.45-bin.jar
#前面设置的root用户密码为root
[root@master lib]# mysql -u root -p
Enter password:
mysql> CREATE DATABASE hive;
localhost
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'localhost';
%
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%';
master
mysql> CREATE USER 'hive'@'master' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'master';
mysql> flush privileges;
注意:以上说明:创建数据库:hive,创建用户:hive,密码:hive
mysql> use hive;
mysql> source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;
查看数据库
mysql> show databases;
使用hive数据库,并且查看表:
mysql> show tables;
2.5.5启动Ambari 界面
简单的 setup 配置完成后。就可以启动 Ambari 了。运行下面的命令:
[root@master resources]# ambari-server start
如下命令端口监听:
[root@master resources]# netstat -tnlp|grep java
如果8080端口监听了,表示启动正常。
如果没有正常监听,就查看日志/var/log/ambari-server/ambari-server.log,察看是否有错误,根据提示解决即可。
查看ambari-server状态
[root@master resources]# ambari-server status
查看ambari-server进程
# jps 或 # ps -ef|grep Ambari
[root@master resources]# ps -ef|grep Ambari
当成功启动 Ambari Server 之后,便可以从浏览器登录,默认的端口为 8080。
以本文环境为例,在主机的浏览器的地址栏输入http://192.168.168.200:8080,登录密码为 admin/admin
登入 Ambari 之后的管理控制台页面如下图:
至此,Ambari Server 就安装完成了.
2.6 部署一个Hadoop2.x集群
2.6.1 命名集群的名字
登录 Ambari 之后,点击按钮“Launch In stall Wizard”,就可以开始创建属于自己的大数据平台。本环境配置集群名称为BigData,在这里只能先建立namenode的集群。
2.6.2 选择Stack---Hadoop生态圈软件的集合
指定HDP版本和HDP的yum仓库位置.
Stack 的版本越高,里面的软件版本也就越高。这里我们选择 HDP2.3,里面的对应的 Hadoop 版本为 2.7.x。(选择HDP版本)
在仓库baseurl中指定本地的HDP和HDP UTILS仓库的BaseURL
HDP-2.3:
http://192.168.168.200:80/HDP/centos7/2.x/updates/2.3.0.0
HDP-UTILS-1.1.0.20:
http://192.168.168.200:80/HDP-UTILS-1.1.0.20/repos/centos7
2.6.3 Install Options--------添加hadoop主机
指定 Agent 机器, 这些机器会被安装 Hadoop 等软件包。添加主机:
master
slave1
slave2
另外不要选择“Perform manual registration on hosts and do not use SSH“。因为我们需要 Ambari Server 自动去安装 Ambari Agent。具体参见下图示例:
点击“浏览...”选择Ambari Server机器的私钥,本环境是:需要提供Ambari Server root账户的私钥,即/root/.ssh/ id_rsa文件,由于.ssh是隐藏文件,需要在/root目录下右击,选择”
show Hidden Files”,即可,进入.ssh文件:
选择”id_rsa”私钥文件:
完成:
2.6.4 自动安装Ambari Agent
Ambari Server 会自动安装 Ambari Agent 到刚才指定的机器列表(slave1、slave2)。
安装完成后,Agent 会向 Ambari Server 注册。成功注册后,就可以继续 Next 到下一步。
Click here to see the warnings.察看警告:
“2.2.8同步时间”已经实现了时间同步,直接Next!
2.6.5 查看并且选择Hadoop相关组件
我们需要选择要安装的软件名称。本文环境只是选择了 HDFS,YARN + MapReduce2,Zoopkeeper,Ambari Metrics 。选的越多,就会需要越多的机器内存。选择之后就可以继续下一步了。
注意:Metrics与其它组件不要装在一台机器上,因为Metrics内置了HBase和Zookeeper,容易产生问题。
这里需要注意某些 Service 是有依赖关系的。如果您选了一个需要依赖其他 Service 的一个 Service,Ambari 会提醒安装对应依赖的 Service。
2.6.6 指定Master,Slave,Client机器
分别是选择安装软件所指定的 Master 机器和 Slave 机器,以及 Client 机器。
注意:Assign Masters中SNameNode必须跟NameNode在同一主机,否则Secondnamenode不能运行!!
Assign Slaves and Clients :
DataNode和NodeManager一定要选(2.0以下没有NodeManager选项,但有TaskTraker,将它选上)。
2.6.7 组件(Service)配置
绝大部分配置已经有默认值,不需要修改。初学者,如果不需要进行调优是可以直接使用默认配置的。有些 Service 会有一些必须的手工配置项,则必须手动输入,才可以下一步------本文环境直接使用默认配置
2.6.8 显示配置信息
Ambari 会总结一个安装列表,供用户审阅。这里没问题,就直接下一步。
2.6.9 安装启动并测试
Ambari 会开始安装选择的 Service 到 Ambari Agent 的机器(如下图)。这里可能需要等好一会。安装完成之后,Ambari 就会启动这些 Service。如图所示:Service的安装进度
Ambari会在各主机下生成hdp的repo文件,自动进行安装,一般失败后继续Retry,在不停的fail、retry后,就成功了。
进入下一步:
2.6.10 查看Ambari 的Dashboard
安装完成之后,就可以查看 Ambari 的 Dashboard 了。例如下图:Amabri的Dashboard页面:
2.7利用Ambari管理Hadoop2.x集群
2.7.1 Service Level Action(服务级别的操作)
首先我们进到 Ambari 的 GUI 页面,并查看 Dashboard。在左侧的 Service 列表中,我们可以点击任何一个您想要操作的 Service。以 MapReduce2 为例(Hadoop 这里的版本为 2.7.x,也就是 YARN+HDFS+MapReduce),当点击 MapReduce2 后,就会看到该 Service 的相关信息,如下图:
中间部分是 Service 的模块(Component)信息,也就是该 Service 有哪些模块及其数目。右上角有个 Service Action 的按钮,当点击该按钮后就可以看到很多 Service 的控制命令。也就是通过这些 Service Action 命令,对 Service 进行管理的。
可能有的人会说,装完 Hadoop 的集群后,并不知道这个集群是不是可用。这时候我们就可以运行一个“Run Service Check”。点击这个命令后,就会出现下图的进度显示。如图所示:
其实这里就是通过运行一个经典的 MapReduce Wordcount 实例,来检查 MapReduce 是不是正常。对于 Service Action 里面的 Start、Stop 的含义就是,启停整个集群所有该 Service 的模块(也就是 Service level)。当执行进度页面弹出来的时候,我们可以点击 Operations 的名字,进而查看每个机器的进度和运行 log。如图:
2.7.2 Host Level Action(机器级别的操作)
首先,我们回到 Ambari 的 Dashboard 页面。页面最上面中间的地方有个 Hosts,点击这个标签,我们就可以看到 Ambari 所管理的机器列表。如下图:
如果有红色提示信息,图片中红色的数字是警告信息(Ambari Alert),这里我们先略过它,后续再做介绍。先看左上角的 Actions,点击这个按钮,就可以看到 Host level Action 的选项了,其实和 Service Level 是类似的,只是执行的范围不一样。如下图:
当用户选择 All Hosts -> Hosts -> Start All Components,Ambari 就会将所有 Service 的所有模块启动:
如果用户选择 All Hosts-> DataNodes -> Stop,Ambari 就会把所有机器的 DataNode 这个模块关闭。如下图:
2.7.3 Component Level Action(模块级别的操作)
上面的图中,我们可以看到 Decommisson、Recommission。这些命令其实是自定义的模块级别的操作(Component Level Action)。不过上图中命令一旦执行,就是对多个机器的同个模块执行。
我们现在尝试只对单个机器的一个模块(Component)执行。首先我们回到 Hosts 的页面。这时候点击机器名,如下图:例如点击master机器:
我们就会进入到该机器的 Component 页面。
这时候只要点击每个 Component(模块)后面的按钮,就可以看到该模块的操作命令了。例如,我们可以停掉这台机器的 NameNode 模块:
停止后,如图所示:
2.7.4 Add Service
本次添加:Hive,同时自动添加需要依赖的服务Tez,Pig组件:察看
因为MySQL是安装在master节点上的,所以必须修改hive的服务器为master:
其中hive的数据库password配置成hive
选择“Existing MySQL Database",Database Host 配置为master,点击测试连接
提示:
把下面的有重启符号按钮提示的服务重启一下:
重启完毕如下图:
至此,hive安装完毕!
2.7.5 Ambari扩容集群
①Ambari 可以给自身的集群添加机器(也就是添加 Ambari Agent),然后将 Service 的模块安装在新的机器,也可以把某些模块安装到已有的其他的机器。
②如果选择使用私钥的方式安装不成功的话,请多试几次。
③如果还是不成功,使用手动方式,但前提是在目标机器上要安装ambari-agent并启动,推荐使用这种方法,成功率非常高。
④如果安装失败了,确认免登录没有问题的前提下,多retry几次。如果安装的时间太久,可以删除安装重来。
2.8 安装完成后,测试
2.8.1 验证HDFS
创建HDFS测试目录及其设置权限
[root@master ~]# sudo -u hdfs hadoop fs -mkdir /hdfstest
[root@master ~]# sudo -u hdfs hadoop fs -chown -R root:hdfs /hdfstest
[root@master ~]# hadoop fs -ls /
导入数据到HDFS:【-put命令别名:-copyFromLocal】
在/var/www/html/目录下创建一个words.txt文件,并输入:I am ambari.
[root@master ~]# touch /var/www/html/words.txt
[root@master ~]# ls /var/www/html/
[root@master ~]# echo I am ambari >> /var/www/html/words.txt
[root@master ~]# cat /var/www/html/words.txt
I am ambari
导入本地系统文件到HDFS上,并且验证是否成功导入到HDFS上:
[root@master ~]# hadoop fs -put /var/www/html/words.txt /hdfstest
[root@master ~]# hadoop fs -ls /hdfstest
Found 1 items
-rw-r--r-- 3 root hdfs 12 2018-01-01 22:04 /hdfstest/words.txt
从HDFS中导出数据: 【-get命令别名:-copyToLocal】
[root@master ~]# hadoop fs -get /hdfstest/words.txt /root/Documents/
[root@master ~]# ls /root/Documents
words.txt
HDFS主要模块:dfs ,dfsadmin
2.8.2 验证Map/Reduce
测试hadoop自带的wordcount程序验证MapReduce过程:
输入文件是HDFS文件系统上的:
[root@master ~]# hadoop jar /usr/hdp/2.3.0.0-2557/hadoop-mapreduce/hadoop-mapreduce-examples-2.7.1.2.3.0.0-2557.jar wordcount /hdfstest/words.txt /hdfstest/output
查看运行结果:
[root@master ~]# hadoop fs -cat /hdfstest/output/*
I 1
am 1
ambari 1
删除output文件夹:
[root@master ~]# sudo -u hdfs hadoop fs -rm -r /hdfstest/output
2.8.3 验证Hive
在命令行中输入hive可以直接进入到hive:
[root@master ~]# sudo -u hdfs hive
创建2个字段的wc表:
hive> create table wc
> (name string,id int)
> row format delimited
> fields terminated by '\t';
查看wc表的描述信息:
hive> select * from wc;
2.8.4 停止ambari
所有集群机器:
ambari-agent stop
Ambari-Server机器:
ambari-server stop
Ambari-Server重启:
ambari-server restart
目录 返回
首页