从零搭建生产Hadoop集群(三)——CDH集群搭建
一、概述
继本系列前两篇文章讲到的离线安装YUM源搭建及规划与环境准备,本文开始讲述CDH集群的搭建步骤及注意要点。本文基于CentOS7进行部署,Cloudera Manager版本选择5.8.1,CDH版本5.8.0。
二、硬件检查与系统配置
1.硬件检查
1)检查内存
free -g
2)检查所有磁盘挂载。将noatime参数写入/etc/fstab,并remount所有数据盘。
vim /etc/fstab
for i in 1 2 3 4 5;do mount -o remount /opt$i
mount
3)检查磁盘读写
可以用dd或者hdparm命令进行测试,具体步骤可以参考网上的一些做法。
4)检测网卡设置
ethtool [interface]
5)检测路由
route -n
若路由缺失,使用以下命令添加路由并添加到/etc/rc.local以使重启生效
route add -net [网段] netmask [掩码] gw [网关] dev [网口]
6)检查系统版本
检查系统版本是否为CDH推荐的版本,版本不兼容可能会产生稳定性问题
cat /etc/issue
uname -a
2.系统配置
1)配置hostname与/etc/hosts(所有节点)
若在没有dns服务的内部网络,配置hosts就很有必要了,集群间所有节点均需配置以相互通信。
设置hostname
命令行执行:
hostname [name]
设置HOSTNAME以使重启生效
vim /etc/sysconfig/network
设置/etc/hosts
将集群所有节点的信息添加到该文件中
vim /etc/hosts
2)所有节点安装SSH(所有节点)
可以选择CM server到agent通过用户名密码登录或者是公钥的方式。若使用用户名的方式,需保证所有服务器root用户名和密码一致。
3)安装Oracle JDK(所有节点)
CentOS自带Openjdk,不过运行CDH5需要使用Oracle的jdk。至于安装,可通过web安装界面指定使用CM Server来进行安装(安装yum repo中的配置的Java版本)。
4)关闭防火墙和SELinux(所有节点)
清除iptables
iptables -L
iptables -F
关闭SELinux
/etc/selinux/config 的SELINUX=disabled
5)设置swappiness(所有节点)
命令行执行:
sysctl -w vm.swappiness=0
/etc/sysctl.conf添加以下内容:
vm.swappiness = 0
6)设置ulimit(所有节点)
命令行执行:
ulimit -n 65535
/etc/security/limits.conf添加以下内容:
soft nofile 65535
hard nofile 65535
7)设置ntp服务(所有节点)
使用ntpdate命令与ntp服务器对时
date
ntpdate [ntpserver]
/etc/ntp.conf添加以下内容:
server [ntpserver]
启动ntpd
systemctl restart ntpd
查看是否同步成功
ntpstat
8)设置DNS(所有节点)
若集群域名解析仅依赖/etc/hosts文件,建议注释掉/etc/resolv.conf,以避免不良影响。
9)关闭THP
CDH 5 所支持的大多数 Linux 平台包含名为透明大页面压缩的功能,该功能与 Hadoop 工作负载交互较差,可能会严重影响性能,因此建议关闭。命令行执行以下命令,并写到/etc/rc.local文件中。
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
三、数据库安装与配置
CM支持多种类型数据库作为配置及监控数据的存储方式,这里以mysql为例。CM数据库、Hue/Oozie配置数据库、Hive Metastore元数据库等最好能够根据实际应用及负载分开部署,并且部署高可用方案(主从或主主互备,后续会有专题讲解)。
1.安装MySql
表配置为Innodb引擎,否则CM启动可能会遇到问题。
yum install mysql-server
service mysqld start
2.配置CM Server数据库
用于存放CM的配置与监控数据。
mysqladmin -u root password 'xxxx'
mysql -uroot -p 进入mysql命令行,创建以下数据库:
create database amon DEFAULT CHARACTER SET utf8;
grant all on amon.* TO 'amon'@'%' IDENTIFIED BY 'xxxx';
create database smon DEFAULT CHARACTER SET utf8;
grant all on smon.* TO 'smon'@'%' IDENTIFIED BY 'xxxx';
create database rman DEFAULT CHARACTER SET utf8;
grant all on rman.* TO 'rman'@'%' IDENTIFIED BY 'xxxx';
create database hmon DEFAULT CHARACTER SET utf8;
grant all on hmon.* TO 'hmon'@'%' IDENTIFIED BY 'xxxx';
create database nav DEFAULT CHARACTER SET utf8;
grant all on nav.* TO 'nav'@'%' IDENTIFIED BY 'xxxx';
flush privileges;
3.配置Hive Metastore数据库
用于存放Hive的元数据信息。
create database metastore DEFAULT CHARACTER SET utf8;
grant all on metastore.* TO 'hive'@'%' IDENTIFIED BY 'xxxx';
flush privileges;
注意,安装Hive的时候可能会报错,由于使用了MySql作为Hive的元数据存储,因此需要安装MySql的驱动:
yum install mysql-connector-java
4.配置Hue/Oozie数据库
用于存放Hue/Oozie配置信息。
create database hue DEFAULT CHARACTER SET utf8;
grant all on hue.* TO 'hue'@'%' IDENTIFIED BY 'xxxx';
create database oozie DEFAULT CHARACTER SET utf8;
grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'xxxx';
flush privileges;
四、CM Server/Agent及CDH相关套件安装
1.下载并执行cloudera-manager-installer
1)下载安装脚本
根据所需版本进行下载,本文使用https://www.cloudera.com/downloads/manager/5-8-1.html
2)执行安装脚本
该执行程序会指引安装CM Server,前提是YUM源提前要配置好。在需要安装CM Server的linux服务器上,使用root用户执行以下命令。
chmod u+x cloudera-manager-installer.bin
./cloudera-manager-installer.bin --skip_repo_package=1
根据提示,点击下一步,最后完成安装后会提示CM的web登陆url及初始用户名密码,默认是adimin、admin。安装过程中可能会遇到一些异常,根据提示的日志文件信息解决即可。
3)使用浏览器登陆CM Web页面进行集群安装
登陆CM界面后,根据安装向导执行初始化安装和配置。
(1)选择要安装的 Cloudera Manager 版本
选择免费版、试用版or商业版。
(2)通过主机名和 IP 地址范围查找您指定的群集主机
指定需要通过CM管理的服务器范围。
(3)使用 SSH 连接至每台主机以安装 Cloudera Manager Agent 和其他组件
可以提前将CM Server的公钥放置与其他服务器上,或者输入统一的用户名密码进程操作。
(4)在群集主机上安装 Oracle JDK
(5)安装 CDH 和托管服务软件包或 parcel
“选择方法”选项,选择“使用Parcel(建议)”,并点击右边按钮的“更多选项”,设置“远程Parcel存储库URL"为“http://[my-yum-server]/cloudera-parcel/”,若没有指定本地YUM源,会从网络进行下载,速度就会慢很多;
“选择CDH的版本”,如果之前已经配好了YUM源,这里会显示出相应的CDH parcel安装包,选择即可。
点击下一步就会进行parcel包的分发与安装。这一步主要会进行CM Agent的安装以及将parcel包分发到各个服务器。
(6)自动配置 CDH 和托管服务并启动服务
这一步,主要根据自己的实际需求启动相关服务,如HDFS/YARN/HBASE/HIVE/ZOOKEEPER等,可以选择核心套件,或者自定义,不过,一般以上提到的服务都是生产中常用到的,可根据实际调整。
- “集群设置”的“自定义角色配置”页面,选择需要在服务器上分配对应的角色实例。生产环境中,最好能够做到数据节点(datanode/nodemanager等)与管理节点(namenode/resourcemanager/hivemetastore/zookeeper等)的分离,由于数据节点经常会运行繁重的任务,可能会影响管理节点的稳定高效运行。
- “集群设置”的“数据库设置”页面,将之前在MySql建的对应库名、用户名、密码填入之后,点击连接测试,没有问题则可进入下一步。
- 一路点击下一步即会对集群进行初始化,如无意外,可顺利启动集群。
- 测试集群运行任务是否正常:hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
(7)集群启动后的优化
- HDFS 启用NameNode HA。点击“HDFS”服务->“操作”->“启用High Availability”,选择两个NN需要分布在哪两个服务器即可。
- YARN 启用HA。点击“YARN”服务->“操作”->“启用High Availability”,选择两个RM需要分布在哪两个服务器即可。
- HBase 启用HA。主要是HMaster在多个服务器上启动实例即可。
- Hive启用HA。Metastore及Hiveserver均需启用多个实例以提高可用性。
- 根据实际情况需要,启用kerberos认证,提高安全性,后续进行专题讨论。
- 各个服务根据实际使用情况的配置优化,后续进行专题讨论。
至此,一个可用的Hadoop机器已经搭建起来了。可通过CM页面查看集群的运行情况,并可通过界面直接操作集群服务。
欢迎关注我的微信公众号