概要
1.本文写了什么?
Cloudera Manager 集群部署的离线安装方式,一些其他相关知识
2.写了多久?三天,建议读30分钟以上
3.为什么写,被网上找的一堆部署过程整的头大,这里做个整理
关于CDH和Cloudera Manager
CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。
Cloudera Manager则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的组件,对集群中主机、Hadoop、Hive、Spark等服务的安装配置管理做了极大简化。
关于开源版Apache 集群部署
看这里,我以前搭建时的记录: 阿里云部署Hbase集群
这里采用chd版本搭建
搭建步骤
吐槽: 网上搜了很多,写的很杂很乱,官网写的太全面,废话太多,看的费劲
官方文档,所有的搭建都是基于这里整理的
https://www.cloudera.com/documentation/enterprise/latest/topics/installation_installation.html
注:英文不好 自备翻译插件 推荐谷歌翻译
官网推荐方式
官方共给出了3中安装方式:
第一种方法必须要求所有机器都能连网,由于最近各种国外的网站被墙的厉害,我尝试了几次各种超时错误,巨耽误时间不说,一旦失败,重装非常痛苦。
第二种方法下载很多包。
第三种方法对系统侵入性最小,最大优点可实现全离线安装,而且重装什么的都非常方便。后期的集群统一包升级也非常好。这也是我之所以选择离线安装的原因。
生成环境,你就直接离线部署就行了,方便快捷,后期维护和扩展奠定基础
基本环境信息
三台ecs主机,我这里用的联通-阿里云,随便你
操作系统centos7
2H8G2M(2核8G内存2M带宽)
192.168.2.6 master 2核8G内存2M带宽 cm和agen
192.168.2.5 slave1 2核8G内存2M带宽 agen
192.168.2.4 slave2 2核8G内存2M带宽 agen
安装步骤
基本就是准备环境,安装cm(cdh管理软件),安装cdh,建议分布走,做完一步检测一步
- 环境准备
- 网络配置
- 配置ssh免密登陆
- 关闭防火墙
- 安装jdk7以上
- 安装mysql并配置优化(一般装主节点就行了)
- 配置时间同步 ntp服务
- 安装cloudera-manager
- 安装cdh5
- 图形界面配置,测试集群
安装软件准备
国内网速受限,建议下载安装包,手动处理所有安装,我一开始偷懒用yum install装的,后来又都卸载了,非常痛苦
- Cloudera Manager 下载目录 http://archive.cloudera.com/cm5/cm/5/
- CDH 下载目录 http://archive.cloudera.com/cdh5/parcels/5.12.1/
- manifest.json 下载 http://archive.cloudera.com/cdh5/parcels/5.12.1/manifest.json
我这里是centos7 安装cdh5.14版(最新版),你根据你的需要选择下载
下载完后,上传到服务器(为什么上传,因为联通服务器连外网下载太慢了,fuck!)
复制前辈的忠告:
CHD5 相关的 Parcel 包放到主节点的
/opt/cloudera/parcel-repo/
目录中
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1
重命名为CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha
本文所有软件包,百度网盘链接:http://pan.baidu.com/s/1eSALjAq 密码:vqhg
这点必须注意,否则,系统会重新下载CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel
文件
开始配置环境
注意,这里的配置都是基于centos7,内核3.10 ,64位操作系统,其他系统请适当修改,或参考官网文档
Linux master 3.10.0-862.3.2.el7.x86_64 #1 SMP Mon May 21 23:36:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
修改hostname
vim /etc/hostname
然后重启 reboot
记得修改每一台
修改hosts映射
vim /etc/hosts
修改完类似如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# ip地址 域名/主机名
192.168.2.6 master
192.168.2.5 slave1
192.168.2.4 slave2
SSH 免密码登录
方便后期之间文件复制。
# # slave1
# ssh-keygen -t rsa
-- 不用输入密码,一路回车就行
# cp ~/.ssh/id_rsa.pub ~/.ssh/slave1_id_rsa.pub
# scp ~/.ssh/slave1_id_rsa.pub master:~/.ssh/
# # slave2
# ssh-keygen -t rsa
# cp ~/.ssh/id_rsa.pub ~/.ssh/slave2_id_rsa.pub
# scp ~/.ssh/slave2_id_rsa.pub master:~/.ssh/
# # master
ssh-keygen -t rsa
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# cat ~/.ssh/slave1_id_rsa.pub >> ~/.ssh/authorized_keys
# cat ~/.ssh/slave2_id_rsa.pub >> ~/.ssh/authorized_kyes
-- 拷贝文件至slave1及slave2
# scp ~/.ssh/authorized_keys slave1:~/.ssh
# scp ~/.ssh/authorized_keys slave2:~/.ssh
验证 ssh 无密登录
开一个其他窗口测试下能否免密登陆
例如:在node3
ssh root@node2
exit 退出
关闭防火墙和SELinux
注意: 需要在所有的节点上执行,因为涉及到的端口太多了,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。
-- 关闭防火墙及SELINUX(master、slave1、slave2均需修改)
-- 关闭防火墙
# systemctl stop firewalld.service
# systemctl disable firewalld.service
-- 关闭SELINUX
# vim /etc/selinux/config
-- 注释掉
#SELINUX=enforcing
#SELINUXTYPE=targeted
-- 添加
SELINUX=disabled
-- 重启生效
reboot
切换yum源,换为阿里源,速度快
第一步:备份你的原镜像文件,以免出错后可以恢复。
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二步:下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
第三步:运行yum makecache生成缓存
yum clean all
yum makecache
设置时间同步 ,安装NTP服务
所有节点安装 NTP
yum install ntp
设置同步
ntpdate -d 182.92.12.11
这里增加一些内容,请参考
.所有节点配置NTP服务
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。 具体思路如下:
master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。
所有datanode节点以master节点为基础同步时间。
所有节点安装相关组件:
yum install ntp
。完成后,配置开机启动:
chkconfig ntpd on
,检查是否设置成功:
chkconfig --list ntpd
其中2-5为on状态就代表成功。
主节点配置
在配置之前,先使用ntpdate手动同步一下时间,免得本机与对时中心时间差距太大,使得ntpd不能正常同步。这里选用65.55.56.206作为对时中心,
ntpdate -u 65.55.56.206
ntp服务只有一个配置文件,配置好了就OK。 这里只给出有用的配置,不需要的配置都用#注掉,这里就不在给出:
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict default nomodify notrap
server 65.55.56.206 prefer
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
配置文件完成,保存退出,启动服务,执行如下命令:
service ntpd start
检查是否成功,用ntpstat命令查看同步状态,出现以下状态代表启动成功:
synchronised to NTP server () at stratum 2
time correct to within 74 ms
polling server every 128 s
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
配置ntp客户端(所有datanode节点)
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
#这里是主节点的主机名或者ip
server n1
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
ok保存退出,请求服务器前,请先使用ntpdate手动同步一下时间:ntpdate -u n1 (主节点ntp服务器)
这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。启动服务:
service ntpd start
安装jdk7以上版本
这里安装在jdk8
更新系统软件
yum update
查找系统已安装的jdk组件
rpm -qa | grep -E '^open[jre|jdk]|j[re|dk]'
查看java版本
java -version
卸载以前已有的jdk
yum remove java-1.6.0-openjdk
yum remove java-1.7.0-openjdk
在/usr目录中先建名为java的文件夹
mkdir /usr/java
下载jdk-8u111-linux-x64.tar.gz包,并上传至服务器/usr/local文件夹中。
解压jdk-8u111-linux-x64.tar.gz包至/usr/local/jdk1.8.0_111文件夹
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
tar -xvf jdk-8u111-linux-x64.tar.gz
添加到环境变量
编辑/etc/profile文件,在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL下面添加如下代码:
#jdk
export JAVA_HOME=/usr/local/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
执行命令使配置生效
source /etc/profile
验证,是否安装成功
java -version
安装配置mysql,并简单优化
总所周知,MySQL 被 Oracle 收购后,CentOS 的镜像仓库中提供的默认的数据库也变为了 MariaDB,如果想了解 MariaDB 和 CentOS 的区别,可以参考官网介绍,想用 MariaDB 的同学可以参考 MariaDB 安装指南
cdh可以使用的数据库有很多,支持mysql也支持mariadb或者oracle等,其他安装请参考官网 安装和配置外部数据库 , 这里选择mysql
参考这里 https://blog.csdn.net/SmallTankPy/article/details/75451645
首先检查 MySQL 是否已安装
yum list installed | grep mysql
如果有的话 就全部卸载
yum -y remove +数据库名称
添加 MySQL YUM 源
根据自己的操作系统选择合适的安装源,和其他公司一样,总会让大家注册账号获取更新,注意是 Oracle 的账号,如果不想注册,下方有直接下载的地址,下载之后通过 rpm -Uvh
安装。
$wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'
$sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
$yum repolist all | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 36
mysql-tools-community/x86_64 MySQL Tools Community 47
mysql57-community/x86_64 MySQL 5.7 Community Server 187
选择安装版本
如果想安装最新版本的,直接使用 yum 命令即可
$sudo yum install mysql-community-server
如果想要安装 5.6 版本的,有2个方法。命令行支持 yum-config-manager 命令的话,可以使用如下命令:
$ sudo dnf config-manager --disable mysql57-community
$ sudo dnf config-manager --enable mysql56-community
$ yum repolist | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 36
mysql-tools-community/x86_64 MySQL Tools Community 47
mysql56-community/x86_64 MySQL 5.6 Community Server 327
或者直接修改 /etc/yum.repos.d/mysql-community.repo 这个文件
Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1 #表示当前版本是安装
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=0 #默认这个是 1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
通过设置 enabled 来决定安装哪个版本。
设置好之后使用 yum 安装即可。
启动 MySQL 服务
启动命令很简单
$sudo service mysqld start
$sudo systemctl start mysqld #CentOS 7
$sudo systemctl status mysqld
● mysqld.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-05-27 12:56:26 CST; 15s ago
Process: 2482 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)
Process: 2421 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 2481 (mysqld_safe)
CGroup: /system.slice/mysqld.service
├─2481 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─2647 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/...
说明已经正在运行中了。
修改 /etc/my.cnf
vi /etc/my.cnf
优化修改配置,使其更好的适应cm集群。配置好的my.cnf应类似如下:
[mysqld]
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links = 0
port=8067
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
#expire_logs_days = 10
#max_binlog_size = 100M
#log_bin should be on a disk with enough free space. Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your system
#and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
#5.7以上版本开binlog要增加这个属性
server-id=123454
# For MySQL version 5.1.8 or later. For older versions, reference MySQL documentation for configuration help.
binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
#配置密码校验规则简单
validate_password_length=1
validate_password_mixed_case_count=0
validate_password_number_count=0
validate_password_policy=LOW
validate_password_special_char_count=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_ALL_TABLES
创建mysql数据库
官方推荐创建如下数据库,后边cm安装时会用到,如果你现在不明白可以不创建,等到安装的时候,他会有提示,你记得回来创建即可。sql创建语句如下:
CREATE DATABASE hive CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
CREATE DATABASE hue CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
CREATE DATABASE oozie CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
这里数据库名称其实可以自定义,我创建三个分别对应hadoop的hive,hue和oozie
下载jdbc-mysql jar包
下载 mysql 驱动包
cd /opt/cloudera-manager/cm-5.12.1/share/cmf/lib
wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
启动MySQL服务
service mysql.server start
cd /opt/cloudera-manager/cm-5.12.1/share/cmf/schema/
./scm_prepare_database.sh mysql cm -h node1 -uroot -pmima --scm-host node1 scm scm scm
看到如下信息,恭喜您,配置没毛病
[main] DbCommandExecutor INFO Successfully connected to database.
All done, your SCM database is configured correctly!
格式:
scm_prepare_database.sh mysql cm -h <hostName> -u<username> -p<password> --scm-host <hostName> scm scm scm
对应于:数据库类型 数据库 服务器 用户名 密码 –scm-host Cloudera_Manager_Server 所在节点 数据库 用户名 密码
安装cloudera manager和chd5.x
如果你的网络良好(可以连接国外服务器)推荐在线安装,两条命令即可。如果你网络不好,建议还是手动安装,也方便后期维护。
介绍在线安装,网络不好看下边手动安装
Cloudera Manager 安装
# 在master节点安装Cloudera Manager Server并启动。
yum install cloudera-manager-daemons cloudera-manager-server
systemctl start cloudera-scm-server
#在master和node节点安装Cloudera Manager Agent。修改 /etc/cloudera-scm-agent/config.ini 中的server_host为master的IP。
yum install cloudera-manager-agent cloudera-manager-daemons
systemctl start cloudera-scm-agent
# 进入 Cloudera Manager的console,[http://Server](http://server/) host:7180,登录后便可以进入CDH的安装部署了。
手动安装,我选的这种
把下载好的cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz安装包上传至 master节点/opt/目录
在 node1 节点拷贝 cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz 到所有 Server、Agent 节点创建 /opt 目录:
for a in {2..7}; do scp /opt/cloudera-manager-*.tar.gz root@node$a:/opt/ ; done
所有 Server、Agent 节点节点解压安装 Cloudera Manager Server & Agent
cd /opt
tar xvzf cloudera-manager*.tar.gz -C /opt
启动 CM Manager&Agent 服务
注意,mysql 服务启动,防火墙关闭
在 node1 (master) 执行:
/opt/cm-5.12.1/etc/init.d/cloudera-scm-server start
在 node2-3 (Agents) 执行:
/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start
启动 start,停止stop,重启 restart
访问 http://Master:7180 若可以访问(用户名、密码:admin),则安装成功。
Manager 启动成功需要等待一段时间,过程中会在数据库中创建对应的表需要耗费一些时间。
图形安装
图形界面省略。
你可能会遇到问题
问题一
接下来是服务器检查,可能会遇到以下问题:
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 30。
使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。
您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响:node[2-7]
echo 0 > /proc/sys/vm/swappiness
问题二
已启用透明大页面压缩,可能会导致重大性能问题。请运行
echo never > /sys/kernel/mm/transparent_hugepage/defrag和 echo never > /sys/kernel/mm/transparent_hugepage/enabled
以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。以下主机将受到影响: node[2-7]
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
后记:
常见问题
安装CDH时候出现主机运行状态不良情况的解决https://blog.csdn.net/holdbelief/article/details/80287471
一些常见问题 https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_troubleshooting.html
出现问题,实在不好解决的请查看日志,一般来说都能找到原因
如果你实在解决不了,请留言