【本文转载自:www.bigdata-star.com】
前言
在搭建CM之前。。本人也是纯人工的把hadoop生态圈常用组件自己集成了一遍。。途中遇到各种坑,比如版本不匹配导致的一系列问题。。但自己尝试一下是好的!因为手把手的纯命令行的搭建可以让你更了解它们!但是到了企业中是不可能这样滴,因为有诸多的劣势,试问如果一个集群有1000个节点,你怎么去人工搭?如果要全部升级,你又怎么人工处理?还有前面说的,版本不匹配问题各种坑。所以还是要用图形化的,管理性强的工具,比如CM。
Cloudera Manager功能
CM功能强大,主要表现在几个方面:
- 集群管理:比如添加节点,删除节点
- 配置管理:之前我们手工配置的那些配置文件比如core-site.xml,hdfs-site.xml,zoo.cfg等等,我们都可以通过图形化界面来配置。
- 日志管理:之前我们发现bug了,跑不起来了,得手工去看日志,比如,现在通通可以在CM上查看了!
- 监控:实时监控集群的各种运行状态,cpu,磁盘等的使用率
- 诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。
- 整合Hadoop生态圈中的组件:直接一键安装,再也不用担心版本匹配问题了!
CM架构
Agent:安装在每台主机上。该代理负责启动和停止的过程,拆包配置,触发装置和监控主机。
Server:CM的主节点,服务安装配置启动、角色停止启动、管理Agent。
Management Service:预警,监控,警报和报告功能。
Database:存储配置和监视信息。
Cloudera Repository:软件由Cloudera 管理分布存储库。
Clients:是用于与服务器进行交互的接口:
Admin Console - 基于Web的用户界面与管理员管理集群和Cloudera管理。
API - 与开发人员创建自定义的Cloudera Manager应用程序的API。
搭建CM平台步骤
搭建CM平台大致可以分为六部曲:
- 服务器配置:安装操作系统、配置网络、关闭防火墙、同步服务器时钟等。
- 资源准备:如JDK和Mysql的安装配置,以及下载好CM所需要的资源包。
- 安装 Cloudera 管理器。
- 安装 CDH 集群。
- 安装所需要的Hadoop服务
- 集群完整性检查,包括 HDFS 、 MapReduce等是否可以正常运行
服务器配置
网络配置
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
TYPE=Ethernet
NAME=eno16777728
DEVICE=eno16777728
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.109.140
NETMASK=255.255.255.0
GATEWAY=192.168.109.2
[root@localhost ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=cm-master
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.109.141 cm-slave1
192.168.109.142 cm-slave2
192.168.109.140 cm-master
注意不要手贱把前两行删掉!很多软件是直接找localhost。
[root@localhost ~]# vim /etc/resolv.conf
search localdomain
nameserver 192.168.109.2
nameserver 8.8.8.8
网络配置已经完成,重启网络服务
[root@localhost ~]# service network restart
防火墙配置
[root@cm-master ~]# service firewalld status
Redirecting to /bin/systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-03-31 01:17:17 PDT; 37min ago
Main PID: 766 (firewalld)
CGroup: /system.slice/firewalld.service
└─766 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
通过查看防火墙状态,我们看到它是active状态的,得把它禁用了:
[root@cm-master ~]# systemctl stop firewalld.service
[root@cm-master ~]# systemctl disable firewalld.service
stop只是暂时停用,disable设置开启
Selinux配置
这东西太麻烦了,对很多权限严格控制,导致无法正常运行的情况。
[root@cm-master ~]# vim /etc/selinux/config
SELINUX=disabled
时钟同步
master机器上配置:
[root@cm-master /]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
[root@cm-master /]# vim /etc/ntp.conf
slave机器上配置:
[root@cm-slave1 ~]# ntpdate cm-master
31 Mar 20:21:45 ntpdate[3298]: the NTP socket is in use, exiting
[root@cm-slave1 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
0-59/10 * * * * /usr/sbin/ntpdate cm-master
免密登陆
[root@cm-master /]# ssh-keygen
[root@cm-master /]# ssh-copy-id 192.168.109.141
[root@cm-master /]# ssh-copy-id 192.168.109.142
资源准备
JDK的安装
- 卸载掉系统自带的jdk
[root@cm-master usr]# rpm -qa | grep jdk
java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64
[root@cm-master usr]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
[root@cm-master usr]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
[root@cm-master usr]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64
[root@cm-master usr]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64
- 安装jdk
由于cm会默认到这个/usr/java/去找jdk,所以请安装到/usr/java/
[root@cm-master usr]#mkdir /usr/java/
将下载好的java tar包通过工具传输到此目录下,解压
[root@cm-master java]#tar -zxvf jdk-7u80-linux-x64.tar.gz
- 配置java_home
[root@cm-master usr]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@cm-master usr]# source /etc/profile
- 检测是否成功
[root@cm-master usr]# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
Mysql的安装
其实CM默认使用的是PostgreSQL 但是大部分企业还是使用mysql作为存储数据库。而且大部分人都比较熟悉Mysql。所以我们也使用Mysql。
- 卸载系统自带的数据库
[root@cm-master ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.44-2.el7.centos.x86_64
[root@cm-master ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
- 解压mysql tar包
[root@cm-master local]# tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar - 安装依赖包和RPM包
[root@cm-master mysql]# yum install numactl libaio
[root@cm-master mysql]# rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm
[root@cm-master mysql]# rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm
[root@cm-master mysql]# rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm
[root@cm-master mysql]# rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm
[root@cm-master mysql]# rpm -ivh mysql-community-devel-5.7.21-1.el7.x86_64.rpm
[root@cm-master mysql]# rpm -ivh mysql-community-libs-compat-5.7.21-1.el7.x86_64.rpm
- mysql初始化
不用密码就可以登录
[root@cm-master mysql]# /usr/sbin/mysqld --initialize-insecure
启动mysql
[root@cm-master mysql]# /usr/sbin/mysqld --user=root &
[1] 37255
进入mysql
[root@cm-master mysql]# mysql -uroot
进入mysql之后依次执行如下操作(根据自己需求,比如假设你不需要oozie你就不要创建oozie数据库)
SET PASSWORD=PASSWORD('123456');
use mysql;
update user set Host='%' where User='root' and Host='localhost';
create database cmf DEFAULT CHARACTER SET utf8;
grant all on cmf.* TO 'cmf'@'%' IDENTIFIED BY '123456';
grant all on cmf.* TO 'cmf'@'localhost' IDENTIFIED BY '123456';
create database amon DEFAULT CHARACTER SET utf8;
grant all on amon.* TO 'amon'@'%' IDENTIFIED BY '123456';
grant all on amon.* TO 'amon'@'localhost' IDENTIFIED BY '123456';
create database smon DEFAULT CHARACTER SET utf8;
grant all on smon.* TO 'smon'@'%' IDENTIFIED BY '123456';
grant all on smon.* TO 'smon'@'localhost' IDENTIFIED BY '123456';
create database rman DEFAULT CHARACTER SET utf8;
grant all on rman.* TO 'rman'@'%' IDENTIFIED BY '123456';
grant all on rman.* TO 'rman'@'localhost' IDENTIFIED BY '123456';
create database hmon DEFAULT CHARACTER SET utf8;
grant all on hmon.* TO 'hmon'@'%' IDENTIFIED BY '123456';
grant all on hmon.* TO 'hmon'@'localhost' IDENTIFIED BY '123456';
create database nav DEFAULT CHARACTER SET utf8;
grant all on nav.* TO 'nav'@'%' IDENTIFIED BY '123456';
grant all on nav.* TO 'nav'@'localhost' IDENTIFIED BY '123456';
create database hive DEFAULT CHARACTER SET utf8;
grant all on hive.* TO 'hive'@'%' IDENTIFIED BY '123456';
grant all on hive.* TO 'hive'@'localhost' IDENTIFIED BY '123456';
create database rmon DEFAULT CHARACTER SET utf8;
grant all on rmon.* TO 'rmon'@'%' IDENTIFIED BY '123456';
grant all on rmon.* TO 'rmon'@'localhost' IDENTIFIED BY '123456';
create database oozie DEFAULT CHARACTER SET utf8;
grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY '123456';
grant all on oozie.* TO 'oozie'@'localhost' IDENTIFIED BY '123456';
create database hue DEFAULT CHARACTER SET utf8;
grant all on hue.* TO 'hue'@'%' IDENTIFIED BY '123456';
grant all on hue.* TO 'hue'@'localhost' IDENTIFIED BY '123456';
flush privileges;
最后别忘了赋权限,不然以后会遇到坑的chmod -R 777 /var/lib/mysql
CM的安装
安装Http服务
[root@cm-master mysql]# yum install httpd
[root@cm-master mysql]# service httpd start
验证http服务是否成功启动
下载CM并安装
cloudera manager包 cm5.8.3-centos7.tar.gz
[root@cm-master mysql]# cd /var/www/html/
创建和官网资源包一样的目录
[root@cm-master html]# mkdir -p cm5/redhat/7/x86_64/
将之前下载好的cm包解压到此目录下
[root@cm-master x86_64]# cd /var/www/html/cm5/redhat/7/x86_64/
[root@cm-master x86_64]# ls
cm5.8.3-centos7.tar.gz
[root@cm-master x86_64]# tar -zxvf cm5.8.3-centos7.tar.gz
验证是否成功
安装RPM包
[root@cm-master x86_64]# yum install cloudera-manager-daemons-5.8.3-1.cm583.p0.8.el7.x86_64.rpm
[root@cm-master x86_64]# yum install cloudera-manager-server-5.8.3-1.cm583.p0.8.el7.x86_64.rpm
配置本地Yum源
如果CentOS服务器处在内网环境中时,经常会有缺少依赖包的情况,要手动安装会很麻烦,要花费很多时间来寻找rpm包,如果搭建本地的yum源,就非常方便了,配置本地yum后,cdh集群在安装时会就从本地down包,不会从官网了。而配置中baseurl就是上一步骤我们配置好的url地址。
vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager
baseurl=http://192.168.109.140/cm5/redhat/7/x86_64/cm/5.8.3/
gpgcheck = 0
enabled=1
配置数据库
[root@cm-master local]# cd /etc/cloudera-scm-server/
[root@cm-master cloudera-scm-server]# ls
db.properties log4j.properties
[root@cm-master cloudera-scm-server]# vim db.properties
com.cloudera.cmf.db.type=mysql
# The database host
# If a non standard port is needed, use 'hostname:port'
com.cloudera.cmf.db.host=192.168.109.140:3306
# The database name
com.cloudera.cmf.db.name=cmf
# The database user
com.cloudera.cmf.db.user=cmf
# The database user's password
com.cloudera.cmf.db.password=123456
添加Mysql的驱动包到/usr/share/java目录下
[root@cm-master x86_64]# cd /usr/share/java
将下载好的驱动包放入此目录
[root@cm-master java]# ls
jline.jar js.jar mysql-connector-java-5.1.42-bin.jar rhino-examples.jar rhino.jar tagsoup.jar
[root@cm-master java]# mv mysql-connector-java-5.1.42-bin.jar mysql-connector-java.jar
注意:一定要改名为mysql-connector-java!!!
启动服务
[root@cm-master java]# service cloudera-scm-server start
实时查看日志是否有报错
[root@cm-master java]# cd /var/log/cloudera-scm-server/
[root@cm-master java]# tail -F cloudera-scm-server.log
直到出现7180说明已经成功,我们可以去Web界面访问了,如果看见报error就根据错误提示信息去检查是否哪一步没有做对,如果完全按照我的步骤(目录和文件名都要保持一致)是没有问题的,否则会出现很多坑。
CDH的安装
配置parcels
Parcels是CDH安装必备的包。
下载Parcels包:parcels-5.8.3
或者通过wget如:wget http://archive.cloudera.com/cdh5/parcels/5.8.3/manifest.json
[root@cm-master x86_64]# cd /var/www/html/
[root@cm-master html]# mkdir parcels
[root@cm-master html]# cd parcels/
[root@cm-master parcels]# ls
CDH-5.8.3-1.cdh5.8.3.p0.2-el7.parcel CDH-5.8.3-1.cdh5.8.3.p0.2-el7.parcel.sha1 manifest.json
注意将sha1去掉名称结尾"1",不然cdh在装的时候,会一直认为在下载,是未完成的mv CDH-5.8.3-1.cdh5.8.3.p0.2-el7.parcel.sha1 CDH-5.8.3-1.cdh5.8.3.p0.2-el7.parcel.sha
验证是否成功
开始安装CDH集群
[root@cm-master /]# sysctl -w vm.swappiness=0
vm.swappiness = 0
[root@cm-master /]# echo "vm.swappiness=0" >> /etc/sysctl.conf
[root@cm-master /]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@cm-master /]# echo never >> /etc/rc.local
安装Hadoop等生态圈组件
集群完整性检查
我们会发现很多报警,其实这都不算事!是因为我们自己的虚拟机,内存不足而导致的,实际生产环境中内存是很大的。我们可以更改一下报警配置,就不会出现这些问题了。
总结
本人第一次按照CM的时候遇到很多坑,而且当时都无解,百度Google也搜不到,网上很多博客,但是都没有说的很详细,也没有把需要注意的问题重点强调,所以我写了这篇博客,非常详细,把可能会遇到的坑重点强调,比如jdk1.7.0_80如果你改成jdk或者别的名字就会报错,再比如mysql的驱动包一定要是mysql-connector-java.jar这个名字,等等。
请务必按照我的步骤完全照做,版本、目录、文件名都要保持一致,这样才能杜绝遇到莫名其妙的坑。
另外,遇到问题也没有关系!查看日志!!!查看日志!!!查看日志!!!重要的事情说三遍。