离线安装Cloudera Manager 5.11.1和CDH5.11.1完全教程
关于CDH和Cloudera Manager
CDH (Cloudera's Distribution, including Apache Hadoop)
,是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。
Cloudera Manager
则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的组件,对集群中主机、Hadoop、Hive、Spark等服务的安装配置管理做了极大简化。
安装前准备
- 操作系统:CentOS7.3 x64 GNOME DESTOP + development tools组包
- Cloudera Manager:5.11.1
- CDH: 5.11.1
安装说明
官方参考文档:http://www.cloudera.com/
官方共给出了多种安装方式:
第一种方法必须要求所有机器都能连网,由于最近各种国外的网站被墙的厉害,我尝试了几次各种超时错误,巨耽误时间不说,一旦失败,重装非常痛苦。
另一种离线安装,对系统侵入性最小,而且重装什么的都非常方便。后期的集群统一包升级也非常好。这也是我之所以选择离线安装的原因。
软件包
Cloudera Manager:cloudera-manager-centos7-cm5.11.1_x86_64.tar.gz
下载地址:http://archive.cloudera.com/cm5/cm/5/
CDH安装包:
- CDH-5.11.1-1.cdh5.11.1.p0.4-el7.parcel
- CDH-5.11.1-1.cdh5.11.1.p0.4-el7.parcel.sha1
manifest.json
下载地址 : http://archive.cloudera.com/cdh5/parcels/5.11.1/JDK: oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
下载地址:
节点介绍
hostname | ip地址 | 服务 |
---|---|---|
master | 192.168.0.200 | cloudera-server,cloudera-agent |
slave1 | 192.168.0.201 | cloudera-agent |
slave2 | 192.168.0.202 | cloudera-agent |
主节点:master,从节点:slave1,slave2
系统环境准备
1.网络配置(master,slave1,slave2)
(1)修改主机名: vi /etc/hostname
修改完hostname必须重启后才生效
(2)添加hosts: vi /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost
#set cdh
192.168.0.200 master
192.168.0.201 slave1
192.168.0.202 slave2
2.SSH免密码登录(master,salve1,slave2)
只需要主节点和从节点之间SSH免密码登录就行,从节点和从节点之间不需要。
先删除所有密钥 rm -rf ~/.ssh/*
# ssh-keygen -t rsa
# ssh-copy-id master
# ssh-copy-id slave1
# ssh-copy-id slave2
# ssh localhost
3.关闭防火墙(master,slave1,slave2)
#关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
4.SELINUX关闭(master,slave1,slave2)
//关闭Selinux服务
# setenforce 0
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
# iptables --flush
# reboot #重启生效
5.设置文件打开数量及最大进程数(master,slave1,slave2)
# cp /etc/security/limits.conf /etc/security/limits.conf.bak
# echo "* soft nproc 32000" >>/etc/security/limits.conf
# echo "* hard nproc 32000" >>/etc/security/limits.conf
# echo "* soft nofile 65535" >>/etc/security/limits.conf
# echo "* hard nofile 65535" >>/etc/security/limits.conf
6.同步时间(master,slave1,slave2)
安装ntp服务:
# yum -y install ntp
启动ntp服务,并设置开机自启:
# systemctl start ntpd
# systemctl enable ntpd
7.安装JDK配置环境变量(master,slave1,slave2)
先删除系统自带的java:
# rpm -qa | grep java
tzdata-java-2016g-2.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
javapackages-tools-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
//删除上面显示的包:
rpm -e --nodeps tzdata-java-2016g-2.el7.noarch
rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
每个节点需要安装相同版本的Java。这里采用的是rpm方式安装Java.
// 默认解压到/usr/jave/jdk1.7.0_67-cloudera
# rpm -i oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
# cd /usr/java
# mv jdk1.7.0_67-cloudera default #即JAVA_HOME=/usr/java/default
最好将JDK安装在
/usr/java/default
中,有的版本要求安装在此目录,要不然找不到JAVA_HOME
由于是rpm包并不需要我们来配置环境变量,我们只需要配置一个全局的JAVA_HOME变量即可,在/etc/profile
末尾添加:
# set java env
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
再source /etc/profile
立即生效
建议手动指定一下java的使用版本
alternatives --config java
,避免在安装Spark组件时报错
8.安装配置MariaDB(master)
先卸载:
# rpm -qa | grep mariadb
mariadb-libs-5.5.52-1.el7.x86_64
# rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
在安装:
yum -y install mariadb mariadb-server
#安装完成MariaDB,首先启动MariaDB
systemctl start mariadb
#设置开机启动
systemctl enable mariadb
#接下来进行MariaDB的相关简单配置
mysql_secure_installation
#首先是设置密码,会提示先输入密码
Enter current password for root (enter for none):<–初次运行直接回车
#设置密码
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
#其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
#初始化MariaDB完成,接下来测试登录
mysql -uroot -ppassword
完成。
配置MariaDB字符集:http://www.linuxidc.com/Linux/2016-03/128880.htm
文件/etc/my.cnf
vi /etc/my.cnf
在[mysqld]标签下添加
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
文件/etc/my.cnf.d/client.cnf
vi /etc/my.cnf.d/client.cnf
在[client]中添加
default-character-set=utf8
文件/etc/my.cnf.d/mysql-clients.cnf
vi /etc/my.cnf.d/mysql-clients.cnf
在[mysql]中添加
default-character-set=utf8
全部配置完成,重启mariadb
systemctl restart mariadb
之后进入MariaDB查看字符集
mysql> show variables like "%character%";show variables like "%collation%";
创建数据库:
#为hive建库hive
mysql>create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#为Activity Monitor建库amon
mysql>create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#为Oozie建库oozie
mysql>create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#为Hue建库hue
mysql>create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
设置root授权访问以上所有的数据库,因为CM安装时会创建数据库,这里设置后安装CM时可以设置数据库的host为master:
mysql>grant all privileges on *.* to 'root'@'master' identified by '123456' with grant option;
mysql>flush privileges;
补充: 安装完成集群后,运行Sqoop程序出现如下错误:
Caused by: java.sql.SQLException: null, message from server: "Host 'slave1' is not allowed to connect to this MariaDB server"
是因为MariaDB不允许远程连接导致的,在MariaDB中运行:
mysql>grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql>flush privileges;
即可运行Sqoop程序了。
9.安装第三方依赖包(master,slave1,slave2)
不安装这些依赖,安装Cloudera Manager时可能会报错
yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb
yum -y install psmisc MySQL-python at bc bind-libs bind-utils cups-client cups-libs cyrus-sasl-gssapi cyrus-sasl-plain ed fuse fuse-libs httpd httpd-tools keyutils-libs-devel krb5-devel libcom_err-devel libselinux-devel libsepol-devel libverto-devel mailcap noarch mailx mod_ssl openssl-devel pcre-devel postgresql-libs python-psycopg2 redhat-lsb-core redhat-lsb-submod-security x86_64 spax time zlib-devel
Cloudera Manager安装
1.安装Cloudera Manager Server 和Agent
主节点解压安装(master)
tar -zxvf cloudera-manager-centos7-cm5.11.1_x86_64.tar.gz -C /opt/
2.配置 CM Server数据库(master)
将mysql-connector-java-5.1.42-bin.jar放到/opt/cm-5.11.1/share/cmf/lib下并初始化数据库:
# cp mysql-connector-java-5.1.42-bin.jar /opt/cm-5.11.1/share/cmf/lib
/opt/cm-5.11.1/share/cmf/schema/scm_prepare_database.sh [-数据库类型] [-创建的数据库名] [-h主机名] [-u用户名] [-p密码]
# /opt/cm-5.11.1/share/cmf/schema/scm_prepare_database.sh mysql cm -hmaster -uroot -p123456 --scm-host master scm scm scm
3.配置 CM Agent(master)
修改/opt/cm-5.11.1/etc/cloudera-scm-agent/config.ini文件中的server_host为主节点主机名
# vi /opt/cm-5.11.1/etc/cloudera-scm-agent/config.ini
[General]
# Hostname of the CM server.
server_host=master //修改为主节点主机名
4.将Agent文件从主节点分发到其他从节点:(master)
# scp -r /opt/cm-5.11.1 slave1:/opt
# scp -r /opt/cm-5.11.1 slave2:/opt
5.创建用户cloudera-scm(master,slave1,slave2)
每个节点上执行命令创建cloudera-scm
用户,因为CM使用cloudera-scm
用户管理。
# useradd --system --home=/opt/cm-5.11.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
6.准备Parcels,用以安装CDH5
(1)在主节点master上,将cdh parcels安装包放置到/opt/cloudera/parcel-repo
目录下,并修改权限:
cp CDH-5.11.1-1.cdh5.11.1.p0.4-el7.parcel /opt/cloudera/parcel-repo/
cp CDH-5.11.1-1.cdh5.11.1.p0.4-el7.parcel.sha1 /opt/cloudera/parcel-repo/
mv /opt/cloudera/parcel-repo/CDH-5.11.1-1.cdh5.11.1.p0.4-el7.parcel.sha1 /opt/cloudera/parcel-repo/CDH-5.11.1-1.cdh5.11.1.p0.4-el7.parcel.sha
//这一步可以不用做
chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
(2)在所有cloudera-agent上创建parcels目录(这一步可以不用做):
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
7.启动 CM Server和Agent
(1)启动服务
//主节点启动(master):
# /opt/cm-5.11.1/etc/init.d/cloudera-scm-server start
//所有节点启动(master,slave1,slave2):
# /opt/cm-5.11.1/etc/init.d/cloudera-scm-agent start
CM Server首次启动会自动创建表以及数据,不要立即关闭和重启,否则需要删除所有表和数据,重新安装
(2)添加开机自启动
# chmod +x /etc/rc.d/rc.local
# vi /etc/rc.d/rc.local
// 在此文件中添加启动命令即可实现开机启动
//主节点启动(master):
# /opt/cm-5.11.1/etc/init.d/cloudera-scm-server start
//所有节点启动(master,slave1,slave2):
# /opt/cm-5.11.1/etc/init.d/cloudera-scm-agent start
(3)启动错误
启动服务器时,使用tail -f /opt/cm-5.11.1/log/cloudera-scm-server/cloudera-scm-server.log
可以查看日信息,如果出现:
2017-08-03 08:05:18,558 ERROR WebServerImpl:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: The server storage directory [/var/lib/cloudera-scm-server] doesn't exist.
2017-08-03 08:05:18,558 ERROR WebServerImpl:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No read permission to the server storage directory [/var/lib/cloudera-scm-server]
2017-08-03 08:05:18,558 ERROR WebServerImpl:com.cloudera.server.web.cmf.search.components.SearchRepositoryManager: No write permission to the server storage directory [/var/lib/cloudera-scm-server]
则:
mkdir -p /var/lib/cloudera-scm-server
chmod 777 /var/lib/cloudera-scm-server
(3)启动成功
首次启动成功,tail -f /opt/cm-5.11.1/log/cloudera-scm-server/cloudera-scm-server.log
显示:
2017-08-09 16:09:30,123 INFO ParcelUpdateService:com.turn.ttorrent.common.Torrent: Single-file torrent information:
2017-08-09 16:09:30,123 INFO ParcelUpdateService:com.turn.ttorrent.common.Torrent: Torrent name: CDH-5.11.1-1.cdh5.11.1.p0.4-el7.parcel
2017-08-09 16:09:30,123 INFO ParcelUpdateService:com.turn.ttorrent.common.Torrent: Announced at: Seems to be trackerless
2017-08-09 16:09:30,123 INFO ParcelUpdateService:com.turn.ttorrent.common.Torrent: Created on..: Wed Aug 09 16:09:06 CST 2017
2017-08-09 16:09:30,123 INFO ParcelUpdateService:com.turn.ttorrent.common.Torrent: Created by..: cm-server
2017-08-09 16:09:30,123 INFO ParcelUpdateService:com.turn.ttorrent.common.Torrent: Pieces......: 3038 piece(s) (524288 byte(s)/piece)
2017-08-09 16:09:30,123 INFO ParcelUpdateService:com.turn.ttorrent.common.Torrent: Total size..: 1,592,734,904 byte(s)
非首次启动成功,显示:
INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server
8.登录
CM Server启动成功后,可以登录http://master:7180
进行CDH部署。
用户名:admin
密码:admin
CDH部署
1.选择节点
2.选择本地Parcel
3.服务器检查
出现如上图所示警告,则:
# sysctl -w vm.swappiness=10
# echo "vm.swappiness=10" >>/etc/sysctl.conf
//将下面两句添加到系统启动脚本中如`/etc/rc.local`,以便系统重启生效
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
4.选择服务
5.服务配置
6.数据库设置
7.集群设置
8.启动服务
遇到上述错误,如若安装hive组件且使用Mysql类型的数据仓库,那么需要为hive增加MySQL connector的驱动。
cp mysql-connector-java-5.1.42-bin.jar /opt/cloudera/parcels/CDH/lib/hive/lib/
oozie组件同样也需要数据库驱动:
# mv mysql-connector-java-5.1.41-bin.jar mysql-connector-java.jar
# cp mysql-connector-java.jar /usr/share/java/
9.安装完成
10.测试
在主节点上执行以下模拟Pi的示例程序:
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
执行过程需要花一定的时间,通过YARN的后台也可以看到MapReduce的执行状态。
测试Spark2:
spark2-submit --class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client /opt/cloudera/parcels/SPARK2/lib/spark2/examples/jars/spark-examples_2.11-2.2.0.cloudera1.jar 100
11.其它
在Cloudrea Manager页面上,可以向集群中添加/删除主机,添加服务到集群等。
Cloudrea Manager
页面开启了google-analytics
,因为从国内访问很慢,可以关闭google-analytics
管理
-> 设置
-> 其他
-> 允许使用情况数据收集
不选
后记
工欲善其事必先利其器,管理 Hadoop
集群,Cloudrea
是个不错的选择。