如果有什么需要明天做的事,最好现在就开始。 --富兰克林
大数据泛指巨量的数据集,因可从中挖掘出有价值的信息而受到重视。步入大数据就要从部署大数据平台开始,所谓大数据平台其实就是一个很多台主机组成的一台新的"computer",这一台高性能"computer"足以让我们处理巨量的数据集。我们可以利用这一台"computer"对数据集进行处理和存储。
CDH,全称Cloudera’s Distribution, including Apache Hadoop。是由Cloudera将Hadoop生态圈中最常使用的开源组件集成为一个Hadoop的发行版。
在安装CDH之前,我们先了解一下CDH的构成。CDH由Cloudera Manager(CM)管理平台和CDH parcel(parcel包含各种Hadoop生态圈组件的安装包)。
下面我们开始离线安装CDH6.2.0,首先要下载三个必要的组件:
CM的官方下载地址为:https://archive.cloudera.com/cm6/6.2.0
parcel的官方下载地址为:https://archive.cloudera.com/cdh6/6.2.0/parcels
mysql的官方下载地址为:https://dev.mysql.com/downloads/mysql
CM:
parcel组件:
Mysql组件(mysql安装包+Mysql JDBC )
准备好Centos7的镜像:CentOS-7-x86_64-DVD-1908.iso
集群规划:
主机名 | IP | 角色 | 系统版本 |
---|---|---|---|
CDH00 | 192.168.0.250 | CM | Centos7 |
CDH01 | 192.168.0.251 | 数据节点 | Centos7 |
CDH02 | 192.168.0.252 | 数据节点 | Centos7 |
CDH03 | 192.168.0.253 | 数据节点 | Centos7 |
在Vbox中生成一台Other Linux(64-bit) 作为CDH00,其余数据节点通过克隆得到。
在CM的官方下载可以看到CDH6.2.0匹配的JDK版本为1.8以上的版本
若系统没有安装所支持的jdk版本,在启动cloudera-scm-server会出现出现JDK版本不兼容问题
+======================================================================+
| Error: Unable to find a compatible version of Java on this host,|
| either because JAVA_HOME has not been set or because a |
| compatible version of Java is not installed. |
+----------------------------------------------------------------------+
| Please install either: |
| - a supported version of the Oracle JDK from the Oracle Java web |
| site: |
| > http://www.oracle.com/technetwork/java/javase/index.html < |
| OR |
| - a supported version of the OpenJDK from your OS vendor. Help for |
| some OSes are available at: |
| > http://openjdk.java.net/install/ < |
| |
| Cloudera Manager requires Oracle JDK or OpenJDK 1.8 or later. |
| NOTE: Cloudera Manager will find the Oracle JDK when starting, |
| regardless of whether you installed the JDK using a binary |
| installer or the RPM-based installer. |
+======================================================================+
tar -xzvf jdk-8u212-linux-x64.tar.gz -C /data/app
export JAVA_HOME=/data/app/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
编辑保存之后,使用source /etc/profile生效
由于CDH配置的JAVA_HOME路径为/usr/java,如果一开始jdk的安装路径为/usr/java后续安装CM的时候就不会有jdk版本不匹配的问题,但如果一开始jdk的路径不在这个路径下需要把本地安装jdk的路径通过软连接的方式指向/usr/java
# 建立/usr/java目录
mkdir -p /usr/java
# 通过ln命令将本地的jdk目录指向/usr/java下
ln -s /data/app/jdk1.8.0_212/ /usr/java/jdk1.8.0_212
在/etc/hosts文件末尾追加
192.168.0.250 CDH00
192.168.0.251 CDH01
192.168.0.252 CDH02
192.168.0.253 CDH03
# 关闭防火墙
systemctl stop firewalld
# 禁止防火墙开机自启
systemctl disable firewalld
vim /etc/selinux/config
SELINUX=enforcing—> SELINUX=disabled
由于CM会要求用户对Linux进行一些系统层面上的优化,主要为修改交换分区设置和禁用透明页,详情可参考官方文档:
https://docs.cloudera.com/documentation/enterprise/latest/topics/cdh_admin_performance.html
通过以下命令查看交换分区参数
cat /proc/sys/vm/swappiness
临时改动:
echo 0 > /proc/sys/vm/swappiness
永久变更:
vim /etc/sysctl.conf
末尾追加vm.swappiness=0
首先查看透明大页是否启用,[always] never表示已启用,always [never]表示已禁用
cat /sys/kernel/mm/transparent_hugepage/defrag
在/etc/rc.local增加下列两行
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 赋予权限
chmod +x /etc/rc.d/rc.local
# 创建/usr/share/java目录
mkdir -p /usr/share/java
# 解压缩jdbc
tar -xzvf mysql-connector-java-5.1.47.tar.gz
# 拷贝mysql jdbc jar包到/usr/share/java目录
cp mysql-connector-java-5.1.47.jar /usr/share/java/
# 将jar包的命名去掉版本号
mv mysql-connector-java-5.1.47.jar mysql-connector-java.jar
将配置好的CM虚拟机克隆成三台数据节点虚拟机,以下以vbox为例:
右键已经初步配置好的CDH00,选择复制(clone)
更改名称,MAC地址设定为所有网卡重新生成MAC地址
选择完全复制
等待片刻Vbox就可完成复制,依次分别生成CDH01、CDH02、CDH03。
复制好的虚拟机我们需要更好一下静态IP和hostname
# 通过修改配置文件/etc/hostname来修改hostnma
# 将CDH00更改为CDH01
vim /etc/hostname
# 通过修改配置文件
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
# 在CM节点CDH00上生成公钥文件id_rsa.pub
ssh-keygen -t rsa
# 将公钥追加到authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 修改权限,不加权限无法实现
chmod 600 ~/.ssh/authorized_keys
# 将ssh文件分发到其余节点中
scp -r ~/.ssh/ root@CDH01:~/.ssh/
各个节点尝试相互SSH验证是否可免密登录
安装ntp
yum -y install ntp
ntp主机配置
vim /etc/ntp.conf
CM节点:
#restrict default nomodify notrap nopeer noquery #注释掉
restrict CDH00 nomodify notrap nopeer noquery
restrict 192.168.0.0 mask 255.255.252.0 nomodify notrap
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
Fudge 127.127.1.0 stratum 10
其余数据节点:
#restrict default nomodify notrap nopeer noquery #注释掉
restrict CDH01 nomodify notrap nopeer noquery
restrict 192.168.0.0 mask 255.255.252.0 nomodify notrap
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server CDH00
Fudge CDH00 stratum 10
配置完成后重启ntp服务
重新启动 ntp 服务:service ntpd restart
设置开机自启:systemctl enable ntpd.service
校验ntp服务状态
ntpdc -c loopinfo #查看与时间同步服务器的时间偏差
ntpq -p #查看当前同步的时间服务器
ntpstat #查看状态
由于Centos7中有chronyd时间同步,开机自启会产生冲突这里将其禁止
systemctl disable chronyd
经过上述的安装准备,已经将集群四台服务器基础配置完成了,接下来对CM节点(CDH00)安装部署CM,通过CM部署大数据平台
# 查看本地mariadb
rpm -qa|grep mariadb
# 卸载mariadb
rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
# 解压mysql
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
# 初始化mysql,mysql的owner为mysql
mysqld --initialize --user=mysql
# 查看初始后生成的随机密码
cat /var/log/mysqld.log
在log中生成的随机密码如下(不同主机生成的不一样):
修改mysql管理者密码
# 设置mysql服务自启
systemctl start mysqld.service
# 重启mysqld
systemctl restart mysqld
# 登录mysql,修改管理者用户密码
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'toor';
其余配置
查看mysql的字符库,若server的字符库不是utf-8需要修改
SHOW VARIABLES like 'character%';
# 修改/etc/my.cnf配置文件
vim /etc/my.cnf
# 在 [mysqld] 下面加上这个配置
character-set-server=utf8
# 重启mysql
service mysqld restart
在CDH当中,需要创建9个数据库和对应用户,具体如下:
Service | Database | User | Password |
---|---|---|---|
Cloudera Manager Server | scm | scm | scm |
Activity Monitor | amon | amon | amon |
Reports Manager | rman | rman | rman |
Hue | hue | hue | hue |
Hive Metastore Server | metastore | hive | hive |
Sentry Server | sentry | sentry | sentry |
Cloudera Navigator Audit Server | nav | nav | nav |
Cloudera Navigator Metadata Server | navms | navms | navms |
Oozie | oozie | oozie | oozie |
创建database语句为:
create database scm default character set utf8 default collate utf8_general_ci;
grant all on scm.* to 'scm'@'%' identified by 'scm';
create database amon default character set utf8 default collate utf8_general_ci;
grant all on amon.* to 'amon'@'%' identified by 'amon';
create database rman default character set utf8 default collate utf8_general_ci;
grant all on rman.* to 'rman'@'%' identified by 'rman';
create database hue default character set utf8 default collate utf8_general_ci;
grant all on hue.* to 'hue'@'%' identified by 'hue';
create database metastore default character set utf8 default collate utf8_general_ci;
grant all on metastore.* to 'hive'@'%' identified by 'hive';
create database sentry default character set utf8 default collate utf8_general_ci;
grant all on sentry.* to 'sentry'@'%' identified by 'sentry';
create database nav default character set utf8 default collate utf8_general_ci;
grant all on nav.* to 'nav'@'%' identified by 'nav';
create database navms default character set utf8 default collate utf8_general_ci;
grant all on navms.* to 'navms'@'%' identified by 'navms';
create database oozie default character set utf8 default collate utf8_general_ci;
grant all on oozie.* to 'oozie'@'%' identified by 'oozie';
yum -y install httpd # 通过yum安装httpd
systemctl start httpd # 启动httpd服务
systemctl enable httpd.service 设置httpd服务开机自启
# 创建Cloudera Manager包yum源
mkdir -p /var/www/html/cloudera-repos/
# 将下载的cm包文件拷贝到目录下:
cp -r cm6.2.0 /var/www/html/cloudera-repos/
cd /var/www/html/cloudera-repos/cm6.2.0
# 安装createrepo
yum -y install deltarpm-*
yum -y install python-deltarpm-*
yum -y install createrepo-*
# 创建repodata:
createrepo ./
# 配置yum源
vim /etc/yum.repos.d/cloudera-manager.repo
# 键入以下
[cloudera-manager]
name=Cloudera Manager, Version yum
baseurl=http://CDH00/cloudera-repos/cm6.2.0
gpgcheck=0
enabled=1
# 重建yum
yum clean all
yum makecache
# 导入GPG key
rpm --import http://CDH00/cloudera-repos/cm6.2.0/RPM-GPG-KEY-cloudera
在CM节点上安装Cloudera Manager
yum -y install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
安装完成后在/opt目录下会生成cloudera目录
将下载好的组件parcel包移动到指定的目录
cp /data/packages/cdh6.2.0/parcel-6.2.0/* /opt/cloudera/parcel-repo/
cd /opt/cloudera/parcel-repo/
# 在移动后的目录校验shm
sha1sum CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel | awk '{print $1}' > CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha
# 对比下载的校验和
# 复制后的校验和
[root@CDH00 parcel-repo]# cat CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha
e9c8328d8c370517c958111a3db1a085ebace237
# 复制前的校验和
[root@CDH00 parcel-repo]# cat CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha1
e9c8328d8c370517c958111a3db1a085ebace237
执行初始化脚本:
# Cloudera Manager Server服务的mysql的数据库为scm,用户名scm,密码scm
# 执行初始化脚本:命令说明:脚本名 数据库类型 数据库名 用户名 密码
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm
# 完成后显示如下
[root@CDH00 java]# /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm
JAVA_HOME=/data/app/jdk1.8.0_212
Verifying that we can write to /etc/cloudera-scm-server
Creating SCM configuration file in /etc/cloudera-scm-server
Executing: /data/app/jdk1.8.0_212/bin/java -cp /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/java/postgresql-connector-java.jar:/opt/cloudera/cm/schema/../lib/* com.cloudera.enterprise.dbutil.DbCommandExecutor /etc/cloudera-scm-server/db.properties com.cloudera.cmf.db.
Tue Jun 23 12:02:10 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
[ main] DbCommandExecutor INFO Successfully connected to database.
All done, your SCM database is configured correctly!
做完以上步骤最好重启一次虚拟机使配置生效并且清楚一下内存。
在CDH00开启CM服务
service cloudera-scm-server start
# 可以通过查看scm服务器的log
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
经过一段时间,等待CM初始化完成后会出现:
2020-06-23 12:54:33,327 INFO WebServerImpl:org.eclipse.jetty.server.Server: Started @256805ms
2020-06-23 12:54:33,327 INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
输入http://192.168.0.250:7180(这里192.168.0.250是CM节点CDH00的ip地址)
输入用户名/密码:admin/admin进入配置页面
Accept License-点击接受
Select Edition-选择免费版本
给集群取一个名称
将四台虚拟机加入群集,这里直接搜索CDH0[0-3],点击搜索获取结果
配置Yum源地址:这里使用配置的本地地址即repo文件配置的地址:
http://CDH00/cloudera-repos/cm6.2.0
勾选下载的CDH版本:
本地下载的版本为cdh6.2.0.p0.967373所以这里选择cdh6.2.0.p0.967373
PS:如果不选择本地的版本包,他会通过在线方式下载,后续安装。。。自行理解
输入各主机的ssh登录账户和密码,这里输入root和密码;
在同时安装的数量这里可以根据自己的主机的配置灵活选择,这里安装的是4台主机组成的群集,
CDH00已经安装成功了,我们这里配置同时安装2台避免宿主机卡死。
PS:博主的电脑12G内存跑四台虚拟机的内存就94%占用率,自行理解。。。。
PS:另外可以自行在其余节点安装agent这样这一步就很快可以完成。
具体步骤为:
1.配置Yum源,配置一个新的repo文件从CDH00获取即可
vim /etc/yum.repos.d/cloudera-manager.repo
键入以下
[cloudera-manager]
name=Cloudera Manager, Version yum
baseurl=http://CDH00/cloudera-repos/cloudera-repos-6.2.0
gpgcheck=0
enabled=1
2.重新加载yum
yum clean all
yum makecache
3.安装agent
yum install cloudera-manager-daemons cloudera-manager-agent
等待各主机Agents的安装,这里考验的是主机的带宽和性能了。。。
由于我们已经配置好了Parcels从CDH00获取,这里就免去了在线下载的过程,等待完成即可。
在这个过程会检查一下群集是否会满足CDH的要求,一般是交换区设置和禁用透明页的Linux底层优化没有做,自行返回上面步骤解决就行。
如果测试结果问题不大可以勾选"I understand the risks, let me continue with cluster creation."进入下一步。
选择自定义安装,一般为了简单,选择HDFS、YARN、ZOOKEEPER后续服务再进行添加。
自定义角色分配,一般NameNode和SecondaryNameNode分开部署,DataNode选择所有节点,Zookeeper选择奇数个部署于除了NN的节点上。
数据库设置即配置先前的9个CDH必要的数据库,将数据库名和对应的用户名/密码填入即可。
按照默认即可
等待各组件安装初始化,CDH的好处就是免去了源生态安装的各种配置的繁琐。
这样就是实现了CDH6.2.0平台的搭建。