一、集群规划
实际工作中搭建CDH集群的话,原则上来说,机子越多越好,如果资源有限的话,建议前期最好4台机子,4台机子的话,针对hadoop集群而言 可以设置为1主3从,
如果考虑到HA的话,就需要最少5台机子,本案例采用的服务器配置如下
IP | 主机名 | CPU | 内存 | 硬盘 | 角色 |
---|---|---|---|---|---|
172.20.9.1 | hadoop1 | 8h | 64g | 50g | cm-server、NameNode、SecondaryNameNode、Yarn ResourceManager |
172.20.9.2 | hadoop2 | 8h | 32g | 50g | DataNode、NodeManager |
172.20.9.3 | hadoop3 | 8h | 32g | 50g | DataNode、NodeManager |
二、安装部署
这里部署就用3台机子来演示
1、主机名配置
所有节点都需要配置
# 这里我设置的是hadoop1、hadoop2、hadoop3
hostnamectl set-hostname <主机名>
2、绑定主机名与IP的映射关系
所有节点都需要配置
vim /etc/hosts
# 这里的主机名和IP要对应你自己的主机名IP
172.20.9.1 hadoop1
172.20.9.2 hadoop2
172.20.9.3 hadoop3
做完上一步后最好ping一下所有机器的主机名,看看是否ping的通
3、关闭集群内所有机子的防火墙
如果集群内的所有机器都是内网环境的,直接关闭防火墙是没啥问题的,如果是外网环境,就不能关闭防火墙了,而是开放端口, 以下命令需要在所有机子执行,临时和永久自己选择一种即可
# 临时关闭,重启后又会打开
systemctl stop firewalld
# 永久关闭
systemctl disable firewalld
4、配置免密登录
# 主节点生成秘钥
ssh-keygen -t rsa
# 然后在主节点上将生成的秘钥复制到其他节点上,这里把自己也做为免密
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop3
上面的执行完毕后,可以在主节点通过ssh <主机名>
进行免密登录到子节点了
5、搭建ntp时间服务器
需要保证集群内所有节点的时间一致,否则集群会不稳定,在集群内所有节点上安装ntp服务,同步一个ntp时间服务器
首先在hadoop1节点操作
yum -y install ntp
vim /etc/ntp.conf
# 注释掉这四行
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 增加这一行,然后保存退出
server ntp.aliyun.com
其他节点也重复刚刚的操作
yum -y install ntp
vim /etc/ntp.conf
# 注释掉这四行
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 增加这一行,然后保存退出
server ntp.aliyun.com
启动并添加到开机启动项, 集群中每个节点都需要执行
service ntpd start
systemctl enable ntpd.service
配置好了之后,我们可以验证下现在同步的时间服务器,可以随便用一台节点试试,需要等待个几分钟,出现下面的结果就说明成功了
6、所有节点安装JDK
这里采用JDK8 点击下载
下载成功后的JDK上传到每台节点上
rpm -ivh jdk-8u212-linux-x64.rpm
默认会安装到/usr/java
目录, 验证是否安装成功 java -version
7、Hadoop1安装Mysql
# 卸载原装的mariadb
rpm -qa|grep mariadb
# 把上一条命令返回的内容拿来继续下一条命令
rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64
下载Mysql安装包,这里我们下载5.7.31版本的 点击下载 ,
下载成功后上传到Hadoop1机器上然后解压安装包
tar -xvf mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar
进行安装
rpm -ivh mysql-community-common-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-libs-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm --force --nodeps
开始配置Mysql
初始化mysql
mysqld --initialize --user=mysql
如果执行上面命令初始化mysql失败,提示报错信息: mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
那么需要执行:yum install -y libaio 然后在初始化
获取Mysql生成的随机密码,在文件/var/log/mysqld.log
文件中
cat /var/log/mysqld.log |tail -1
设置Mysql开机启动
systemctl start mysqld.service
重启Mysql否则连接不上
systemctl restart mysqld
连接Mysql并修改初始化密码
# 连接
mysql -uroot -p
# 修改root用户的密码为 abc123
alter user user() identified by "abc123";
初始化数据库,一共需要用到这些数据库
mysql> create database cmserver default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on cmserver.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database metastore default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.01 sec)
mysql> grant all on metastore.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database rman default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on rman.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database oozie default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on oozie.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database hue default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on hue.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
最后创建/usr/share/java
目录,将Mysql的驱动jar包放入到里面,这一步需要在集群内的所有节点上操作
mkdir -p /usr/share/java
jar包一定要重命名, 每个节点都要
mv mysql-connector-java-5.1.49.jar mysql-connector-java.jar
8、在hadoop1节点安装httpd服务
yum install -y httpd
# 启动httpd服务
systemctl start httpd
# 添加到开机启动
systemctl enable httpd.service
9、在hadoop1节点配置cloudera-manager相关包
创建目录
mkdir -p /var/www/html/cloudera-repos/cm6
下载cloudera相关文件, 地址:https://archive.cloudera.com/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
然后将这些下载后的文件上传到hadoop1节点,最终服务器上的文件效果是
10、配置cloudera-manager的yum源并添加到其他节点上
下载createrepo,下载地址为:http://www.rpmfind.net/linux/rpm2html/search.php?query=createrepo 找到centos7的,下载成功后上传到hadoop1节点
的opt目录下
安装createrepo
rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm --force --nodeps
下载deltarpm, 不然在后面创建repo的时候会提示缺少这个模块,同样上传到opt目录, 点击下载
安装
rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm --force --nodeps
回到cm6的目录,执行创建repo
createrepo .
这时候cm6目录会出现一个repodata
目录
完成创建repodata
后,在集群中的所有节点
去配置新的yum源
# 添加新的yum源
vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name=Cloudera Manager,Version
baseurl=http://hadoop1/cloudera-repos/cm6
gpgcheck=1
# 清除yum缓存
yum clean all
yum makecache
配置完后访问下,以确保base_url是正确的,地址为http://hadoop1/cloudera-repos/cm6/
, 如果你本机没有配置hostname与IP的绑定关系,那么就输入IP去访问, 访问成功后会进入到如下图所示的页面
11、安装cloudera-manager相关服务
安装CDH集群,需要先安装Cloudera-Manager(下面简称CM),通过CM提供的web界面来安装,非常快捷
- 在hadoop1节点操作
在安装之前,先执行以下这个命令,否则安装相关服务的时候会报错
rpm --import http://hadoop1/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安装cloudera-manager-daemons
、clouera-manager-agent
这两个服务,由于hadoop1节点
作为cm的server节点,所以需要多安装个cloudera-manager-server
服务
yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
- 在hadoop2节点操作
在安装之前,一样先执行以下这个命令,否则安装相关服务的时候会报错
rpm --import http://hadoop1/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安装cloudera-manager-daemons
、clouera-manager-agent
这两个服务
yum install -y cloudera-manager-daemons cloudera-manager-agent
- 在hadoop3节点操作
在安装之前,一样先执行以下这个命令,否则安装相关服务的时候会报错
rpm --import http://hadoop1/cloudera-repos/cm6/RPM-GPG-KEY-cloudera
安装cloudera-manager-daemons
、clouera-manager-agent
这两个服务
yum install -y cloudera-manager-daemons cloudera-manager-agent
安装完CM以后,在/opt
目录会出现cloudera
目录,这时候需要将cdh的安装包上传到/opt/cloudera/parcel-repo
目录下,可以选择直接点击下载,
也可以前往地址进行自己下载: https://archive.cloudera.com/cdh6/6.2.1/parcels/
首先将CDH安装包自行上传到hadoop1节点的/opt/cloudera/parcel-repo
目录中,然后进入到hadoop1节点的/opt/cloudera/parcel-repo
目录,生成sha文件
sha1sum CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel | awk '{print $1}' > CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha
然后将CDH的安装包和新生成的sha文件通过scp命令拷贝到hadoop2和hadoop3节点,由于hadoop2和hadoop3只有/opt/cloudera/目录,所以需要我们先手动在这两个节点上创建目录
mkdir -p /opt/cloudera/parcel-repo
在hadoop1节点执行远程拷贝,进入到/opt/cloudera/parcel-repo
目录
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel hadoop2:/opt/cloudera/parcel-repo
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel hadoop3:/opt/cloudera/parcel-repo
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha hadoop3:/opt/cloudera/parcel-repo
scp CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha hadoop2:/opt/cloudera/parcel-repo
12、hadoop1节点启动CM和安装CDH集群
- 初始化CM
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver root abc123
- 启动CM
service cloudera-scm-server start
过个几分钟,就可以访问CM的web界面了,一般5~10分钟,端口为7180
- 安装CDH集群
通过访问http://hadoop1:7180
进入web界面,如果本机未配置IP和主机名的映射关系,则通过IP去访问
账号和密码都是admin
,登录进来之后会出现这个页面,点击继续
选择默认的即可
稍等一会,就会进入这个页面,点击继续
接下来是集群名称,也可以使用默认的
输入集群中的所有主机名,然后点击搜索按钮,然后选中所有主机,点击继续按钮
输入自定义存储库,确认版本为6.2.1,点击继续
JDK安装页直接点击继续,因为之前我们已经安装好了,不需要这里再次安装,这时候到了设置SSH密码的步骤了,这时候我们输入集群中节点的密码,然后继续
接下来会进入到cm-agent的安装页面,需要稍等一会,5~10分钟左右,安装成功后会自动到安装CDH
全部安装成功后是这样的效果,然后继续下一步
点击两个高级选项,开始检测
检查第一个检测的结果
检查第二个检测的结果
根据这里提示的去更改即可
先在hadoop1节点上修改,然后在其他节点上操作
sysctl vm.swappiness=10
echo 'vm.swappiness=10'>> /etc/sysctl.conf
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
vim /etc/rc.local
# 将下面这两行配置添加到文件末尾即可
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
修改完毕后点击重新运行进行重新检测,这时候检测结果正常了,然后选中箭头指向的那个,点击继续
选择适合自己的方案,这里就选择自定义了,方便演示,而且spark和flink后期也是运行于yarn,因此就先自定义选择hdfs和yarn,点击继续后,cdh会自动进行角色分配,将刚才选择的大数据组件安装到不同节点上
前期不是很熟悉的情况下,最好还是采用自动分配的方案,这里我们也什么都不修改了, 然后点击继续按钮
在这里要输入数据库名称和账号密码,然后点击测试连接按钮,连接成功的话,在每一行的后面都会出现successful
,如果有错误,就需要看具体的错误信息了。这些数据库我们在安装mysql的时候都已经创好了, 测试通过后点击继续
这里根据情况修改,这里我们采用默认的不做修改,点击下一步
等待大数据组件启动
安装成功后效果是这样的, 点击继续
到此整个大数据集群就安装成功了
三、管理CDH
前面我们已经搭建好了CDH集群,这时候在通过地址去访问,就可以看到下面的界面了,地址是你安装集群的节点IP,端口7180
可以看到界面上有一些警告(扳手图标)和安全隐患(感叹号图标),关于警告我们可以动态观察,不一定要马上处理,对于安全隐患还是要处理下,此时界面中有一个安全隐患,直接点击感叹号查看详细信息
这里面的警告信息是针对hdfs的纠删码机制
的警告,这个是hadoop3.0的新特性(hdfs的存储策略)
,纠删码机制可以节省HDFS的存储空间,不过需要至少9个DataNode,目前我们只有两个DataNode,所以不能使用这种策略, 点击
这个警告信息,然后点击修改他的存储策略
更改他的默认存储策略为No default .... 表示不使用纠删码机制
保存更改后点击去掉检测
去掉勾选并保存更改
这时页面将不存在警告信息了,这时点击界面的左上角Cloudera Manager文字回到主页面
发现还有个警告信息,这时候我们去解决这个警告信息
这时候我们点击这个扳手图标查看这个错误信息,发现是提示我们Hdfs的Block块的副本数不足,因为HDFS的数据默认是需要存储3份
,我们这里只有两台DataNode,所以才出现了这个警告,如果在多一个DataNode是不会出现这个警告的,
不过也不会影响我们的使用,如果你们有足够多的机子的话,那是不会出现这个警告的
点击这个警告信息,我们进去查看详细的错误,发现多了一个警告信息,说我们采用了过期的配置,这是因为我们前面修改了默认的存储策略,所以这时候我们需要重启下, 点击箭头所指向的蓝色字体
可以发现详细的配置变更记录,这时候点击右下方的重启过时服务
允许他重新部署客户端配置,然后点击立即重启
等个1-2几分钟,重启成功后的效果如下
点击完成回到主页面,可以看到没有过期配置需要重启的提示图标了
但是发现hdfs旁边还是有个警告,看到很不舒服,这时候我们点击那个扳手,再点击suppress,然后在弹出的界面点击确认即可
这时候在回到主页面就看到旁边的警告信息了,剩下的就是一些JVM的配置了,这个按需更改即可
四、使用CDH中HDFS
不管是自己手动搭建官方的Hadoop集群,还是通过CDH集群来安装,操作HDFS都是一样的,接下来演示一下操作HDFS,登录到hadoop1节点
-
查看文件
-
创建文件
发现报错权限不足,创建失败。在CDH环境中,Hadoop平台的最高权限用户是HDFS,属于supergroup组。默认HDFS是会开启权限认证的,所以操作时,我们可以设置下当前服务器的Hadoop用户环境
# 编辑系统环境变量
vim /etc/profile
# 在最后面增加下面这行,然后保存退出
export HADOOP_USER_NAME='hdfs'
# 刷新配置
source /etc/profile
然后再去执行刚刚创建文件夹的命令,发现没问题了,可以查看下文件列表,发现多出了刚创建的文件夹
五、停止和启动cm以及cdh集群
1、停止
先停止CDH集群,在去停止CM
2、启动
和停止相反,启动的时候先启动CM再去启动CDH
手册到此结束啦,谢谢您的观看