1 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 搭建环境
虚拟机操作系统: RedHat7 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下载RedHat7 ISO文件
rhel-server-7.3-x86_64-dvd.iso 百度云盘下载地址:链接:https://pan.baidu.com/s/1cdMQn0 密码:ou1l
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个机器
由于在这里我使用的rhel-server-7.3-x86_64-dvd.iso,安装的时候自带了ssh服务,所以省去装SSH服务。
RedHat7安装:必须安装英文版的,如果安装中文后面可能会出现一些不可描述的错误!
输出 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。
配置所有节点:
修改/etc/hosts文件
修改这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-keygen -t rsa -P ''
如图:
因为我现在用的是root账户,所以秘钥文件保存到了/root/.ssh/目录内,可以使用命令查看,命令是:
- ls /root/.ssh/
如图:
使用同样的方法为slave1和slave2生成秘钥(命令完全相同,不用做如何修改):
- [root@slave1 ~]# ssh-keygen -t rsa -P ''
- [root@slave2 ~]# ssh-keygen -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
将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.3 搭建Yum源服务器
2.3.1 安装yum源
选择master服务器作为http服务器:
- [root@master ~]# mkdir -p /var/www/html
使用安装系统的ISO镜像文件rhel-server-7.3-x86_64-dvd.iso
把rhel-server-7.3-x86_64-dvd.iso镜像复制到http服务器(选择master机器)的默认目录/var/www/html下
- [root@master ~]# cd /var/www/html
- [root@master html]# ls
- rhel-server-7.3-x86_64-dvd.iso
在/var/www/html目录下创建文件夹RedHat
- [root@master html]# mkdir RedHat
- [root@master html]# ls
- RedHat rhel-server-7.3-x86_64-dvd.iso
将ISO文件挂载至文件夹/var/www/html/RedHat下
- [root@master html]# mount -o loop rhel-server-7.3-x86_64-dvd.iso RedHat/
(取消挂载 umount /var/www/html/RedHat)
查看文件夹/var/www/html/RedHat
- [root@master html]# ls /var/www/html/RedHat/
挂载完成后,进入/etc/yum.repos.d目录,创建rhel-media.repo:
- [root@master html]# cd /etc/yum.repos.d/
- [root@master yum.repos.d]# touch rhel-media.repo
- [root@master yum.repos.d]# ls
- rhel-media.repo
修改rhel-media.repo,删去原有内容并写入如下内容:
- [root@master yum.repos.d]# sudo gedit /etc/yum.repos.d/rhel-media.repo
- [RedHat7-media]
- name=RedHat7
- enabled=1
- baseurl=file:///var/www/html/RedHat
- gpgcheck=1
- gpgkey=file:///var/www/html/RedHat/RPM-GPG-KEY-redhat-release
- [root@master yum.repos.d]# cat rhel-media.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/RedHat/
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文件:
- cd /etc/yum.repos.d
- [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=RedHat
- baseurl=http://192.168.168.200/RedHat
- gpgcheck=1
- gpgkey=http://192.168.168.200/RedHat/RPM-GPG-KEY-redhat-release
- [updates]
- name=RedHat
- baseurl=http://192.168.168.200/RedHat
- gpgcheck=1
- gpgkey=http://192.168.168.200/RedHat/RPM-GPG-KEY-redhat-release
- [extras]
- name=RedHat
- baseurl=http://192.168.168.200/RedHat
- gpgcheck=1
- gpgkey=http://192.168.168.200/RedHat/RPM-GPG-KEY-redhat-release
编辑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
- [root@slave1 yum.repos.d]# yum clean all
- [root@slave1 yum.repos.d]# yum makecache
查看slave2机器:
- [root@slave2 ~]# cd /etc/yum.repos.d
- [root@slave2 yum.repos.d]# ls
- ambari.repo hdp.repo
- [root@slave2 yum.repos.d]# yum clean all
- [root@slave2 yum.repos.d]# yum makecache
2.3.6 同步时间
选择局域网中的一台机器作为ntp服务器,以master机器为例
在master机器上需安装并启动ntpd
redhat版本不同ntp的版本可能也会有所变化,在安装之前需要查找ntp服务,看下是否存在:
- [root@master yum.repos.d]# yum search ntp
查找到ntp.x86_64,使用yum进行安装。安装时.x64_64可以不输入。
- [root@master yum.repos.d]# yum install -y ntp
-y:不提示,直接安装
- [root@master ~]# systemctl start ntpd.service
- [root@master ~]# 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 ~]# ntpstat
- unsynchronised
- time server re-starting
- polling server every 8 s
其他机器必须关闭ntpd
slave1:
- [root@slave1 yum.repos.d]# yum install -y ntp
- [root@slave1 yum.repos.d]# systemctl stop ntpd.service
- [root@slave1 yum.repos.d]# ntpstat
- Unable to talk to NTP daemon. Is it running?
slave2:
- [root@slave2 yum.repos.d]# yum install -y ntp
- [root@slave2 yum.repos.d]# systemctl stop ntpd.service
- [root@slave2 yum.repos.d]# ntpstat
- Unable to talk to NTP daemon. Is it running?
修改master机器上的ntp服务器文件
- [root@master yum.repos.d]# 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 ~]# 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
在弹出的新文件编辑框中输入(按 i 键可插入)
- */15 * * * * ntpdate 192.168.168.200
按ESC---- 输入 :wq! 保存退出,会提示增加了一个新的任务,上面代表(每间隔15分钟向时间服务器192.168.168.200同步一次时间)
查看root用户的定时任务
- [root@slave1 ~]# crontab -u root -l
- */15 * * * * ntpdate 192.168.168.200
2.3.7卸载高版本snappy
snappy版本过高会导致安装报如下错误:
- <strong>resource_management.core.exceptions.Fail: Execution of '/usr/bin/yum -d 0 -e 0 -y install snappy-devel' returned 1. Error: Package: snappy-devel-1.0.5-1.el6.x86_64 (HDP-UTILS-1.1.0.20)
- Requires: snappy(x86-64) = 1.0.5-1.el6
- Installed: snappy-1.1.0-3.el7.x86_64 (@anaconda/7.3)
- snappy(x86-64) = 1.1.0-3.el7
- Available: snappy-1.0.5-1.el6.x86_64 (HDP-UTILS-1.1.0.20)
- snappy(x86-64) = 1.0.5-1.el6
- You could try using --skip-broken to work around the problem</strong>
解决办法:
- yum -y remove snappy
- yum -y install yum-plugin-versionlock
- echo 'snappy-1.0.5-1.el6.*' >> /etc/yum/pluginconf.d/versionlock.list
- cat /etc/yum/pluginconf.d/versionlock.list
master以及slave1、slave2节点都要卸载高版本snappy!
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
查找旧版本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卸载RedHat自带的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 RedHat]# cd /var/www/html
- [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]# 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]# 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
按CTRL+Z组合键可以退出!
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 ~]# cd /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 java]# yum erase ambari-server
再安装,这个命令同时安装了PostgreSQL:
- [root@master java]# yum install ambari-server
输入y之后:y
待安装完成后,便需要对 Ambari Server 做一个简单的配置。执行下面的命令
- [root@master java]# 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 到下一步。
“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 ~]# sudo -u hdfs 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> desc wc;
2.8.4 停止ambari
所有集群机器:
- ambari-agent stop
Ambari-Server机器:
- ambari-server stop
Ambari-Server重启:
- ambari-server restart
接下来开始我们的大数据之旅吧!