搭建企业级大数据平台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生态圈中的组件:直接一键安装,再也不用担心版本匹配问题了! 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 statusRedirecting 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.servicestop只是暂时停用,disable设置开启 Selinux配置 这东西太麻烦了,对很多权限严格控制,导致无法正常运行的情况。[root@cm-master ~]# vim /etc/selinux/config SELINUX=disabled 时钟同步 master机器上配置:[root@cm-master /]# service ntpd startRedirecting to /bin/systemctl start ntpd.service[root@cm-master /]# vim /etc/ntp.conf slave机器上配置:[root@cm-slave1 ~]# ntpdate cm-master31 Mar 20:21:45 ntpdate[3298]: the NTP socket is in use, exiting[root@cm-slave1 ~]# crontab -eno crontab for root - using an empty onecrontab: 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_64java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64java-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 mariadbmariadb-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]# lscm5.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]# lsdb.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]# lsjline.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]# lsCDH-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=0vm.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这个名字,等等。请务必按照我的步骤完全照做,版本、目录、文件名都要保持一致,这样才能杜绝遇到莫名其妙的坑。另外,遇到问题也没有关系!查看日志!!!查看日志!!!查看日志!!!重要的事情说三遍。