以下记录和介绍为自己在测试环境中的实际操作,因为很详细,所以篇幅较长,作为自己的记录文档,同时也帮助初学大数据平台搭建的朋友。
目录
6.2 Required List parameter 'hosts[]' is not present
1. CDH介绍
Hadoop主流三大发行版本:
1. Apache hadoop 官方社区开源版本
2. CDH
Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”),基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。
3. HDP
现在cdh已经将hdp收购。Cdh公司在2008年成立,hadoop创始人Doug Cutting也加入到cdh公司,hdp有一个沙盒功能,就是将大数据的服务也提前安装在系统中,加载虚拟机后就可以直接使用。
1.1 CDH体系结构
1. Server:是CM的核心,管理整个集群安装软件、配置、开始和停止服务。
2. Agent:执行Server发送的命令,以及启动和停止进程节点机器上的进程,触发安装和监控主机。每隔一段时间(4s)向server汇报心跳。
3. Manageement Service:执行各种监控、报警和报告功能的服务。
4 .Database:存储配置和监控信息。
5. Cloudera Repository:软件仓库。
6. Client:包括Admin Console管理员控制台,是管理集群和CM的交互界面。
1.2 CDH官网下载地址
CDH 6 Download Information | 6.x | Cloudera Documentation
下面界面是CM软件的下载界面:
下面是cdh仓库的下载:
2. 系统配置
2.1系统选择和集群规划
CentOS-7-x86_64-DVD-1708.iso
集群名称 | 节点类型 | 主机名 | 集群地址 |
Mini | ClouderaManager | Mini1 | 192.168.117.81 |
Namenode | Mini1 | 192.168.117.81 | |
Mini2 | 192.168.117.82 | ||
Zookeeper节点 | Mini[1-3] | 192.168.117.81/82/83 | |
Datanode节点 | Mini[1-3] | 192.168.117.81/82/83 |
2.2 配置集群ip
2.2.1 配置网络
vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.117.81
GATEWAY=192.168.117.1
NETMASK=255.255.255.0
DNS1=114.114.114.114 ###离线配置就不需要设置DNS
重启网卡:
systemctl restart network
2.2.2 配置Ip与主机名映射
vi /etc/hosts
2.3 配置无密码登录
###安装Cloudera Manager本身并不需要ssh无密码登陆,这里做配置主要是为了后续配置集群方便。实现多个机器的ssh免密码登录的核心思想是把每一个机器的rsa公钥集中到一个文件中,并且把这个文件分发到所有的机器上面去。
详细配置链接:ssh免秘钥登录_大宇进阶之路的博客-CSDN博客
mkdir -p /root/.ssh
进入/root/.ssh/目录下执行命令生成id_rsa.pub文件
ssh-keygen -t rsa ###之后一路回车,产生秘钥
并将秘钥追加至authorized_keys文件中
cat id_rsa.pub >> authorized_keys ###在.ssh文件下运行此命令
将此节点authorized_keys文件传至下一台机器
scp authorized_keys root@mini2:/root/.ssh
以此类推,将每台机器文件追加并传至下一台机器,然后将最后一台机器的秘钥再分发到每台机器中。效果如下:
2.4 禁用防火墙 (所有节点执行)
在所有节点上关闭防火墙
systemctl status firewalld 检查防火前状态
systemctl stop firewalld 关闭防火墙
systemctl disable firewalld 主机重启自动关闭防火墙
2.5 禁用SELinux(所有节点执行)
在命令行运行:
sed -i 's/^SELINUX=\(.*\)/SELINUX=disabled/g' /etc/selinux/config
2.6 禁用透明大页(THP)(所有节点执行)
这一参数默认值可能会导致CDH性能下降,在所有节点执行以下命令:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /etc/rc.local ###为了防止重启机器后,上述配置不生效,将以上内容写入 /etc/rc.local
2.7 禁用交换空间(所有节点执行)
设置将 /proc/sys/vm/swappiness 设置为 0 (修改swap空间的swappiness,降低对硬盘的缓存)
执行以下输入:
echo "vm.swappiness=0" >> /etc/sysctl.conf (永久降低虚拟内存需求率)
sysctl -p (使命令生效)
2.8 设置文件打开数量和用户最大进程数
查看文件打开数量 ulimit -a
查看用户最大进程数 ulimit -u
vi /etc/security/limits.conf
增加以下内容:
* soft nofile 65535
* hard nofile 65535
* soft nproc 32000
* hard nproc 32000
重启系统后生效。
3. 外部软件和服务准备
3.1 CDH yum源的制作
3.1.1 挂载虚拟机中的iso镜像 (所有节点执行)
创建yum源存储目录/home/iso_yum,然后挂载镜像。这里使用Vmware虚拟机已经加载了centos7的镜像,在/dev/cdrom下。安装该yum源是为了安装http和creatrepo、ntp服务。
mkdir /home/iso_yum
mount /dev/cdrom /home/iso_yum
### 参考Mount挂载命令使用方法_大数据球球的博客-CSDN博客
VirtualBox中配置linux OS的本地磁盘镜像作为其软件源_不习惯打伞的鱼的博客-CSDN博客
mount -t iso9660 /dev/sr1 /home/iso_yum #挂载虚拟机镜像
其中mount -t iso9660表示挂载的是光盘或光盘镜像,而挂载CDROM使用mount命令即可,不加-t具体选项。
3.1.2将原来的yum源命令失效
在/etc/yum.repos.d 目录下执行命令:
rename .repo .repo.bak * ###将原yum源重命令让其失效,或者删除原repo文件
3.1.3 编辑rhel7.repo文件
yum的配置文件在/etc/yum.repos.d/目录下,在该目录创建一个.repo的文件,文件名任意,这里我建立rhel7.repo。
vi rhel7.repo
[rhel7] yum仓库的唯一标识符,防止冲突,也可以任意名称
name=rhel7 yum仓库的名称
baseurl=file:///home/iso_yum/ 提供的yum源的方式(ftp://… 、http:// 、本地file:///)
enabled=1 yum源是否可用(“1”为可用,“0”为禁用)
gpgcheck=0 此源是否校验文件(“1”为校验,“0为不校验”)
3.1.4 .repo文件发送到其他节点机器下
scp /etc/yum.repos.d/rhel7.repo mini2:/etc/yum.repos.d/
scp /etc/yum.repos.d/rhel7.repo mini3:/etc/yum.repos.d/
3.1.5 清空yum缓存(所有节点都执行)
yum clean all 清空缓存信息
yum repolist 查看yum仓库列表
yum list | wc -l 统计列出所有包的数量,如果列出了,说明yum源配置完成, 这里可以看出有3956个包
yum makecache 构建yum缓存
3.2 安装httpd、NTP、Createrepo服务
推荐建立Cloudera Manager的yum源进行安装,以Parcel的方式建立Hadoop组件,两者都需要有一个FTP或者HTTP服务器,让安装过程能够从服务器中读取这些安装包,本次安装选择使用HTTP服务器作为RPM与Parcel安装程序的存放位置,NTP作为时钟同步服务器,按要求同步主机时钟,为了能够正确建立Cloudera Manager 安装包yum源,需要安装Createrepo工具。
3.2.1 安装httpd(主节点)
yum -y install httpd ###就是用的刚配置的cenos7系统源
systemctl start httpd (启动httpd服务)
systemctl status httpd (查看httpd服务状态)
systemctl enable httpd (将httpd服务加入到开启启动项中)
启动成功后可以浏览 http://mini1/,如果可以看到以下界面说明是成功的。
在var/www/html目录下创建一个目录cm目录,用于存放Cloudera Manager、mysql和jdk等rpm安装包
mkdir –p /var/www/html/cm
将包括 oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm以及CM所有rpm包拷贝至cm目录下。
3.2.2 安装createrepo
yum -y install createrepo ### #将某目录制作成软件仓库的作用
3.2.3 安装NTP(所有节点都安装)
yum -y install ntp
3.3 在http的目录下创建yum源
在/var/www/html/cm目录下执行命令:
createrepo . 以便在此目录下创建本地yum仓库
在/etc/yum.repos.d下面新建cm.repo文件
vi cm.repo
[Cloudera_Manager]
name=Cloudera Manager
baseurl=http://192.168.117.81/cm
enabled=1
gpgcheck=0
3.3.1 .repo文件发送到其他节点机器下
scp /etc/yum.repos.d/cm.repo mini2:/etc/yum.repos.d/
scp /etc/yum.repos.d/cm.repo mini3:/etc/yum.repos.d/
3.3.2 清空yum缓存(所有节点都执行)
yum clean all 清空缓存信息
yum repolist 查看yum仓库列表
yum makecache 构建yum缓存
3.4 安装JDK 及配置
3.4.1 安装jdk(所有节点都执行)
yum -y install jdk ###因为var/www/html/cm目录下已经有jdk的rpm包作为yum源,多台服务器可以同时安装
java的默认安装目录为/usr/java
3.4.2 配置jdk
vi /etc/profile
在文件的末尾添加一下内容
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=$PATH:$JAVA_HOME/bin
3.4.3 配置文件下发到其他节点
scp /etc/profile mini2:/etc/
scp /etc/profile mini3:/etc/
3.4.4 使配置的环境变量生效(所有节点执行)
source /etc/profile
3.5 配置时间同步
时间同步有两种方法,这里选用更优的方法2.
1. 使用crontab命令使得mini2和mini3同步mini1的时间
2. 使用ntp进行同步,而ntp更精确!
3.5.1 查看是否开启chrony
查看是否开启chrony,禁用【mini1,mini2,mini3】chrony时间同步服务(centos7操作系统默认使用chrony)
systemctl stop chronyd
systemctl disable chronyd
3.5.2 配置NTP
- 配置主节点
vi /etc/ntp.conf
去掉注释,将地址改成网段地址
restrict 192.168.117.0 mask 255.255.255.0 nomodify notrap ###表示授权192.168.117.0-192.168.117.255网段上的所有机器都可以从时间服务器查询和同步时间。
注释掉这几个
#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 127.127.1.0 ###在实际中可能会出现节点网络连接丢失的情况,这个时候我们可以以本地时间作为时间服务
fudge 127.127.1.0 stratum 10
- 配置其他从节点
vi /etc/ntp.conf
增加 server 192.168.117.81 ,如下:
- 启动ntp服务(所有节点)
systemctl start ntpd.service
systemctl enable ntpd.service
### 如果机器时间相差较大,可以手动设置时间date -s "2020-2-10 21:41"
ntpq -p 查看命令同步的情况
3.6 配置Mysql数据库
安装Mysql数据库用于存放CM相应的配置数据等。
3.6.1 安装mysql数据库
yum install -y mysql-community-server
3.6.2 启动mysql
systemctl enable mysqld
systemctl list-unit-files |grep mysqld
systemctl start mysqld
3.6.3 修改mysql密码
获取临时登录密码:grep "password" /var/log/mysqld.log
使用临时登录密码进入mysql : mysql -uroot -p'临时密码'
修改密码:
mysql> set global validate_password_policy=0; #定义复杂度
mysql> set global validate_password_length=1; #定义长度 默认是8
mysql> set password for 'root'@'localhost'=password('root'); #密码不能设置太简单
3.6.4 修改mysql的访问权限
mysql> grant all privileges on *.* to 'root'@'%' identified by 'root';
### *.* 中前面的*号用来指定数据库名,后面的*号用来指定表名,root是用户@后面接限制的主机,%表示任何地方。
mysql> flush privileges;
mysql> show grants for root; ###查看root用户权限
3.6.5 创建表cdh相关默认库(也可以后创建)
输入命令;mysql -uroot -proot 进入mysql,执行以下sql建库语句
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database reports DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database activity DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database sentry DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
3.6.6 上传mysql与CM连接的jar包
新建目录:mkdir -p /usr/share/java
将mysql-connector-java-5.1.47.jar命名为 mysql-connector-java.jar并上传到mini1的/usr/share/java 目录下,这一步需要在所有访问数据库的节点进行。
4 安装CDH集群
离线安装Cloudera Manager Server
4.1 安装CM server和Agent
在主节点mini1上安装CM Server 和CM Agent
yum install -y cloudera-manager-daemons cloudera-manager-server cloudera-manager-agent
在节点mini2,mini3上安装 Cloudera Manager agent
yum install -y cloudera-manager-daemons cloudera-manager-agent
4.2 修改agent配置文件
分别修改mini1,mini2,mini3agent所在的节点的配置文件config.ini内容
vi /etc/cloudera-scm-agent/config.ini
server_host=mini1 (这里是以mini1作为server节点,让agent感知server所在节点)
4.3 初始化SCM的数据库
在主节点mini初始化SCM的数据库
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h localhost -uroot -proot --scm-host localhost scm root root
CDH5版本的初始化.sh文件在如下目录:
/usr/share/cmf/schema/scm_prepare_database.sh mysql -h localhost -uroot -proot --scm-host localhost scm root root
4.4 上传CDH服务包
上传以下三个CHD6大数据服务组件资源包 到【mini1】节点的 /opt/cloudera/parcel-repo 目录下
CDH-6.3.0-1.cdh6.3.0.p0.1279813-el7.parcel
CDH-6.3.0-1.cdh6.3.0.p0.1279813-el7.parcel.sha
manifest.json
4.5 启动Cloudera Manager
主节点mini1启动Cloudera Manager Server
systemctl start cloudera-scm-server (启动server)
systemctl status cloudera-scm-server (查看server状态)
systemctl stop cloudera-scm-server (停止server)
systemctl enable cloudera-scm-server (开机启动server)
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log (查看server启动日志)
到这一步说明就可以没问题了,通过使用netstat -nltp命令查看【mini1】端口7180 是否启动成功,如果出现这个7180端口
此时可以查看网页
4.6 启动Cloudera Manager agent
在从节点【mini1,mini2,mini3】上启动Cloudera Manager agent
systemctl start cloudera-scm-agent (启动agent)
systemctl enable cloudera-scm-agent (开机启动agent)
tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log (查看agent启动日志)
启动完成,运行命令 netstat -nltp 查看端口号,如果增加了9000和19001端口说明成功,这两个端口是与server内部通信使用的。
5 CDH服务的安装
登录UI页面,一直默认继续,到以下这一步:
下面这个界面等待时间较久:
选择自定义安装服务:
首先安装zookeeper,选择之前建立好的mysql中的数据库,并测试数据库连接:
6 安装遇到的问题
6.1 安装CDH时候出现主机运行状态不良情况
问题:通过Cloudera WEB界面安装Hadoop过程中,在安装Parcel步骤时,一个节点分配激活失败,报错信息显示”主机运行状况不良
分析:
CM的集群是Server-Agent模式的,那么必须有一个唯一的id来标识Server和Agent属于同一个集群,在Agent端就是使用cm_guid文件来记录id的。
假设server端重新安装了一遍,重新构建集群,而agent没有重新安装,那么他们的id是一定不同的,就会造成主机运行状况不良的异常。
解决方法:
删除agent目录下面的cm_guid文件,并重启失败节点的agent服务恢复
find / -name cm_guid
rm -rf /var/lib/cloudera-scm-agent/cm_guid
systemctl restart cloudera-scm-agent
解决方案参考以下链接:
https://blog.csdn.net/holdbelief/article/details/80287471
6.2 Required List parameter 'hosts[]' is not present
问题:安装cdh的parcel包下一步时显示 Required List parameter 'hosts[]' is not present的报错
解决方法:
查看日志,跟manifest.json文件有关,删除/opt/cloudera/parcel-repo/目录下的manifest.json文件,重新上传。
重启cloudera-scm-server,报错解决。