@R星校长
1. 大数据集群搭建及管理问题
- 提出问题:
需要搭建1000台服务器的集群,其中集群包含Hive、Hbase、Flume、Kafka、Spark等集群,需要多长时间搭建好? - 思考:
搭建四台集群与搭建1000台集群的区别?比较相似。 - 解决问题:(以搭建HDFS为例)
1. 集群环境规划:
首先我们需要进行集群基础环境的规划:比如每台节点的网络ip规划,节点时间同步,每台节点的名称,每台节点安装jdk,节点之间配置免密等。
其次需要进行Hadoop的集群规划:比如搭建HDFS的版本,搭建的HDFS模式,搭建单机模式?还是完全分布式模式?还是HA的完全分布式模式?搭建HDFS是否需要依赖?比如zookeeper。
最后对节点进行规划:比如那些节点搭建zookeeper?那些节点搭建Hadoop集群等。
2. 实际搭建步骤:
基础环境的搭建。
搭建zookeeper集群。
搭建HDFS集群。
- 存在的问题:
- 各个大数据技术包的下载。升级复杂。
- 配置文件多节点之间分发。部署过程复杂。
- 大数据技术各个版本的匹配兼容。版本对应混乱,兼容性差。
- 集群使用状态、日志查看麻烦。去节点查看详细内容,安全性差。
2. CDH简介
- CDH简介:
目前Hadoop发行版非常多,除了原生的Apache Hadoop外,还有Cloudera发行版(CDH)、Hortonworks发行版[2018年与Cloudera公司已经合并],MapR的MapR产品、AWS[Amazon Web Services]的EMR[Elastic MapReduce]等。目前市场份额占比最高的是前三家。所有这些发行版都是基于Apache Hadoop衍生出来的,之所以有这么多版本,是由于Apache Hadoop的开源协议决定的:任何人可以对其进行修改,并作为开源或者商业产品发布或者销售。
Apache Hadoop 版本: 最原始的版本,所有的发行版都是基本这个版本改进,也称为社区版Hadoop。
Cloudera版本:Cloudera’s Distribution Including Apache Hadoop ,简称CDH。
Hortonworks版本:Hortonworks Data Platform ,简称“HDP”。
对于国内的用户来说,CDH版本使用最多。CDH基于Web的用户界面,支持大多数Hadoop的组件,包括:HDFS、MapReduce、Hive、Hbase、Zookeeper等组件,并且简化了大数据平台的安装和使用,使集群方便管理。
Cloudera 的CDH和Apache原生的Hadoop的区别如下:
- CDH对版本的划分非常清晰,CDH共有6个版本,前三个版本已经不再更新,目前更新的两个版本为CDH5和CDH6,CDH4基于Hadoop2.0,CDH5基于Hadoop2.2-2.6,CDH6基于Hadoop3.0,而原生的Apache Hadoop版本比较多,CDH相比原生Apache Hadoop做到版本统一管理。
- CDH相比原生Hadoop 在兼容性、安全性、稳定性上有较大改善,对Hadoop一些bug进行了修复,支持Kerberos安全认证,更新速度快且CDH文档完善清晰。
- CDH支持yum包,rpm包,tar包,Cloudera Manager几种方式安装,原生的Apache Hadoop只支持tar包安装。
- 提供了部署、安装、配置工具,大大提高了集群部署的效率,可以在短时间内部署好集群。
- 运维简单,提供了管理、监控、诊断、配置修改工具,管理配置方便,定位问题快速,准确,使运维工作简单高效。
- CDH集成组件
CDH集成了数据整合、存储、计算、搜索、分析等大数据相关技术组件,如下图:
CDH中文官网:https://cn.cloudera.com/
CDH英文官网:https://www.cloudera.com
CDH官方文档:
https://www.cloudera.com/documentation/enterprise/latest.html - CDH 界面:
- CDH 架构:
Server: Cloudera Manager 的核心是 Cloudera Manager Server ,Server 管理控制台服务和托管应用程序逻辑,负责软件的安装、配置、服务的启动与关闭及管理集群。
Agent: 安装在每台主机上。Agent 负责进程的启动和停止,解压配置,触发安装及监控主机。
Management Service: 由一组角色组成的服务,这些角色执行各种监视,警报和报告功能。
DataBase: 存储配置及监控信息。
ClouderaRepository:Cloudera Manager 分发软件的存储库。
Clients: 与Server交互的接口,有两部分,Admin Console : 管理员 web 界面版。Api: 用于开发者创建Cloudera Manager程序。
3. Cloudera Manager安装
- 系统环境准备,安装基础环境。
1. 选择三台已经安装 Centos7 Liunx 系统的节点,分配资源。
ClouderManager6.3.x 版本支持的系统如下:
安装 CDH 节点推荐内存为 64G,大部分内存被 Cloudera Management Service 占用,因为做了大量的数据分析和整合。这里,划分三台节点如下:
节点名称 | 节点ip | 节点角色 | 分配内存 |
---|---|---|---|
cm1 | 192.168.179.201 | Server,Agent | 16G |
cm2 | 192.168.179.202 | Agent | 4G |
cm3 | 192.168.179.203 | Agent | 4G |
针对目前学习来说:
如果实际的物理机器内存为32G,推荐cm Server内存为16G,cm Agent内存分别为4G。
如果实际的物理机器内存为16G,推荐cm Server内存为10G,cm Agent内存分别为2G。
如果实际的物理机器内存为12G,推荐cm Server内存为8G,cm Agent内存分别为2G。
如果实际的物理机器内存为8G,推荐cm Server内存为6G,cm Agent内存分别为2G。
注意:后两种情况,实际机器内存不足,需要在VM虚拟机中设置允许交换内存。设置方式如下:
在VMware中点击“编辑”->“首选项”,找到内存,预留内存是给当前真实物理机预留的内存量。在额外内存中,如果实际物理机内存不足10G就设置“允许交换大部分虚拟机内存”,设置这个的意思是当虚拟机内存不足时,可以允许内存与磁盘交换数据,从而获取更多的内存执行当前运行的程序。
截止到这里,以上只是准备好的三台划分好内存和核心的空节点。
注意:实际物理机器安装Vmware的磁盘至少还要预留50G磁盘空间,这里建议给每台虚拟机200G磁盘。
2. 配置ip
在每台节点上配置 ip,打开 /etc/sysconfig/network-scripts/ifcfg-ens33 编辑内容如下,这里的 ifcfg-ensxx 名称不定:
1. TYPE=Ethernet
2. BOOTPROTO=static #使用static配置
3. DEFROUTE=yes
4. PEERDNS=yes
5. PEERROUTES=yes
6. IPV4_FAILURE_FATAL=no
7. IPV6INIT=yes
8. IPV6_AUTOCONF=yes
9. IPV6_DEFROUTE=yes
10. IPV6_PEERDNS=yes
11. IPV6_PEERROUTES=yes
12. IPV6_FAILURE_FATAL=no
13. NAME=ens33
14. UUID=17b5d8c8-5d5d-4c3b-a75c-6fe7200e0bcb
15. DEVICE=ens33
16. ONBOOT=yes #开机启动此配置
17. IPADDR=192.168.179.201 #静态IP
18. GATEWAY=192.168.179.2 #默认网关
19. NETMASK=255.255.255.0 #子网掩码
20. DNS1=192.168.179.2 #DNS配置
重启网络服务使ip生效:
1. #重启网络服务 centos6 : service network restart
2. systemctl restart network
3.
4. #查看ip centos6 : ifconfig
5. ip addr
三台节点配置的 ip 分别为:
192.168.179.201,192.168.179.202,192.168.179.203
注意:每台节点克隆后需要删除每台节点/etc/udev/rules.d/70-persistent-net.rules 文件,清除 mac 地址。重启每台节点即可。
3. 配置每台节点的hostname
修改每台节点 /etc/hostname 文件 (centos6:/etc/sysconfig/network),每台节点直接覆盖写上对应的 hostname 即可,分别为:cm1,cm2,cm3。设置好每台节点的 hostname 之后重启每台节点即可生效。
1. vi /etc/hostname
2. cm3 #hostname文件中只需配置这一行
3.
4. 配置节点ip、hostname映射
在每台节点/etc/hosts文件后追加如下内容,配置ip与hostname之间的映射。
1. 192.168.179.201 cm1
2. 192.168.179.202 cm2
3. 192.168.179.203 cm3
5. 关闭防火墙
在每台节点上执行如下命令,关闭防火墙,并设置开机不启动:
1. #检查防火墙状态:centos6 : service iptables status
2. firewall-cmd --state
3.
4. #关闭防火墙,centos6 : service iptables stop
5. systemctl stop firewalld
6.
7. #设置开机不启动防火墙: centos6 :chkconfig iptables off
8. systemctl disable firewalld
9.
10. #检查防火墙开机启动状态:
11. systemctl list-unit-files | grep firewall
12.
13. #检查机器中的启动服务: centos6 : chkconfig --list
14. systemctl list-unit-files
6. 关闭SELinux
SELinux就是Security-Enhanced Linux的简称,安全加强的linux。传统的linux权限是对文件和目录的owner, group和other的rwx进行控制,而SELinux采用的是委任式访问控制,也就是控制一个进程对具体文件系统上面的文件和目录的访问,SELinux规定了很多的规则,来决定哪个进程可以访问哪些文件和目录。虽然SELinux很好用,但是在多数情况我们还是将其关闭,因为在不了解其机制的情况下使用SELinux会导致软件安装或者应用部署失败。
在每台节点/etc/selinux/config中将SELINUX=enforcing改成SELINUX=disabled即可。
7. 配置本地yum源
这里我们选择使用本地yum源。需要在VM中设置下连接光驱,步骤如下图。
在cm1、cm2、cm3节点上配置本地yum源:
每台节点创建/mnt/cdrom目录:
1. mkdir -p /mnt/cdrom
每台节点执行如下命令,将光盘设备/dev/sr0挂载到/mnt/cdrom目录:
1. mount /dev/sr0 /mnt/cdrom/
2. mount: block device /dev/sr0 is write-protected, mounting read-only
每台节点执行命令:df -h查看是否挂载成功:
1. df -h
上面的mount命令挂载后在机器重启后会失效,为了可以实现开机自动挂载,可以在每台节点的/etc/fstab文件的最后面加入下面语句:
1. /dev/sr0 /mnt/cdrom iso9660 defaults 0 0
下面可以创建本地yum源,在每台节点的/etc/yum.repos.d目录下创建local.repo文件,内容如下:
1. [local]
2. name=local repo
3. baseurl=file:///mnt/cdrom
4. enable=1
5. gpgcheck=1
6. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
以上内容中,在centos6 中需要配置gpgkey内容如下: gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6。baseurl是指Yum源的地址,该路径下有个repodata目录,就是yum 安装源目录。file://表示yum源为文件。
如果只想让local.repo生效,可以在每台节点的/etc/yum.repos.d目录下创建一个backup目录,将其他的以“.repo”结尾的文件都移动到backup目录中。
1. mkdir -p /etc/yum.repos.d/backup
2. mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/
在每台节点上执行以下命令,更新yum源:
1. yum clean all
2. yum makecache
8. 配置SSH免秘钥登录
在CDH中需要任意两个节点之间都可以免秘钥登录。节点两两免秘钥的根本原理如下:假设A节点需要免秘钥登录B节点,只要B节点上有A节点的公钥,那么A节点就可以免密登录当前B节点。
第一,需要在每台节点上安装ssh客户端,否则,不能使用ssh命令(最小化安装Liunx,默认没有安装ssh客户端),这里在Centos7系统中默认已经安装,此步骤可以省略:
1. yum -y install openssh-clients
第二,在每台节点执行如下命令,在每台节点的“~”目录下,创建.ssh目录,注意,不要手动创建这个目录,因为有权限问题。
1. cd ~
2. ssh localhost
3. #这里会需要输入节点密码#
4. exit
第三,在每台节点上执行如下命令,给当前节点创建公钥和私钥:
1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
第四,将cm1,cm2,cm3的公钥copy到cm1上,这样,cm1,cm2,cm3节点都能登录cm1节点。命令如下:
1. 在cm1上执行如下命令,需要输入密码:
2. [root@cm1 .ssh]# ssh-copy-id cm1 #会在当前~/.ssh目录下生成authorized_keys文件,文件中存放当前cm1的公钥#
3. 在cm2上执行如下命令,需要输入密码:
4. [root@cm2 ~]# ssh-copy-id cm1 #会将cm2的公钥追加到cm1节点的authorized_keys文件中#
5. 在cm3上执行如下命令,需要输入密码:
6. [root@cm3 ~]# ssh-copy-id cm1 #会将cm3的公钥追加到cm1节点的authorized_keys文件中#
最后,将 cm1 节点上~/.ssh/authorized_keys
拷贝到 cm2 和 cm3 节点的~/.ssh/
目录下,执行如下命令:
1. 在cm1上执行如下命令,需要输入密码:
2. [root@cm1 .ssh]# scp ~/.ssh/authorized_keys cm2:`pwd`
3. [root@cm1 .ssh]# scp ~/.ssh/authorized_keys cm3:`pwd`
经过以上步骤,节点两两免密完成。
9. 节点同步时间
在 cm1 , cm2 , cm3 每 台节点上执行如下命令,安装 ntp 服务及配置定时任务:
1. yum -y install ntp #安装ntp服务#
2. rm -rf /etc/localtime #删除现有时区#
3. ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改上海时区#
4. /usr/sbin/ntpdate -u pool.ntp.org #同步时间#
5. date #查看时间#
6. #crontab -e 写入如下定时内容:#
7. */10 * * * * /usr/sbin/ntpdate -u pool.ntp.org >/dev/null 2>&1 #同步时间定时任务#
8. systemctl restart crond #重启定时任务 ,centos6:service crond restart#
9. crontab -l #查看定时任务#
10.
11. systemctl enable ntpd #设置ntpd 开机启动,不然后期安装CDH时会有警告。centos6:chkconfig ntpd on
12. systemctl start ntpd #启动ntpd服务 service ntpd start
10. 安装 jdk
给每台节点安装jdk,这里我们安装的CDH版本为6.3.2,在官网:
https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_java_requirements.html#java_requirements
描述中这里需要使用 jdk8,但是对应的 jdk 小版本有要求,具体如下:
这里我们选择jdk8版本中的1.8u181版本安装。在每台节点安装jdk,在每台节点中创建/software目录,将jdk8安装包通过ftp工具上传到/software目录下,每台节点执行如下命令安装jdk:
1. [root@cm1 ~]# mkdir -p /software
2. [root@cm1 ~]# rpm -ivh /software/jdk-8u181-linux-x64.rpm
以上命令执行完成之后,会在每台节点的/usr/java下安装jdk。在每台节点配置jdk的环境变量:
1. vim /etc/profile
2. #在每台节点中配置profile文件,在最后追加内容如下:#
3. export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
4. export PATH=$JAVA_HOME/bin:$PATH
5. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
执行完成以上命令之后,在每台节点上执行 “source /etc/profile”使配置生效。
11. 安装 mysql 数据库
在cm1中安装mysql数据库,在Centos6中安装mysql可以直接执行命令:
yum install –y mysql-server
但是在Centos7中yum源中没有自带mysql的安装包,需要执行命令下载mysql 的rpm配置文件,然后进行repo的安装,安装repo后在/etc/yum.repos.d路径下会有对应的mysql repo配置,然后再安装mysql,这里安装的mysql是5.7版本。命令如下:
1. #下载mysql repo,下载完成后会在当前执行命令目录下生成 rpm -ivh mysql57-community-release-el7-9.noarch.rpm文件。
2. [root@cm1 ~]# wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
3.
4. #安装repo,安装完成后再/etc/yum.repos.d 目录下会生成mysql的 repo文件
5. [root@cm1 ~]# rpm -ivh mysql57-community-release-el7-9.noarch.rpm
6.
7. #安装mysql
8. [root@cm1 ~]# yum install mysql-server -y
执行完成之后,启动mysql:systemctl start mysqld,也可以使用service mysqld start启动msyql。
mysql5.7开始初始登录mysql需要使用初始密码,启动后登录mysql需要指定安装时的临时密码,使用命令:grep ‘temporary password’ /var/log/mysqld.log 获取临时密码后,执行如下语句:
1. #使用临时密码登录mysql
2. [root@cm1 log]# mysql -u root -pK-BJt9jV0jb0
3.
4. #默认mysql密码需要含有数字、大小写字符、下划线等,这里设置密码验证级别为低即可
5. mysql> set global validate_password_policy=LOW;
6.
7. #默认mysql密码设置长度是8位,这里修改成6位
8. mysql>