hadoop是一个开源项目,所以很多公司在这个基础进行商业化,Cloudera对hadoop做了相应的改变。
Cloudera公司的发行版,我们将该版本称为CDH(Cloudera Distribution Hadoop)。截至目前为止,CDH共有5个版本,其中,前两个已经不再更新,最近的两个,分别是CDH4在Apache Hadoop 2.0.0版本基础上演化而来的),CDH5,它们每隔一段时间便会更新一次。
• Cloudera's Distribution, including Apache Hadoop
• 是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建
• 提供了Hadoop的核心
– 可扩展存储
– 分布式计算
CDH和Apache版本主要区别如下:
(1) 、CDH对Hadoop版本的划分非常清晰,相比而言,Apache版本较为混乱,相对来所,CDH的兼容性,安全性,稳定性要好于Apache hadoop。
(2)、安全 CDH支持Kerberos安全认证,apache hadoop则使用简陋的用户名匹配认证
(3)、CDH文档清晰,很多采用Apache版本的用户都会阅读CDH提供的文档,包括安装文档、升级文档等。
(4)、CDH支持Yum/Apt包,Tar包,RPM包,CM安装,Cloudera Manager三种方式安装,Apache hadoop只支持Tar包安装。
Cloudera版本层次更加清晰,且它提供了适用于各种操作系统的Hadoop安装包,可直接使用apt-get或者yum命令进行安装,更加方便。
• 版本管理混乱
• 部署过程繁琐、升级过程复杂
• 兼容性差
• 安全性低
• 版本划分清晰
• 版本更新速度快
• 支持Kerberos安全认证
• 文档清晰
• 支持多种安装方式(Cloudera Manager方式)
cloudera官网:https://www.cloudera.com/
cloudera官方文档:https://www.cloudera.com/documentation/enterprise/latest.html
使用Cloudera Manager安装cdh集群
采用Cloudera Manager部署cdh集群,部署和管理都相对简单,推荐采用这种方式。本次实验亦是采用这种方式。
Cloudera Manager的安装有如下三种方式:
(1)使用cloudera-manager-installer.bin在线安装
(2)使用rpm、yum、apt-get方式在线安装
(3)使用Tarballs的方式离线安装
(1)使用第一种方式进行安装,需要节点能够网络访问官网,由于安装包比较大,在线安装时间会比较长,网络质量不好也容易造成安装中断,所以不推荐采用这种方式
(2)使用第二种方式安装,较为方便简单,可以通过几条yum命令即可完成安装,这种安装方式同样需要网络质量好的环境进行在线安装,相对于第一种,较为方便。
(3)使用第三章安装方式,是通过下载tar包进行离线安装,相对来说是安装时间是最短的,本次实验是采用这种安装方式进行安装部署。
使用命令行方式安装。
采用这种方式,需要搭建内部yum服务器,将cdh相应安装文件同步至yum服务器,在安装时节点从内部yum服务器安装cdh集群,采用这种安装方式较为方便,后期进行升级、重新安装也比较容易,需要注意的是在安装前需要将官方的rpm安装包同步至本地,同步过程会比较长。如果不搭建内部yum服务器,也可以直接使用官方yum源在线安装,但是这种安装方式非常耗时,受网络影响大,不建议使用这种方式安装。
本次实验使用Tarballs的方式离线安装部署Cloudera Manager和cdh组件,并通过Cloudera Manager配置管理cdh集群。
序号 |
主机编号 |
操作系统 |
部署组件 |
内存 (由电脑内存决定) |
磁盘 |
节点 |
IP |
---|---|---|---|---|---|---|---|
1 |
cdh1 |
centos 7.6 |
NameNode |
15G |
100G |
主节点 |
192.168.1.128 |
2 |
cdh2 |
Centos7.6 |
SecondaryNameNode |
3G |
50G |
从节点 |
192.168.1.129 |
3 |
cdh3 |
centos 7.6 |
DataNode |
3G |
50G |
从节点 |
192.168.1.130 |
4 |
cdh4 |
centos 7.6 |
DataNode |
3G |
50G
|
从节点 |
192.168.1.131 |
5 |
Cdh5 |
centos 7.6 |
DataNode |
3G |
50G 磁盘容量可以按需增加 |
从节点 |
192.168.1.132 |
6 |
Cdh6 |
centos 7.6 |
DataNode |
3G |
50G 磁盘容量可以按需增加 |
从节点 |
192.168.1.133 |
(1)虚拟机:VMware® Workstation 14 Pro
(2)系统:centos7.6(64位)—CentOS-7-x86_64-DVD-1810.iso
(3)CDH:cdh5.15.2
(4)JDK:jdk-8u191-linux-x64.tar.gz
(5)连接工具:xshell6 和 xftp (文件名:Xshell Plus6.0.0007.rar,解压后,点击绿化.bat,即可使用)
(6)cloudera-manager安装方式:
使用cloudera-manager-installer.bin在线安装
直接打开浏览器,输入VMware下载,也可以登录官网下载。
下载下来的是一个可执行的exe文件,选择安装目录,点击直接下一步,下一步安装即可,安装完成后,启动需要输入许可证秘钥,这里可根据直接下载的版本,浏览器搜索其秘钥即可,然后填写秘钥即可。我这里是VMware 14 pro,其注册完成后,可通过:帮助→关于VMware,查看其版本信息和是否注册成功,如图3-1所示。
图3-1 VMware的版本信息和过期情况
这里选用centos系统镜像,也可选用ubantu、redhat等。登录centos官网,其镜像可分为完整版(DVD.ISO)和简装版(Minimal ISO),最好选择完整版。这里的系统镜像为CentOS-7-x86_64-DVD-1810.iso。
(1)下载软件cloudera-manager.repo文件
下载网站为:http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/cloudera-manager.repo
下载完成后,利用编辑器打开此文件,将
baseurl=https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5/
修改为:
baseurl=https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.15.2/
之后保存即可。
(2)下载cloudera-manager-installer.bin
下载网站为:http://archive.cloudera.com/cm5/installer/5.12.2/cloudera-manager-installer.bin
(3)下载CDH的Parcel文件
下载网站为:http://archive.cloudera.com/cdh5/parcels/5.12.2/
下载三个文件:
CDH-5.15.2-1.cdh5.15.2.p0.3-el7.parcel.sha1
CDH-5.12.2-1.cdh5.12.2.p0.4-el7.parcel
manifest.json
注意:
下载parcel文件时需要注意centos版本,el5是centos5.X下使用,el6在centos6.x下使用,el7在centos7.x下使用。
修改CDH-5.15.2-1.cdh5.15.2.p0.3-el7.parcel.sha1
为CDH-5.15.2-1.cdh5.15.2.p0.3-el7.parcel.sha
(4)登录网址https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.15.2/RPMS/x86_64/将里面所有的文件均下载,放入CDH包中。
新建六台虚拟机,其中一台作为主机,另外五台作为从机。
新建虚拟机,以以下步骤进行。
第一步:打开VMware
第二步:点击创建新的虚拟机
第三步:选用典型安装,将下载的系统镜像添加,这里选择稍后安装操作系统,如图6-1所示。
图6-1 添加系统镜像
第四步:为虚拟机命名和选择存储位置,如图6-2所示。
6-2 命名虚拟机
第五步:直接下一步,到自定义硬件,包括定义网络适配器和定义DVD,修改内存(和电脑内存有关),磁盘(根据需要进行设置),这里参考1.4节,如图6-3所示。
图6-3 自定义配置硬件
第六步:点击完成,启动此虚拟机,开始自动安装(2分钟左右),直至弹出如图6-4所示的界面,选择简体中文,下一步即可。
图6-4 选择语言
第七步:安装位置选择自动分配,接下来是网络和主机名的配置,设置主机名需要点击右侧应用,如图6-5所示。
图6-5 配置网络和主机名
第八步:点击完成,再点击开始安装,这里在配置root密码和创建用户(可以不用创建),如图6-6所示。
图6-6 设置root密码
第九步:图6-6就开始写入文件,自动安装(5分钟左右),等安装完成后,点击重启,如图6-7所示。
图6-7 重启虚拟机
第十步:将此虚拟机的内存设为3G,步骤为:点击此虚拟机,右键,选择设置,将内存增加为3G,默认是1G,最后启动,输入用户名、密码即可。
注意:
此系统没有安装工具,需要使用命令:yum install net-tools,进行安装,安装完成后,输入命令:ifconfig,查看本虚拟机的IP地址,如图6-8所示。
图6-8 查看IP地址
第十一步:使用xshell6连接此虚拟机,进行其它操作。
6.2 配置主机名(所有节点)
命令:hostnamectl set-hostname cdh1
其实这里可以不用配置,在6.1的第七步已经完成了。
这里需要注意:
修改每台虚拟机的配置文件,设置固定IP
首先 cd /etc/sysconfig/network-scripts查看网络配置文件:
修改配置文件内容
sudo vi ifcfg-ens33
初始配置:
修改如下:
IPv6全部注释,网络设置为静态,模式有dhcp和static,这里需改为static模式。
重启
service network restart
查看修改后的ip:
Ifconfig
测试本机是否能Ping通虚拟机
测试虚拟机是否能连外网
如果都能正常连接再重启虚拟机看看ip是否变化,如果一切正常证明设置成功
6.3 添加主机名(所有节点)
[root@cdh1 ~]# vi /etc/hosts
将集群的主机名和IP均添加进入
这里是
192.168.1.128 cdh1
192.168.1.129 cdh2
192.168.1.130 cdh3
192.168.1.131 cdh4
192.168.1.132 cdh5
192.168.1.133 cdh6
命令
vi /etc/selinux/config
修改SELinux=disabled,如下所示:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
6.5 关闭防火墙(所有节点)
命令:
systemctl stop firewalld
查看防火墙状态命令:
systemctl status firewalld
如图6-9所示。
图6-9 查看或关闭防火墙
网络时间同步协议(NTP)是时间同步的技术基础。大数据时代,整个处理计算系统内的大数据通信都是通过网络进行。时间同步也是如此,利用大数据的互联网络传送标准时间信息,实现大数据系统内时间同步。
按照Cloudera的官方建议,所有的CDH节点和Cloudea Manager节点都需要启动ntpd服务。
安装NTP
yum install ntp -y
设置开机启动 :
systemctl enable ntpd.service
设置时间同步 :
ntpdate -u s2c.time.edu.cn
可去官网下载JDK,这里jdk版本为1.8.0_191,jdk-8u191-linux-x64.tar.gz。
1、虚拟机下新建一目录,命令:mkdir /jdk,如下所示:
[root@cdh1 ~]# cd /
[root@cdh1 /]# mkdir /jdk
tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/local/
vi /etc/profile
将以下三行添加进去即可
export JAVA_HOME=/usr/local/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使环境变量配置生效:
source /etc/profile
看成java版本,是否配置成功:
java -version
删除原来的数据库:
centos7中默认安装了数据库MariaDB,如果直接安装MySQL的话,会直接覆盖掉这个数据库,当然也可以手动删除一下:
[root@localhost ~]# rpm -qa|grep mariadb // 查询出来已安装的mariadb
[root@localhost ~]# rpm -e --nodeps 文件名 // 卸载mariadb,文件名为上述命令查询出来的文件
然后现在开始将当前目录切换到root也就是:
cd ~
下载与安装MySQL:
这里采用Yum管理好了各种rpm包的依赖,能够从指定的服务器自动下载RPM包并且安装,所以在安装完成后必须要卸掉,否则会自动更新。
1.安装MySQL官方的yum repository
[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
2.下载rpm包
[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm
3.安装MySQL服务
[root@localhost ~]# yum -y install mysql-community-server
最后会出现个complete!
4.启动MySQL服务
[root@localhost ~]# systemctl start mysqld.service
看到类似下面的界面,或者以Starting MySqL server.. started MysqlServer..结尾的就成功启动了
还有几个关于MySQL常用的命令:
重启:
systemctl restart mysqld.service
停止:
systemctl stop mysqld.service
查看状态:
systemctl status mysqld.service
还可以配置MySQL的开机启动:
systemctl enable mysqld
systemctl daemon-reload 刚刚配置的服务需要让systemctl能识别,就必须刷新配置
关于登录MySQL:
登录命令:
mysql -u root -p
意思就是用root用户登录,然后准备输入密码。
第一次启动MySQL后,就会有临时密码,这个默认的初始密码在/var/log/mysqld.log文件中,我们可以用这个命令来查看:
grep "password" /var/log/mysqld.log
登录数据库后,输入
mysql> set global validate_password_policy=0; //改变密码等级
mysql> set global validate_password_length=4; //改变密码最小长度
然后再输入刚刚的命令:
SET PASSWORD = PASSWORD('root');
配置远程登录:
MySQL默认root用户只能本地登录,如果要远程连接,要简单设置下,这里直接用root来远程登录不添加其他角色。
使用命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
.*.的意思是所有库的所有表;To后面跟的是用户名;@后面跟的是ip地址,%代表所有ip地址,identified by后面的是密码。
然后再:
mysql> flush privileges;
注意:
需要注意mysql的配置文件中的bindaddress 的参数和skip-networking 配置
bindaddress : 设定哪些ip地址被配置,使得mysql服务器只回应哪些ip地址的请求),最好注释掉该参数或设置成为127.0.0.1以外的值
skip-networking : 如果设置了该参数项,将导致所有TCP/IP端口没有被监听,也就是说出了本机,其他客户端都无法用网络连接到本mysql服务器,所以应该注释掉该参数
添加3306端口:
命令:
firewall-cmd --zone=public --add-port=3306/tcp --permanent;
结果说没有运行防火墙:
那就先开防火墙咯:
systemctl status firewalld 查看防火墙状态
systemctl start firewalld 打开防火墙
然后再输入那个开放3306端口的命令就行了
firewall-cmd --zone=public --add-port=3306/tcp --permanent;
firewall-cmd --reload 重启防火墙
最后的收尾:
1.我们刚开始说要写在yum的repository,用这个命令就行:
yum -y remove mysql57-community-release-el7-10.noarch
2.MySQL设一下utf8:
打开/etc/my.cnf也就是数据库的配置文件,然后在底部复制粘贴:
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
采用navicat新建数据库时,需要将编码方式设置为,字符集:utf8 -- UTF-8 Unicode ,排序规则:utf8_general_ci
3.配置文件的说明:
/etc/my.cnf 这是mysql的主配置文件
/var/lib/mysql mysql数据库的数据库文件存放位置
/var/log mysql数据库的日志输出存放位置
6.9 配置免密登陆
在主节点上配置,主节点到自身和从节点的免密登陆。
[root@cdh1 ~]cd ~
[root@cdh1 ~]ssh-keygen
其后一直enter即可。
再将免密添加到主节点和其他从节点上。
命令:
ssh-copy-id cdh1
ssh-copy-id cdh2
ssh-copy-id cdh3
ssh-copy-id cdh4
ssh-copy-id cdh5
ssh-copy-id cdh6
测试是否配置成功,在cdh1上登陆cdh2或者其他主机,命令
ssh cdh2
这样表示登陆成功。
推出直接输入exit命令即可。
从mysql官网下载mysql的驱动包,下载之后的文件需要更名为:mysql-connector-java.jar,之后上传到虚拟机目录/usr/share/java/下,提示没有这个java目录,需要新建一个java目录,命令
新建app目录
mkdir -p /app
登录到根目录包下:
cd /app
将之前下载的cdh上传到app目录下。
本次安装的方式是采用离线安装部署,在部署前先下载好离线安装包,我们的实验的版本是cdh5.12.2。
cdh集群中每个节点(cdh1-6)都需要安装cdh5.12.2离线包。以下以cdh1为例子说明。将离线安装包放置于每个节点的/app目录下。
离线安装包中包含了cdh部署中的大部分安装文件,还有部分小文件需要在安装过程中自动联网下载,将CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel、manifest.json、CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha拷贝至相应路径。
# cp cloudera-manager.repo /etc/yum.repos.d/
# yum clean all
# yum list | grep cloudera
# cd /app
# yum -y localinstall *
# cp CDH-5.15.2-1.cdh5.15.2.p0.3-el7.parcel /opt/cloudera/parcel-repo/
#cp manifest.json /opt/cloudera/parcel-repo/
# cp CDH-5.15.2-1.cdh5.15.2.p0.3-el7.parcel.sha /opt/cloudera/parcel-repo/
注意:cp过程需要2分钟左右。
安装完cdh离线包后,在主节点安装Cloudera manager组件。Cloudera manager组件在主节点cdh1上安装。
第一次使用./cloudera-manager-installer.bin安装时会提示错误信息,此时应先将/etc/cloudera-scm-server/db.properties 这个文件删除
# cd /app
# chmod 775 cloudera-manager-installer.bin
# ./cloudera-manager-installer.bin
# rm /etc/cloudera-scm-server/db.properties
# ./cloudera-manager-installer.bin
使用./cloudera-manager-installer.bin安装过程比较简单,参考提示下一步完成即可
完成Cloudera manager的部署后,接下来我们将在Cloudera manager中配置cdh集群服务。可以通过检测端口号7180查看Cloudera manager服务是否启动。
cdh集群服务通过Cloudera manager进行配置,如下,在浏览器中输入Cloudera manager的IP和端口号。
http://192.168.1.128:7180,账户密码默认为admin/admin
输入cdh主机节点cdh[1-6]
cdh版本选择CDH-5.15.2-1.cdh5.15.2.p0.3,与安装版本对应
因为在节点环境准备阶段,已经安装了JDK,这里不用勾选安装。
保持默认,不勾选单用户模式
配置集群SSH免登录验证,使用root用户,密码为root
等待集群的安装,因为在前面的离线安装中已经安装了大部分文件,所以这个过程会比较快
如果出现这个错误:
解决方法:
是因为节点上次安装没有成功,需要删除cm_guid文件才能再次安装。
[root@cdh1 ~]# find / -name cm_guid
/var/lib/cloudera-scm-agent/cm_guid
[root@cdh1~]# rm -rf /var/lib/cloudera-scm-agent/cm_guid --删除文件
[root@cdh1 ~]# /etc/init.d/cloudera-scm-agent restart --重启服务
完成主机节点配置的验证
选择安装集群的服务,本次安装选择含Spark的内核
最后,配置集群服务的分配,cdh1作为主节点,尽可能的不作为数据节点使用。
配置集群的数据库,我们配置了外置的数据库,使用外置数据库,但需要利用Navicat在cdh1下建立数据库。(如果需要内嵌的数据库就不需要这一步)
这里是用的自定义数据库,就是我们前面安装的mysql数据库,可以不用安装,直接用内嵌数据库。
审核更改,直接默认,点击继续即可。
至此,我们完成cdh集群服务的部署
各节点运行状况,内存分配情况:
注意:当断电和关机,重启虚拟机后,需要对所有虚拟机关闭防火墙和主节点重新启动CM服务。
cd /etc/rc.d/init.d/
./cloudera-manager-server restart
./cloudera-manager-agent restart
(1)8888:hue端口,对hive数据库进行增删改查。
(2)19888:hdfs端口,查看hdfs的job
(3)18088:spark端口
(4)50075:HDFS端口
(5)8042:HDFS节点详细信息
(6)60010:HBase主页面
(7)50070:HDFS端口,查看namenode节点信息
错误1:运行脚本报错
org.apache.hadoop.security.AccessControlException: Permission denied: user=admin, access=WRITE, inode="/user/output":root:supergroup:drwxr-xr-x
问题原因,由于hdfs默认是root用户,需要添加hdfs用户
解决办法:在系统配置文件中添加一行:
export HADOOP_USER_NAME=hdfs
再保存,
source /etc/profile
即可运行sh脚本了。