安装CM 6.3.1和CDH 6.3.2
操作系统要求
在安装CDH之前,我们来看看平台对系统有什么样的要求。通过官方文档,我们可以看到有5个方面的要求:
- 软件依赖
- CDH和CM支持的依赖
- 文件系统要求
- nproc配置
- Kudu所要求的nscd
软件依赖
Python
操作系统带的Python是支持的(Hue和Spark会有一点问题),但Python 3.0或者更高版本是不兼容的。CDH 6要求OS需要Python 2.7或者更高的版本,而Spark 2需要Python 2.7或者更高版本的支持,但Spark 3只支持Python 3。
Perl
Cloudera Manager是要求Perl的。
python-psycopg2
CM6是依赖python-psycopg2的,Hue依赖更高的python-psycopg2版本。
iproute
CM6需要依赖iproute包。所有运行CM agent的节点都需要这个软件包。而不同的操作系统,对iproute依赖的版本也是不一样的。
CDH和CM支持的操作系统
注意:
- 所有的CDH节点都需要在同一个OS的major版本。例如:都是CentOS 7.8或者都是CentOS 7.7。Cloudera建议我们都使用相同的操作系统版本,避免额外的风险。
- Cloudera是不能把CDH集群部署在Docker上的
文件系统要求
CDH支持的文件系统有:ext3、ext4、xfs(CentOS7的默认版本)、s3。Kudu要求使用:ext4或者xfs。Linux文件系统默认会保存每个文件的访问时间元数据,所以读文件也会写元数据,Cloudera建议 /etc/fstab 禁用noattime。
/dev/sdb1 /data1 ext4 defaults,noatime 0
mount -o remount /data1
nproc配置
应该确保nproc限制设置大一点,例如:65536或者262144
为Kudu配置nscd
建立使用nscd为Kudu配置DNS域名解析缓存
数据库要求
CM和CDH都嵌入了PostgreSQL数据库,在非生产环境可以用。但生产环境不可以使用它,必须要为它配置外部的数据库。要使用与操作系统匹配的数据库版本,MySQL必须要使用UTF-8编码方式。MySQL 5.7必须安装MySQL-shared-compact或者MySQL-shared软件包。CM Agent必须要安装。
Java版本要求
使用64位的Java版本
准备工作
安装Centos 7
安装网络工具:
yum install -y net-tools.x86_64
yum install -y wget
安装VIM编辑器
yum install -y vim
当前系统默认的Python版本为2.7.5
下载包以及规划
1、下载CM 6.3.1
2、下载CDH 6.3.2
3、环境配置
创建安装用户
# 添加组
groupadd hadoop
# 创建用户并设置到组
adduser -g hadoop hadoop -d /home/hadoop -m
# 设置密码
passwd hadoop
sudo授权
vim /etc/sudoers
hadoop ALL=(ALL) NOPASSWD: ALL
配置域名映射
所有节点上配置域名映射
sudo vim /etc/hosts
192.168.88.100 cdh6-master
192.168.88.101 cdh6-slave1
192.168.88.102 cdh6-slave2
192.168.88.103 cdh6-slave3
配置SSH免密登录
配置master到其他slave节点配置免密登录
# 生成ssh key,一路回车生成
ssh-keygen
ssh-copy-id hadoop@cdh6-master
ssh-copy-id hadoop@cdh6-slave1
ssh-copy-id hadoop@cdh6-slave2
ssh-copy-id hadoop@cdh6-slave3
关闭防火墙
所有节点关闭防火墙
# 查看防火墙状态
sudo firewall-cmd --state
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
关闭SELINUX
sudo setenforce 0
sudo vim /etc/selinux/config
SELINUX=disabled
安装依赖
所有节点安装以下依赖
sudo yum install -y bind-utils psmisc libxslt cyrus-sasl-plain cyrus-sasl-gssapi fuse portmap fuse-libs httpd mod_ssl openssl-devel python-psycopg2 MySQL-python /lib/lsb/init-functions libpq.so.5
sudo wget http://www.percona.com/redir/downloads/Percona-XtraDB-Cluster/5.5.37-25.10/RPM/rhel6/x86_64/Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm
# 或者直接从本地上传,然后安装
sudo rpm -ivh Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm
安装NTP
所有机器安装NTP服务
# 安装
sudo yum -y install ntp
# 配置时间服务器
sudo vim /etc/ntp.conf
## 加入时间服务器:
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
# 启动NTP时间服务器
sudo systemctl start ntpd.service
# 设置NTP开机自动启动
sudo systemctl enable ntpd.service
安装JDK
下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
# 授权hadoop用户 /opt拥有者权限
sudo chown -R hadoop /opt
配置环境变量
# 上传JDK压缩包
sudo mkdir /usr/java
sudo tar -xvzf /home/hadoop/jdk-8u181-linux-x64.tar.gz -C /usr/java
vim ~/.bash_profile
export JAVA_HOME=/usr/java
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
source /home/hadoop/.bash_profile
查看Java版本号:
[root@cdh6-master opt]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
分发到另外几台服务器
scp -r jdk1.8.0_181/ root@cdh6-slave1:$PWD
scp -r jdk1.8.0_181/ root@cdh6-slave2:$PWD
scp -r jdk1.8.0_181/ root@cdh6-slave3:$PWD
scp /home/hadoop/.bash_profile hadoop@cdh6-slave1:/home/hadoop/
scp /home/hadoop/.bash_profile hadoop@cdh6-slave2:/home/hadoop/
scp /home/hadoop/.bash_profile hadoop@cdh6-slave3:/home/hadoop/
全部加载环境变量
source ~/.bash_profile
注意:
- JDK一定要安装在 /usr/java目录,否则会报错找不到JDK
安装CDH 6.3 YUM源
sudo curl -o /etc/yum.repos.d/cloudera-manager.repo https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/cloudera-manager.repo
sudo rpm --import https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPM-GPG-KEY-cloudera
所有节点安装MySQL驱动
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
# 或者直接从本地上传
# 解压
tar -xvzf mysql-connector-java-5.1.46.tar.gz
# 放到指定目录,一定要改名为mysql-connector-java.jar
sudo mkdir -p /usr/share/java/
sudo cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar
# 复制到每个节点
sudo scp /usr/share/java/mysql-connector-java.jar root@cdh6-slave1:/usr/share/java/
sudo scp /usr/share/java/mysql-connector-java.jar root@cdh6-slave2:/usr/share/java/
sudo scp /usr/share/java/mysql-connector-java.jar root@cdh6-slave3:/usr/share/java/
安装mysql 5.7
检查系统自带的MySQL服务。
清理机器上安装的mariadb
sudo rpm -qa | grep mariadb
sudo rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
安装libaio
sudo rpm -qa | grep libaio
# 如果没有则用yum安装
sudo yum install libaio -y
安装MySQL源
sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum localinstall -y mysql57-community-release-el7-11.noarch.rpm
sudo yum repolist enabled | grep "mysql.*-community.*"
安装MySQL
sudo yum install -y mysql-community-server
启动MySQL服务
sudo systemctl start mysqld
sudo systemctl status mysqld
# 设置开机启动
sudo systemctl enable mysqld
# 重载所有修改过的配置文件
sudo systemctl daemon-reload
查看mysql初始密码
sudo grep 'temporary password' /var/log/mysqld.log
2021-01-17T02:34:12.450842Z 1 [Note] A temporary password is generated for root@localhost: O6uldhGK(F9,
修改MySQL密码要求级别
sudo vim /etc/my.cnf
# 添加下面一行
plugin-load=validate_password.so
validate-password=OFF
# 重启MySQL
sudo systemctl restart mysqld
修改MySQL密码
# 用前面的初始密码登录到MySQL
mysql -uroot -p
set password for 'root'@'localhost'=password('123456');
创建scm用户
mysql -uroot -p
# 新建scm用户
CREATE USER 'scm'@'%' IDENTIFIED BY '123456';
grant all privileges on *.* to root@'%'identified by '123456';
grant all privileges on *.* to 'scm'@'%' with grant option;
flush privileges;
尝试使用MySQL工具从外部连接,测试是否有效。
创建数据库
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
grant all privileges on *.* to 'scm'@'%' identified by '123456' with grant option;
flush privileges;
安装CM
安装Cloudera Manager Server
在Master节点上安装Cloudera Manager Server。
cd /home/hadoop
# 上传cm压缩包并解压缩
tar -xvzf cm6.3.1-redhat7.tar.gz
# 安装cm daemon、cm server
cd /home/hadoop/cm6.3.1/RPMS/x86_64
sudo yum -y localinstall cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-server
cd /opt/cloudera/cm
# 查看安装是否成功
rpm -qa | grep cloudera-manager
[hadoop@cdh6-master cm]$ rpm -qa|grep cloudera-manager
cloudera-manager-server-6.3.1-1466458.el7.x86_64
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64
配置数据库连接
sudo vim /etc/cloudera-scm-server/db.properties
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=localhost
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.setupType=EXTERNAL
com.cloudera.cmf.db.password=123456
Master执行初始化脚本
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
启动CM Server
sudo systemctl start cloudera-scm-server
# 查看状态
sudo systemctl start cloudera-scm-server
查看启动日志
sudo tail -100f /var/log/cloudera-scm-server/cloudera-scm-server.log
Slave节点安装Agent
在所有Slave节点安装agement
sudo yum localinstall cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-agent -y
所有Slave节点修改CM Server地址
sudo vim /etc/cloudera-scm-agent/config.ini
# 将server_host修改为CM-Server所在的主机名
server_host=cdh6-master
启动Agent
sudo systemctl start cloudera-scm-agent
# 查看agent状态
sudo systemctl status cloudera-scm-agent
查看日志
sudo tail -100f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
登录CM
在window配置域名映射:
http://cdh6-master:7180/cmf/login
使用admin/admin登陆
安装CDH组件
下载CDH安装包
Master安装Apache HTTP Server
http server是用来存放Parcel文件的
sudo yum install httpd
# 启动
sudo systemctl start httpd
# 查看httpd状态
sudo systemctl status httpd
# 创建CDH安装包库位置
sudo mkdir /var/www/html/cloudera-repos
# 将parcel文件和sha1上传到上面的目录中
[hadoop@cdh6-master cloudera-repos]$ ll
总用量 2033428
-rw-r--r--. 1 root root 2082186246 1月 17 11:57 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
-rw-r--r--. 1 root root 40 1月 17 11:55 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
-rw-r--r-- 1 root root 33887 1月 17 12:37 manifest.json
# 将.sha1后缀名改为.sha
[hadoop@cdh6-master cloudera-repos]$ sudo mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
[hadoop@cdh6-master cloudera-repos]$ ll
总用量 2033392
-rw-r--r--. 1 root root 2082186246 1月 17 11:57 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
-rw-r--r--. 1 root root 40 1月 17 11:55 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
测试Apache服务,在浏览器中输入:
http://cdh6-master/cloudera-repos/
这样,其他Agent就可以从Apache Server下载Parcel了。
通过向导安装组件
配置CM
1、配置集群名称为:MyCDH
2、扫描主机(安装过CM Agent,且配置正确的服务器会直接显示出来)
3、配置本地远程Parcel url地址(就是前面的Apache HTTP Server地址)
配置为:http://cdh6-master/cloudera-repos/
4、选择cdh6.x版本
等待下载Parcel
耐心等待下载、分配、解压、激活完成。这个过程大概需要(40-60分钟)
1、CM会先将Apache Server上的parcel下载到/opt/cloudera/parcel-repo目录
[hadoop@cdh6-master parcel-repo]$ ll
总用量 2035912
-rw-r----- 1 cloudera-scm cloudera-scm 2496640 1月 17 12:39 CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.part
-rw-r----- 1 cloudera-scm cloudera-scm 2082186246 1月 17 12:50 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
-rw-r----- 1 cloudera-scm cloudera-scm 41 1月 17 12:50 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
-rw-r----- 1 cloudera-scm cloudera-scm 79610 1月 17 12:51 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.torrent
你会发现,CM制作了torrent种子,方便其他agent下载。
2、每个slave从master上下载parcel。
下载过程中如果出现:org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection异常。查看日志发现:
2021-01-17 12:53:04,933 INFO JvmPauseMonitor:com.cloudera.enterprise.debug.JvmPauseMonitor: Detected pause in JVM or host machine (e.g. a stop the world GC, or JVM not scheduled): paused approximately 5938ms: no GCs detected.
2021-01-17 12:53:29,214 WARN C3P0PooledConnectionPoolManager[identityToken->1hgeickaf4288e9wu8vq|46d8f407]-AdminTaskTimer:com.mchange.v2.async.ThreadPoolAsynchronousRunner: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@7fdfa5b3 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2021-01-17 12:53:29,217 WARN JvmPauseMonitor:com.cloudera.enterprise.debug.JvmPauseMonitor: Detected pause in JVM or host machine (e.g. a stop the world GC, or JVM not scheduled): paused approximately 22360ms: no GCs detected.
2021-01-17 12:53:29,602 WARN scm-web-107:org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: Resolved [org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection] to ModelAndView: materialized View is [com.cloudera.server.web.common.JamonModelAndView$JamonView@6ee3400a]; model is {}
2021-01-17 12:53:43,479 INFO JvmPauseMonitor:com.cloudera.enterprise.debug.JvmPauseMonitor: Detected pause in JVM or host machine (e.g. a stop the world GC, or JVM not scheduled): paused approximately 1022ms: no GCs detected.
这个问题是由于Full GC,是由于Master内存紧张导致。CM会Resolve掉,不必理会。
等待解压完成。
继续配置
选择安装需要的组件,此处我安装了以下几个组件:
- HDFS
- YARN
- ZK
- Kudu
- Impala
- Hive
- Spark
- Hue
给所有组件分配角色。配置好后,点击「继续」。等待片刻。
配置MySQL元数据库
在MySQL创建一个hive和hue、activity_monitor的数据库,用于存放Hive的元数据。
注意:主机名称、数据库名、用户名、密码都要配置正确。否则需要等待较长时间。
配置Kudu
配置WAL目录:
1、Kudu Master WAL Directory
/kudu/master/wal
2、Kudu Master Data Directories
/kudu/master/data
3、Kudu Tablet Server WAL Directory
/kudu/tablet/wal
4、Kudu Tablet Server Data Directories
/kudu/tablet/data
点击「继续」
等待安装/启动完成
到此为止,CM和CDH就已经安装好了。
大家可以根据实际情况,来安装其他的服务,以及对现有运行的服务管理。
参考文献:
https://www.cnblogs.com/dengbangpang/archive/2020/07/02/13224244.html