Cloude Manager概述
CDH是Cloudera公司对整体hadoop集群环境进行监控与管理的企业级大数据管理平台。
Cloudera Manager分为:
- Cloudera Manager Server:对整个集群提供监控与管理操作。Cloudera Manager Server通过部署在不同设备上的Cloudera Manager Agent进行管理整体集群。Cloudera Manager Server需要部署在一台设备上。
- Cloudera Manager Agent:部署在每个需要监控与管理的设备上。负责采集运行数据与执行下发的管理命令
- DataBase:关系型数据库是Cloudera Manager执行管理操作时,存储整体集群情况数据。
安装要求
- 本示例使用的操作系统是Centos7 x64。你需要根据你的操作系统的不同进行选择对应版本的安装包。
- 使用ROOT用户进行安装;如果使用其他非ROOT用户安装,请保证该用户具有sudo权限,而且也要保证所有的相关文件的所有者是该用户。
- 保证所有的主机之间网络全通。也就是说防火墙策略和SELinux策略要全通。
- 本案例中所有的执行命令都以绿色五号新罗马标出
- 还要保证JDK的版本在1.8以上。
- 保证每台设备的内存至少要在8G以上。
- 保证每台设备的/var目录和/usr目录的剩余空间在30G以上。数据存储盘根据需求进行挂载。
- 本示例是使用Centos7 x64版本的最小安装下测试通过的。
安装示例介绍
服务器基本参数
IP |
主机名称 |
CPU |
内存 |
磁盘 |
角色 |
操作系统 |
|
hdfs01 |
8C |
128G |
3T |
server |
Centos7 x64 |
|
hdfs02 |
8C |
128G |
3T |
agent |
Centos7 x64 |
|
hdfs03 |
8C |
128G |
3T |
agent |
Centos7 x64 |
|
hdfs04 |
8C |
128G |
3T |
agent |
Centos7 x64 |
|
hdfs05 |
8C |
128G |
3T |
agent |
Centos7 x64 |
|
hdfs06 |
8C |
128G |
3T |
agent |
Centos7 x64 |
|
hdfs07 |
8C |
128G |
3T |
agent |
Centos7 x64 |
|
hdfs08 |
8C |
128G |
3T |
agent |
Centos7 x64 |
对于CDH的安装我们最好使用ROOT用户进行安装,避免一些目录以及文件夹的权限问题出现各种各样的麻烦,当然,如果想要使用其他非ROOT用户安装也可以,但是该用户一定要有sudo的NOPASSWD权限。还有就是所有相关的文件以及文件夹的所有者都要设置为该用户,单独修改的除外。
CDH软件包官方最新稳定版下载地址:
http://archive.cloudera.com/cdh5/parcels/latest/
在该地址需要下载以下三个文件:
CDH-5.14.0-1.cdh5.14.0.p0.24-el7.parcel
CDH-5.14.0-1.cdh5.14.0.p0.24-el7.parcel.sha1
manifest.json
Cloudera Manager 官方下载地址:
http://archive.cloudera.com/cm5/cm/5/
在该地址只下载一个文件(该文件需要根据自己的系统进行选择):
cloudera-manager-centos7-cm5.14.1_x86_64.tar.gz
官方安装参考文档:https://www.cloudera.com/documentation/enterprise/5-14-x/topics/installation_installation.html
操作系统的相关配置
关闭防火墙
因为我们要搭建集群,集群之间就会有通信,服务器之间要是有通信,就要有相应的防火墙策略开放,因此我们要将防火墙关闭。以下给关闭防火墙操作命令(在root用户下进行操作):
# 检查防火墙状态
Centos6: [root@localhost ~]# service iptables status
Centos7: [root@localhost ~]# systemctl status firewalld.service
如果显示状态不是iptables: Firewall is not running.则需要关闭防火墙
# 关闭防火墙
Centos6:[root@localhost ~]# service iptables stop
Centos7:[root@localhost ~]# systemctl stop firewalld
# 永久关闭防火墙
Centos6:chkconfig iptables off
Centos7:systemctl disable firewalld.service
# 检查防火墙状态
Centos6: [root@localhost ~]# service iptables status
Centos7:[root@localhost ~]# systemctl status firewalld.service
iptables: Firewall is not running.
关闭SElinux
因为centos的所有访问权限都是有SELinux来管理的,为了避免我们安装中由于权限关系而导致的失败,我们将其关闭,以后跟根据需要进行重新管理。以下给出关闭SELinux的操作命令(在ROOT用户下进行操作):
# 查看SElinux的状态
[root@localhost ~]# /usr/sbin/sestatus –v
SELinux status: enabled
如果SELinux status参数为enabled即为开启状态,需要进行下面的关闭操作。
# 关闭SElinux
[root@localhost ~]# vim /etc/selinux/config
在文档中找到SELINUX,将SELINUX的值设置为disabled,即:
SELINUX=disabled
# 在内存中关闭SElinux
[root@localhost ~]# setenforce 0
# 检查内存中状态
[root@localhost ~]# getenforce
如果日志显示结果为disabled或者permissive,说明操作已经成功。
配置yum源
此步骤主要是将操作系统安装包(ISO)设置为YUM源,用来安装更多组件。在所有主机上执行(将Centos的ISO安装文件上传到/opt文件夹下)
1. 挂载操作系统ISO文件到指定目录
[root@localhost ~]# mkdir /mnt/iso
[root@localhost ~]# mount -o loop /opt/CentOS-7-x86_64-DVD-1511.iso /mnt/iso
其中CentOS-7-x86_64-DVD-1511.iso为CentOS7.2的ISO文件
2. 设置yum源repo文件
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost ~]# mkdir /opt/repo_bak;mv *.repo /opt/repo_bak
[root@localhost ~]# vi base.repo
新建的base.repo文件中添加如下代码:
[base]
name=CentOS 7
baseurl=file:///mnt/iso
gpgcheck=0
3. 刷新yum
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
安装相关依赖组件
[root@localhost ~]# yum -y install chkconfig bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse portmap fuse-libs redhat-lsb httpd httpd-tools unzip ntp
启动httpd服务
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# systemctl enable httpd.service #设置为开机启动
配置NTP时钟同步
在所有要安装CDH环境的设备中设置统一时钟同步服务。如果我们有时钟服务器,那么我们需要在每一台设备上进行NTP客户端配置;如果没有,我们就将server主机作为时钟服务器,对server主机进行NTP服务器配置。其他服务器来同步这台服务器的时钟。
本示例中将按照没有时钟服务器的情况进行演示,将server主机配置为NTP服务器,其他主机配置为NTP客户端。如果有时钟服务器更简单,所有的服务器都配置为NTP客户端就好了。
NTP服务器配置(在server主机上配置,如果有时钟服务器,server主机也是配置为客户端)
修改/etc/ntp.conf
对该文件的内容进行以下的修改:
1、注释掉所有的restrict开头的配置
2、找到restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap,取消注释,并将其中IP和掩码修改为真实环境IP和掩码,此行配置为允许ntp客户端连接的配置
3、找到server 0.centos.pool.ntp.org iburst,并将所有server配置进行注释
4、添加下面两行内容
server 127.127.1.0
fudge 127.127.1.0 stratum 10
启动NTP服务
执行以下命令启动ntp服务
[root@localhost ~]# systemctl restart ntpd
查看服务状态
启动服务后,使用ntpq -p查看服务状态,当reach达到比较大的值后(一般为17),再进行NTP客户端配置。
NTP客户端配置(在agent主机上进行配置)
修改/etc/ntp.conf
对该文件进行以下内容的修改:
1、注释所有restrict和server配置
2、添加下面注释,需要修改以下的IP为NTP服务器的IP(在本案例中就是server主机的IP)
server 192.168.187.5
手动同步时间
为了避免首次同步时间比较慢,和测试一下我们是否配置正确,我们先使用下面命令手工同步一次。
[root@localhost ~]# ntpdate 192.168.187.51
启动NTP服务
[root@localhost ~]# systemctl restart ntpd
将所有的主机的ntp服务设置为开机自启动
centos6:[root@localhost ~]# chkconfig ntpd on
centos7:[root@localhost ~]# systenctl enable ntpd.service
修改主机名称
修改主机名的原因是为了方便我们记忆与管理,但这并不是主要原因,更主要的是防止hadoop的内部实现机制要通过主机名来路由到该主机的IP上,我们需要保证每一台机器的主机名不相同。
本示例中仅以第一台服务器的操作为示例,其他的服务器都是相同的操作,但需要注意的是一定要保证每一台主机的hostname不相同。(建议使用hdfs1,hdfs2,hdfs3.. . 这样的格式一次为每一台服务器命名)。
以下给出修改主机名的操作命令(在ROOT下进行操作):
Centos6:
[root@localhost ~]# vi /etc/hostname
将内容修改为新的hostname
Centos7:
[root@localhost ~]# hostnamectl set-hostname hdfs1;
[root@localhost ~]# hostname hdfs1
执行完以上的命令退出,重新登录即可。
主机名中不能使用下划线(_)。
主机名不能保护大写字符
设置主机路由(HOSTS)
修改HOSTS的原因主要有两点:
1、为了防止hadoop内部实现机制通过主机名来进行对主机的访问。
2、为了我们在配置过程中书写起来比较方便,看起来也一目了然。
这里要说明的是,我们配置HOSTS并不是只配置本机IP和主机的对应关系,而是我们规划中的每一台机器都要配置所有机器的IP和主机名称的对应关系。
修改HOSTS方法:
以下是修改HOSTS的操作命令(在ROOT用户下进行操作):
修改/etc/hosts文件,在文件中添加规划中的所有主机的IP和主机名的对应关系。而且每一台机器都配置。
[root@hdfs1 ~]# vi /etc/hosts
在该文件中添加以下格式的内容,该内容是我们规划中的所有主机的IP和主机名称,而且每一台机器的HOSTS中都要添加相同的内容,IP与主机名用一个TAB键隔开。
192.168.186.101 hdfs1
192.168.186.102 hdfs2
192.168.186.103 hdfs3
……
如果想要多个名称路由到同一个IP,我们只需要在后边继续添加即可,同样是使用TAB键隔开。例如:
192.168.186.101 hdfs1 master spark hadoop
关系型数据库的安装
MySQL的安装
使用到的安装包
MySQL-client-5.6.26-1.el6.x86_64.rpm
MySQL-devel-5.6.26-1.el6.x86_64.rpm
MySQL-server-5.6.26-1.el6.x86_64.rpm
卸载Centos自带的MySQL 和 mariadb
执行以下的两个命令查看系统预安装的MySQL或mariadb
[root@hdfs1 ~]# rpm -qa | grep MySQL
[root@hdfs1 ~]# rpm -qa | grep mariadb
将以上命令查询到的所有已安装的组件通过以下命令将其删除
[root@hdfs1 ~]# rpm -e --nodeps (以上命令查出来的所有包,以空格分开)
使用以下的命令查询所有与MySQL相关的文件
[root@hdfs1 ~]# find / -name mysql
删除以上命令查到的所有文件
安装MySQL
进入到我们MySQL的安装包的目录下,执行以下的命令(我将所有的MySQL安装包放到了root用户的主目录下了)
[root@hdfs1 ~]# rpm -ivh MySQL*
启动MySQL
centos6:[root@hdfs1 ~]# service mysql start
centos7:[root@hdfs1 ~]# systemctl start mysql.service
初始化密码
在安装MySQL的过程中,我们会看到以下内容被打印出来:
A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !You will find that password in ‘/root/.mysql_secret’.
我们需要在这个文件下找到随机生成的root密码,使用以下命令:
[root@hdfs1 ~]# cat /root/.mysql_secret
登录到MySQL的命令控制台
[root@hdfs1 ~]# mysql –uroot –p密码 # 密码为我们在上一步中查看到的随机密码
修改MySQL的root用户的密码
在MySQL的命令控制台中执行以下的SQL,将root用户的密码重置为123456
SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘123456’)
修改MySQL的ROOT用户的权限
grant all on *.* to root@"%" identified by "123456"
设置MySQL开机启动
centos6:[root@hdfs1 ~]# chkconfig mysqld on
centos7:[root@hdfs1 ~]# systemctl enable mysqld.service
编辑/etc/my.cnf文件。编辑请将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 key_buffer = 16M 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 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 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid |
symbolic-links一定要注释掉
初始化数据库
[root@lhdfs1 ~]# /usr/bin/mysql_secure_installation
按照如下方式初始化。此步骤会初始化root用户的密码,请记住初始化后的root用户的密码。
初始化相关数据库以及用户。在MYSQL命令行下执行如下SQL:
create database amon DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create database rman DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create database metastore DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create database sentry DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create database nav DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create database navms DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database monitor DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
grant all on *.* to 'root'@'%' identified by '123456' with grant option;
JDK的安装
因为CDH的运行依赖JDK1.8的运行环境。所以在安装CDH之前一定要先安装JDK1.8。本示例中以在ROOT用户下安装JDK为例。
1、 下载并上传JDK1.8的安装包
将压缩包上传到任意目录,本文以ROOT用户的主目录(~)下为例
2、 解压到相应的安装目录下
本示例中将JDK安装在了/usr/local目录下。
[root@hdfs1 ~]# tar -zxvf jdk-8u131-linux-x64.tar.gz -C /usr/local/
3、 配置环境变量
将解压后的jdk的目录配置到环境变量中
[root@hdfs1 ~]# vi /etc/profile
在该文件的末尾处添加以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
4、刷新环境变量
[root@hdfs1 ~]# source /etc/profile
5、测试是否安装成功
在任意目录下执行一下命令
[root@hdfs1 ~]# java -version
如果出现Java的版本信息证明安装成功,如果未出现,请检查环境变量中配置的路径是否正确。
Cloudera Manager Server的安装
既然是server的安装,我们就只在server主机上执行以下步骤。
上传安装包
对于server的安装我们只需要以下安装介质
Cloudera Manager 安装包:cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz
MySQL驱动包:mysql-connector-java-5.1.44-bin.jar
大数据离线安装库: CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha
manifest.json
以上的介质我们在[安装示例介绍]章节中都已经明确,本示例中上传到ROOT用户的主目录下。
创建安装目录并解压安装介质
[root@hdfs1 ~]# mkdir /opt/cloudera-manager
[root@hdfs1 ~]# tar xzf cloudera-manager*.tar.gz -C /opt/cloudera-manager
安装数据库驱动并初始化数据库
安装数据库驱动
[root@hdfs1 ~]# mkdir -p /usr/share/java
[root@hdfs1 ~]# cp mysql-connector-java-5.1.44-bin.jar /usr/share/java/mysql-connector-java.jar
初始化数据库
创建系统用户cloudera-scm
[root@hdfs1 ~]# useradd --system --home=/opt/cloudera-manager/cm-5.12.1/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
创建server存储目录
[root@hdfs1 ~]# mkdir /var/lib/cloudera-scm-server
[root@hdfs1 ~]# chown cloudera-scm:cloudera-scm /var/lib/cloudera-scm-server
创建hadoop离线安装包存储目录
[root@hdfs1 ~]# mkdir -p /opt/cloudera/parcels;
[root@hdfs1 ~]# chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
配置agent的server指向
修改文件我方式有两种,当然,这不过是shell的功能而已,如果shell厉害,可能还会有更多的方法。
第一种方法:
[root@hdfs1 ~]# vi /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini
将server_host修改为cloudera manager server的主机名,对于本示例而言,也就是server主机。
第二种方法:
[root@dhdfs1 ~]# sed -i "s/server_host=localhost/server_host=hdfs1/" /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini
部署CDH离线安装包
[root@hdfs1 ~]# mkdir -p /opt/cloudera/parcel-repo;
[root@hdfs1 ~]# chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo;
[root@hdfs1 ~]# mv CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha manifest.json /opt/cloudera/parcel-repo/
启动Cloudera Manager Server
[root@hdfs1 ~]# /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-server start
启动Cloudera Manager Agent
[root@hdfs1 ~]# /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-agent start
Cloudera Manager Agent的安装
在除了server服务器外的其他的服务器都要执行以下步骤进行对agent的部署。
上传安装包
对于agent的安装我们只需要以下的两个安装介质
Cloudera Manager 安装包:cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz
MySQL驱动包:mysql-connector-java-5.1.44-bin.jar
安装数据库驱动
[root@hdfs1 ~]# mkdir -p /usr/share/java
[root@hdfs1 ~]# cp mysql-connector-java-5.1.44-bin.jar /usr/share/java/mysql-connector-java.jar
创建安装目录并解压安装介质
[root@hdfs1 ~]# mkdir /opt/cloudera-manager
[root@hdfs1 ~]# tar xzf cloudera-manager*.tar.gz -C /opt/cloudera-manager
建系统用户cloudera-scm
[root@hdfs1 ~]# useradd --system --home=/opt/cloudera-manager/cm-5.12.1/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
创建hadoop离线安装包存储目录
[root@hdfs1 ~]# mkdir -p /opt/cloudera/parcels;
[root@hdfs1 ~]# chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
配置agent的server指向
修改文件我方式有两种,当然,这不过是shell的功能而已,如果shell厉害,可能还会有更多的方法。
第一种方法:
[root@hdfs1 ~]# vi /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini
将server_host修改为cloudera manager server的主机名,对于本示例而言,也就是server主机。
第二种方法:
[root@dhdfs1 ~]# sed -i "s/server_host=localhost/server_host=hdfs1/" /opt/cloudera-manager/cm-5.12.1/etc/cloudera-scm-agent/config.ini
启动Cloudera Manager Agent
[root@hdfs1 ~]# /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-agent start
Cloudera ManagerMent Service集群的安装
当我们部署完CDH的server和agent之后,我们的其他一切操作都在网页上进行操作。首先我们就要安装CDH的监控集群,它是用来监控我们整个CDH的所有主机和集群的运行状态的服务。所以安装很有必要。
但是有一点是,他的进程很多,非常占用内存,生产环境中一定不要和集群安装在一台机器上。我的安装部署原则是,server主机上部署所有Cloudera Manager 相关的组件(MySQL,Cloudera Manager Server, Cloudera ManagerMent Service的所有角色),而hadoop集群的所有角色都分配到agent中。
登录到CDH的管理页面
点击添加CLOUDERA MANAGERMENT SERVICE按钮
进入到角色分配页面,将所有的主机都选择server那台。server主机我们只安装CDH的管理工具。
点击继续,进入到数据库的配置页面,配置好各个参数之后点击测试,如果显示successful证明可以进行下一步。
点击继续,进入到告警发送配置页面,如果不需要完全可以默认。
点击继续,进入到安装启动页面,等待启动完成即可
点击继续
点击完成
安装总结
转载于:https://my.oschina.net/epoch/blog/1633971