CDH5.9.0离线安装文档
1 CDH简介
CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。
Cloudera Manager则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的组件,对集群中主机、Hadoop、Hive、Spark等服务的安装配置管理做了极大简化。
2 安装包准备
Cloudera Manager下载地址:http://archive.cloudera.com/cdh5/parcels/5.9.0/
cloudera-manager-centos7-cm5.9.0_x86_64.tar.gz
CDH安装包地址:http://archive.cloudera.com/cm5/cm/5/
CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel
CDH-5.9.0-1.cdh5.9.0.p0.23-el7.parcel.sha1
manifest.json
- 系统环境
系统:centos7.2
Cloudera:CDH-5.9.0-1.cdh5.9.0.p0.23-el7
内存:主节点8G,其他节点4G
4 环境准备
4.1 修改hostname
在7版本中,hostname有三种形式:
静态(Static host name)
动态(Transient/dynamic host name)
别名(Pretty host name)
查询主机名
hostnamectl status [--static|--transient|--pretty]
修改主机名
hostnamectl set-hostname newhostname [--static|--transient|--pretty]
建议再通过修改nework文件修改配置文件:
vim /etc/sysconfig/network
HOSNAME=mujinkeji1
后面为cm初始化数据库时,会读取这个hostname导致数据库没有权限
4.2 修改hosts文件
vim /etc/hosts
172.18.231.111 mujinkeji1
172.18.231.112 mujinkeji2
172.18.231.113 mujinkeji3
172.18.231.114 mujinkeji4
如果是阿里云服务器还要讲原来配置的原来实例名的哪一行去掉
验证:ping mujinkeji2
4.3 配置ssh免密码登录
cd ~/.ssh(即/root/.ssh 如果不存在则创建)
ssh-keygen -t rsa(四个回车)生成密钥对
ssh-copy-id mujinkeji4(将公钥复制到其他服务器的一个方便脚本,cdh要求给本机也执行该命令)
验证:ssh mujinkeji2
4.4 关闭防火墙
查看默认防火墙状态:firewall-cmd --state
停止firewall:systemctl stop firewalld.service
禁止firewall开机启动:systemctl disable firewalld.service
4.5 关闭SELinux
查看SELinux状态:sestatus
临时关闭SELinux:setenforce 0
永久关闭(需重启生效):
vim /etc/selinux/config
SELINUX=disabled
4.6 配置jdk
解压:
tar -xzvf jdk-8u102-linux-x64.tar.gz -C /opt
配置环境变量:
vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_102
export PATH=$JAVA_HOME/bin:$PATH
刷新配置:source /etc/profile
验证:jps或者java -version
将jdk分发到其他服务器:
scp -r ./jdk1.8.0_102/ mujinkeji4:/opt
scp /etc/profile mujinkeji4:/etc/
source /etc/profile
4.7 配置时间同步
使用rpm检查ntp包是否安装:rpm -q ntp
使用yum进行安装:yum -y install ntp
启动ntp服务:systemctl start ntpd
开机启动:systemctl enable ntpd
服务器:
vim /etc/ntp.conf
restrict 172.18.231.0 mask 255.255.255.0 nomodify notrap(让172.18.231.0/24网段上的机器能和本机做时间同步)
客户端:
vim /etc/ntp.conf
server 172.18.231.111
restrict 172.18.231.111 nomodify notrap noquery
注掉与Internet通信的Server
配置好后重启ntp服务:systemctl restart ntpd
查看同步的服务器和时差:ntpstat
查看同步的服务器和时差详细列表:ntpq -p
指定同步的服务器:ntpdate mujinkeji1
4.8 安装mysql
4.8.1 官网下载mysql
下载网址:https://dev.mysql.com/downloads/mysql/
解压:tar –xf MySQL-5.6.36-1.el7.x86_64.rpm-bundle.tar
解压文件如下:
4.8.2 查看系统原先是否安装
mysql:rpm -qa | grep -i mysql
如果有则通过yum remove **** 卸载
4.8.3 安装mysql
rpm –ivh MySQL-server-5.6.36-1.el7.x86_64.rpm
rpm –ivh MySQL-client-5.6.36-1.el7.x86_64.rpm
rpm –ivh MySQL-devel-5.6.36-1.el7.x86_64.rpm
安装时如果报如下错误:
warning: MySQL-server-5.6.36-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
file /usr/share/mysql/charsets/README from install of MySQL-server-5.6.36-1.el7.x86_64 conflicts with file from package mariadb-libs-1:5.5.44-2.el7.centos.x86_64
这个是因为CentOS 7的默认数据库已经不再是MySQL了,而是MariaDB. MySQL安装时的mysql lib库与mariadb的库、包冲突了
解决办法:
执行以下命令,删除mariadb-libs-1:5.5.44-2.el7.centos.x86_64:
yum -y mariadb-libs-1:5.5.44-2.el7.centos.x86_64
再执行以下命令安装MySQL:
rpm -ivh MySQL-server-5.6.19-1.linux_glibc2.5.x86_64.rpm
一切Ok,安装成功了。
4.8.4 修改配置文件位置
cp /usr/share/mysql/my-default.cnf /etc/my.cnf
4.8.5 修改配置文件
vim /etc/my.cnf
增加datadir=/******
4.8.6 初始化数据
/usr/bin/mysql_install_db
初始化数据库报错:
FATAL ERROR: please install the following Perl modules before executing /usr/bin/mysql_install_db:
Data::Dumper
安装perl-Data-Dumper模组
yum install -y perl-Data-Dumper
4.8.7 启动mysql
systemctl start mysql
报错:
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
根据提示查看错误:systemctl status mysql
Loaded: loaded (/etc/rc.d/init.d/mysql; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2017-07-19 20:06:25 CST; 34s ago
Docs: man:systemd-sysv-generator(8)
Process: 15523 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=1/FAILURE)
而且此时运行:service mysql status 可以看到错误信息
ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
此时执行命令:service mysql start 也可以看到错误
Starting MySQL.Logging to '/var/mysql/data/mujinkeji1.err'.
ERROR! The server quit without updating PID file (/var/mysql/data/mujinkeji1.pid).
这个错误应该是mysql没有权限在/var/mysql/data/目录下创建mujinkeji1.pid文件
此时需要先删除/var/lock/subsys/mysql:rm -f /var/lock/subsys/mysql
其次需要给予mysql /var/mysql/目录下所有文件和目录的写权限:chown -R mysql /var/mysql/
其中/var/mysql/data/是在配置文件/etc/my.conf里配置的datadir目录
之后再启动mysql service mysql start 成功
4.8.8 首次登录mysql
mysql –uroot
4.8.9 设置密码
#设置密码:
use mysql;
select host,user,password from user;
update user set password=password('123456') where user='root';
4.8.10 设置远程登录
#远程登陆用户设置:
#更新一条数据
update user set host='%' where user='root';
#推荐使用该语句 该语句会插入一条新的数据到user表
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
#刷新设置,使设置生效
flush privileges;
4.8.11 设置开机启动
systemctl enable mysql
4.9 创建集群需要用的数据库
#Activty Monitor数据库
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hive数据库
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#oozie数据库
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hue数据库
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
5 安装CM
5.1 解压cloudera manager
tar -zxvf cloudera-manager-centos7-cm5.9.0_x86_64.tar.gz -C /opt/
出现:cloudera、cm-5.9.0两个目录
其中cloudera是集群的目录,cm-5.9.0是cloudera manager程序的目录
解压到/opt目录下,不能解压到其他地方,因为cdh5的源会默认在/opt/cloudera/parcel-repo寻找,而CM可以按照个人喜好安装
5.2
mkdir /opt/program/
mv /opt/cm-5.9.0/ /opt/program/cm-5.9.0/
ln -s /opt/program/cm-5.9.0/ /opt/cm
5.3 移动parcel包
将parcel包移动到/opt/cloudera/parcel-repo目录下,这样安装时CM就能直接找到了。
CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel
CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha
manifest.json
5.4 修改cloudera agent配置文件
vim /opt/cm/etc/cloudera-scm-agent/config.ini
server_host=mujinkeji1
5.5 将mysql的JDBC驱动放入CM的lib目录下
cp mysql-connector-java-5.1.42-bin.jar /opt/cm/share/cmf/lib/
5.6 为CM创建数据库
/opt/cm/share/cmf/schema/scm_prepare_database.sh mysql cm -hmujinkeji1 -uroot -psdg@joutd --scm-host mujinkeji1 scm scm scm
如果是阿里云服务器可能会报一个scm@"i-wz9cw1gpc5cdhwh935jy"没有权限登录的错误,这可能是因为cm是读取/etc/sysconfig/network配置文件里的HOSTNAME,修改之后就好
5.7 拷贝CM到各个节点
scp -r /opt/program mujinkeji4:/opt/
都建立链接:ln -s /opt/program/cm-5.9.0/ /opt/cm
5.8 为每个节点创建cloudera-scm用户
useradd --system --home=/opt/cm/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
5.9 在主节点启动CM的service服务
/opt/cm/etc/init.d/cloudera-scm-server start
5.10 在从节点启动CM的agent服务
/opt/cm/etc/init.d/cloudera-scm-agent start
5.11 设置开机启动cm
1)创建软连接:
在主节点创建软连接:
ln -s /opt/cm/etc/init.d/cloudera-scm-server /etc/init.d/cloudera-scm-server
在所有节点创建软连接:
ln -s /opt/cm/etc/init.d/cloudera-scm-agent /etc/init.d/cloudera-scm-agent
2)添加服务:
在主机节点添加开机启动:
chkconfig --add cloudera-scm-server
chkconfig cloudera-scm-server on
在所有节点添加开机启动:
chkconfig --add cloudera-scm-agent
chkconfig cloudera-scm-agent on
查看是否添加成功:
chkconfig --list cloudera-scm-server
chkconfig --list cloudera-scm-agent
6 安装集群
6.1 登录cloudera manager 界面
默认用户名:admin
密码:admin
6.2 勾选然后“继续”
6.3 选择版本
6.4 继续
6.5 为节点指定主机
点击当前主机会显示所有启动了agent的节点
6.6 全部勾上,然后继续
6.7 选择CDH版本,然后继续
点击更多选项,把联网的地址都去掉
6.8 分发安装集群parcel
整个过程顺利的话大概5分钟
6.9 检查各个节点主机情况
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 30。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响:
mujinkeji[1-4]
已启用透明大页面压缩,可能会导致重大性能问题。请运行“echo never > /sys/kernel/mm/transparent_hugepage/defrag”以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始脚本中,以便在系统重启时予以设置。以下主机将受到影响:
mujinkeji[1-4]
检查过程中出现两个警告,看着很不爽,必须去掉
1、设置swap空间
vim /etc/sysctl.conf
vm.swappiness=10
使用scp批处理拷贝/etc/sysctl.conf到各节点
scp /etc/sysctl.conf mujinkeji4:/etc/
使配置生效
sysctl -p
2、关闭大页面压缩(每个节点执行)
当前生效:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(每次开机会执行rc.local里的脚本)
vim /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
使用scp批处理拷贝/etc/rc.local到各节点
scp /etc/rc.local mujinkeji2:/etc/
处理完之后全是勾,完美
6.10集群设置,按需选择
6.11角色分配,按需分配
6.12 数据库设置
设置之前创建的数据库
这时hue是连不上的,会报错:Unexpected error. Unable to verify database connection.
安装一下:yum install -y python-lxml
有可能还需要安装python的数据库连接包:mysql-connector-python-2.1.6-1.el7.x86_64.rpm
6.13 审核更改
可以更改,也可以使用默认配置
6.14 启动集群
如果安装impala,则需要安装:yum install -y perl
启动集群时可能会报JAVA_HOME找不到:
find / -type f -name "*.sh" | xargs grep "as ALT_NAME"
定位到/opt/cm/lib64/cmf/service/client/deploy-cc.sh
在deploy-cc.sh中写死JAVA_HOME的位置
vim /opt/cm/lib64/cmf/service/client/deploy-cc.sh
export JAVA_HOME=/opt/jdk1.8.0_102
分发到各个节点:
scp /opt/cm/lib64/cmf/service/client/deploy-cc.sh /opt/cm/lib64/cmf/service/client/
刷新配置:
cat /etc/environment
在启动hive和oozie时会报加载不到连接数据库的driver:
cp mysql-connector-java-5.1.42-bin.jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23//lib/hive/lib/
cp mysql-connector-java-5.1.42-bin.jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23//lib/oozie/lib/
如果不行的话就直复制到/var/lib/目录下
cp mysql-connector-java-5.1.42-bin.jar /var/lib/hive/
cp mysql-connector-java-5.1.42-bin.jar /var/lib/oozie/
6.15 安装成功
HUE连接不上Hive,报错:
Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found
解决方法:
yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi
3.15
kafka启动可能失败:应为默认设置的Java Heap Size太小,推荐256M
如果启动spark-shell是报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
修改如下配置:export SPARK_DIST_CLASSPATH=$(hadoop classpath)
此时spark-shell可以启动成功,但启动过程中会报错:
java.lang.IllegalArgumentException: Required executor memory (1024+384 MB) is above the max threshold (1024 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
意思是executor需要1024+384 MB而yarn配置的执行容器的的最大内存只有1024M,此时增大配置到1512M,记得minimum和maximum都看一下保证minimum比maximum小否则yarn会启动失败如下图:
接着可能会出现spark没有权限读取hdfs文件的的错误:
ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
此时设置dfs.permissions为false: