搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

【本文转载自:www.bigdata-star.com】

前言

在搭建CM之前。。本人也是纯人工的把hadoop生态圈常用组件自己集成了一遍。。途中遇到各种坑,比如版本不匹配导致的一系列问题。。但自己尝试一下是好的!因为手把手的纯命令行的搭建可以让你更了解它们!但是到了企业中是不可能这样滴,因为有诸多的劣势,试问如果一个集群有1000个节点,你怎么去人工搭?如果要全部升级,你又怎么人工处理?还有前面说的,版本不匹配问题各种坑。所以还是要用图形化的,管理性强的工具,比如CM。

Cloudera Manager功能

CM功能强大,主要表现在几个方面:

  • 集群管理:比如添加节点,删除节点
  • 配置管理:之前我们手工配置的那些配置文件比如core-site.xml,hdfs-site.xml,zoo.cfg等等,我们都可以通过图形化界面来配置。
  • 日志管理:之前我们发现bug了,跑不起来了,得手工去看日志,比如,现在通通可以在CM上查看了!
  • 监控:实时监控集群的各种运行状态,cpu,磁盘等的使用率
  • 诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。
  • 整合Hadoop生态圈中的组件:直接一键安装,再也不用担心版本匹配问题了!

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

CM架构

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
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

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
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服务是否成功启动
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

下载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/
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
将之前下载好的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

验证是否成功
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
安装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

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

配置数据库

[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

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
直到出现7180说明已经成功,我们可以去Web界面访问了,如果看见报error就根据错误提示信息去检查是否哪一步没有做对,如果完全按照我的步骤(目录和文件名都要保持一致)是没有问题的,否则会出现很多坑。
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

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
验证是否成功
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

开始安装CDH集群

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

[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等生态圈组件

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

集群完整性检查

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

我们会发现很多报警,其实这都不算事!是因为我们自己的虚拟机,内存不足而导致的,实际生产环境中内存是很大的。我们可以更改一下报警配置,就不会出现这些问题了。
搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

搭建企业级大数据平台Cloudera Manager + CDH 5.8 + CentOS7

总结

本人第一次按照CM的时候遇到很多坑,而且当时都无解,百度Google也搜不到,网上很多博客,但是都没有说的很详细,也没有把需要注意的问题重点强调,所以我写了这篇博客,非常详细,把可能会遇到的坑重点强调,比如jdk1.7.0_80如果你改成jdk或者别的名字就会报错,再比如mysql的驱动包一定要是mysql-connector-java.jar这个名字,等等。
请务必按照我的步骤完全照做,版本、目录、文件名都要保持一致,这样才能杜绝遇到莫名其妙的坑。
另外,遇到问题也没有关系!查看日志!!!查看日志!!!查看日志!!!重要的事情说三遍。

上一篇:SpringMVC中利用@InitBinder来对页面数据进行解析绑定


下一篇:缓存系列文章--2.是否真的需要缓存?