如何在RELS8.4上安装CDP-PvC Base 7.1.8并启用Auto-TLS

文档编写目的

CDP PVC BASE7.1.8是Cloudera与Hortonworks合并后,第一个融合CDH和HDP所有组件的on-premise并且可用于生产环境的新功能版本,CDP PvC Base主要由Cloudera Runtime构成,Cloudera Runtime由超过40个开源项目组成,当然CDP PvC Base还包括其它功能如管理功能Cloudera Manager,Key Management,专业支持等。Cloudera Runtime的主要组件版本如下图所示:

Component

Version

Apache Arrow

0.8.0.7.1.8.0-801

Apache Atlas

2.1.0.7.1.8.0-801

Apache Calcite

1.19.0.7.1.8.0-801

Apache Avro

1.8.2.7.1.8.0-801

Apache Hadoop (Includes YARN and HDFS)

3.1.1.7.1.8.0-801

Apache HBase

2.4.6.7.1.8.0-801

Apache Hive

3.1.3000.7.1.8.0-801

Apache Impala

4.0.0.7.1.8.0-801

Apache Kafka

3.1.1.7.1.8.0-801

Apache Knox

1.3.0.7.1.8.0-801

Apache Kudu

1.15.0.7.1.8.0-801

Apache Livy

0.6.0.7.1.8.0-801

Apache MapReduce

3.1.1.7.1.8.0-801

Apache Ozone

1.2.0.7.1.8.0-801

Apache Oozie

5.1.0.7.1.8.0-801

Apache ORC

1.5.1.7.1.8.0-801

Apache Parquet

1.10.99.7.1.8.0-801

Apache Phoenix

5.1.1.7.1.8.0-801

Apache Ranger

2.3.0.7.1.8.0-801

Apache Solr

8.4.1.7.1.8.0-801

Apache Spark

2.4.8.7.1.8.0-801

Apache Sqoop

1.4.7.7.1.8.0-801

Apache Tez

0.9.1.7.1.8.0-801

Apache Zeppelin

0.8.2.7.1.8.0-801

Apache ZooKeeper

3.5.5.7.1.8.0-801

Other Components

Component

Version

Cruise Control

2.5.85.7.1.8.0-801

Data Analytics Studio

1.4.2.7.1.8.0-801

GCS Connector

2.1.2.7.1.8.0-801

HBase Indexer

1.5.0.7.5.0-141

Hue

4.5.0.7.1.8.0-801

Search

1.0.0.7.1.8.0-801

Schema Registry

0.10.0.7.1.8.0-801

Streams Messaging Manager

2.3.0.7.1.8.0-801

Streams Replication Manager

1.1.0.7.1.8.0-801

Connectors and Encryption Components

Component

Version

HBase connectors

1.0.0.7.1.8.0-801

Hive Meta Store (HMS)

1.0.0

Hive on Tez

1.0.0

Hive Warehouse Connector

1.0.0.7.1.8.0-801

Spark Atlas Connector

0.1.0.7.1.8.0-801

Spark Schema Registry

1.1.0.7.1.8.0-801

本文档主要描述如何在Redhat8.4安装CDP PvC Base7.1.8。CDP PvC Base的安装步骤和CDH的安装步骤一致,主要包括以下四部分:

  1. 安全前置准备,包括安装操作系统、关闭防火墙、同步服务器时钟等;
  2. 外部数据库如PostgreSQL安装
  3. 安装Cloudera Manager;
  4. 安装Cloudera Runtime集群;

前提条件

请务必注意CDP PvC Base的安装前置条件,请到CDP Private Cloud Base Requirements and Supported Versions和Cloudera产品支持矩阵查询对应版本的前提条件。对应CDP PvC Base7.1.8来讲,前提条件包括如下:

硬件需求

要评估集群的硬件和资源分配,您需要分析要在集群上运行的工作负载的类型,以及将用于运行这些工作负载的运行时组件。您还应该考虑要存储和处理的数据大小,工作负载的频率,需要运行的并发作业的数量以及应用程序所需的速度。

创建集群的体系结构时,需要在集群的主机之间分配Cloudera Manager和Runtime角色,以最大程度地利用资源。Cloudera提供了一些有关如何向集群主机分配角色的准则。请参阅推荐的集群主机和角色分配。将多个角色分配给主机后,将主机上每个角色的总资源需求(内存,CPU,磁盘)加在一起即可确定所需的硬件。

关于特定组件的硬件需求的更多信息,请参考硬件需求

操作系统

目前支持的操作系统如下:

Name

Version

RHEL

8.6, 8.4,8.2,7.9 FIPS ,7.9,7.8 FIPS ,7.8,7.7,7.6

CentOS

8.6, 8.4,8.2,7.9 FIPS ,7.9,7.8 FIPS ,7.8,7.7,7.6

Oracle

8.6, 8.4 ,8.2 ,7.9 ,7.8 ,7.7 ,7.6

Ubuntu

20.04,18.04

SLES

12SP5

请到Cloudera的产品支持矩阵查看。

软件依赖关系

  • Python - 下面提到了不同 CDP 组件的 Python 依赖项:

Cloudera Manager

Cloudera Manager 在支持的操作系统上支持对应系统的Python版本,不支持 Python 3。

Hue

Hue 需要 Python 3.8,不支持 Python 2。

Spark

Spark 2.4 支持 Python 2.7 和 3.4-3.7。

Spark 3.0 支持 Python 2.7 和 3.4 及更高版本,但不推荐使用对 Python 2 和 3.4 到 3.5 的支持。

Spark 3.1 支持 Python 3.6 及更高版本。

如果默认情况下未选择正确级别的 Python, 请在运行pyspark命令之前将PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON 环境变量设置为指向正确的 Python 可执行文件 。

  • Perl - Cloudera Manager 需要 perl。
  • python-psycopg2 - Cloudera Manager 7 依赖于包python-psycopg2。Cloudera Runtime 7 中的 Hue 需要psycopg2比 Cloudera Manager 依赖项更高的版本。
  • iproute 包- CDP 私有云基础依赖于iproute包。任何运行 Cloudera Manager Agent 的主机都需要该软件包。所需版本因操作系统而异:

操作系统

iproute版本

兼容 RHEL 7

iproute-3.10

文件系统要求

Hadoop分布式文件系统(HDFS)设计为在操作系统中的基础文件系统之上运行。Cloudera建议您使用在支持的操作系统上测试的以下两个文件系统之一:

  • ext3:这是用于HDFS的最受测试的基础文件系统。
  • ext4:ext3的此可扩展扩展在最新的Linux版本中受支持。

Cloudera不支持从ext3到ext4的就地升级。Cloudera建议您在将磁盘用作数据目录之前将其格式化为ext4。

  • XFS:这是RHEL 7中的默认文件系统。
  • S3:亚马逊简单存储服务

Kudu文件系统要求-Kudu在ext4和XFS上受支持。Kudu需要支持打孔(hole punching)的内核版本和文件系统。

文件存取时间

Linux文件系统保留访问每个文件的时间的元数据的记录。这意味着即使读取也会导致对磁盘的写入。为了加快文件读取速度,Cloudera建议您atime使用以下noatime 选项中的mount选项禁用名为的选项/etc/fstab:

代码语言:javascript
复制
/dev/sdb1 /data1 ext4 defaults,noatime 0

应用更改而无需重新启动:

代码语言:javascript
复制
mount -o remount /data1

文件系统挂载选项

文件系统mount选项具有一个sync允许您同步写入的选项。

使用sync文件系统挂载选项会降低将数据写入磁盘的服务的性能,例如HDFS/YARN/Kafka和Kudu。在CDH中,大多数写入已被复制。因此,对磁盘的同步写入是不必要的、昂贵的,并且不能显着提高稳定性。

即使使用分层存储功能,也不支持将NFS和NAS选项用作DataNode Data Directory挂载。

文件系统需求

Cloudera Manager会自动在/etc/security/limits.conf中设置nproc配置,但是该配置可以被/etc/security/limits.d/中的单个文件覆盖。这可能会导致Apache Impala和其他组件出现问题。

确保将nproc限制设置得足够高,例如 65536或262144。

Kudu需要nscd

尽管不是严格要求,但强烈建议您为Kudu使用nscd同时缓存DNS名称解析和静态名称解析。

外部数据库支持

有关支持的数据库的详细信息,请参阅Cloudera 支持矩阵。

表1. 对CDP PvC Base7.1.8的数据库支持

Name

Version

OracleDB

19.9,19,12,RAC19

PostgreSQL

14,13,12,11,10

MySQL

8.0,5.7

MariaDB

10.6,10.5,10.4,10.3,10.2

Cloudera Manager和Runtime随附有嵌入式PostgreSQL数据库,供在非生产环境中使用。生产环境不支持嵌入式PostgreSQL数据库。对于生产环境,必须将集群配置为使用专用的外部数据库。

安装数据库后,升级到最新补丁并应用适当的更新。可用更新可能特定于安装它的操作系统。

注意:

  • Cloudera建议在大多数情况下,使用与集群节点的操作系统相对应的数据库的默认版本。如果选择使用默认数据库以外的数据库,请参考操作系统的文档以验证支持。
  • Data Analytics Studio需要PostgreSQL 9.6,而RHEL 7.6提供PostgreSQL 9.2。
  • 对所有自定义数据库使用UTF8编码。
  • 对于MySQL 5.7,必须安装MySQL-shared-compat或 MySQL-shared软件包。这是Cloudera Manager Agent安装所必需的。
  • 不支持基于MySQL GTID的复制。
  • 支持MySQL的社区版和企业版,以及由AWS RDS服务配置的MySQL。
  • 从CDH 5升级到CDH 6之前,请COMPATIBLE使用以下SQL查询检查Oracle数据库中初始化参数的值 :

SELECT name, value FROM v$parameter WHERE name = 'compatible'

默认值为12.2.0。如果参数的值不同,则可以将其设置为默认值,如《Oracle数据库升级指南》中所示。

RDBMS高可用性支持

Cloudera的各种组件都依赖RDBMS服务作为关键基础架构。您可能需要Cloudera组件来支持在使RDBMS服务具有高可用性的环境中进行部署。RDBMS的高可用性(HA)解决方案是特定于实现的,并且可以在Cloudera组件中创建约束或行为更改。

本节阐明了支持状态,并确定了HA部署的已知问题和限制。

高可用性与负载平衡

了解HA和负载平衡之间的区别对于Cloudera组件很重要,Cloudera组件旨在假定服务由单个RDBMS实例提供。负载平衡可同时在多个RDBMS服务之间分配操作,而HA则专注于服务的连续性。负载平衡部署通常用作高可用性策略的一部分,以克服高可用性环境中监视和故障转移管理的需求。尽管实施起来不太容易,但是负载平衡的部署需要针对特定技术的行为和限制量身定制的应用程序。

支持声明: Cloudera组件并非设计用于并且不支持任何类型的负载平衡部署。任何涉及多个活动RDBMS服务的HA策略都必须确保在任何给定时间将所有连接路由到单个RDBMS服务,而不管供应商或HA实施/技术如何。

通用高可用性支持

Cloudera支持各种RDBMS选项,每个选项都有实现HA的多种可能策略。Cloudera无法合理地对每个RDBMS的每种策略进行测试和认证。Cloudera希望RDBMS的HA解决方案对于Cloudera软件是透明的,因此不受Cloudera支持和调试。客户有责任供应、配置和管理RDBMS HA部署,以便Cloudera软件在与单个非HA服务进行接口时表现出与众不同的行为。当集群启用了HA时,Cloudera将支持并帮助客户解决问题。在诊断Cloudera组件中与数据库相关的问题时,客户可能需要临时禁用或绕过HA机制以进行故障排除。如果发现了与HA相关的问题,则客户有责任与数据库供应商联系,以便找到该问题的解决方案。

支持声明: Cloudera支持可能要求客户暂时绕过HA层并直接连接到受支持的RDBMS后端以解决问题。客户DBA员工有责任解决仅通过HA层连接时发现的问题。

JDK

有关受支持的 JDK 的详细信息,请参阅Cloudera 支持矩阵。

表 1.经过测试和推荐的 Azul JDK 版本

Azul JDK 版本

笔记

8.56.0.21

最低要求版本

11.50.19

表 2.经过测试和推荐的 Oracle JDK 版本

Oracle JDK 版本

笔记

1.8u181

最低要求版本

11.0.10+8

表 3.经过测试和推荐的 OpenJDK 版本

OpenJDK 版本

笔记

1.8u232

最低要求/测试的最新版本

11.0.4-+11

仅支持64位JDK。

除非明确排除,否则Cloudera支持从引入该支持的版本开始对主要JDK版本的更高版本的更新。当安全受到威胁时,Cloudera会排除或删除对某些Java更新的支持。

不支持在不同JDK版本上的同一集群中运行Runtime节点。所有集群主机必须使用相同的JDK更新级别。

网络和安全要求

Cloudera Runtime 和 Cloudera Manager 支持的传输层安全版本,对于支持的组件参考TLS支持的组件列表。

Cloudera Manager部署中的主机必须满足以下网络和安全要求:

网络协议支持

CDH需要IPv4。不支持IPv6,必须将其禁用。

多宿主支持

除经过特殊认证的Cloudera合作伙伴设备之外,CDH或Cloudera Manager不支持Multihoming。Cloudera发现,当前的Hadoop架构与现代网络基础架构和安全性实践相结合,消除了对多宿主的需求。但是,多宿主在设备形式上内部有利于利用高带宽InfiniBand互连。

尽管产品的某些子区域可能适用于不受支持的自定义多宿主配置,但多宿主存在一些已知问题。此外,由于Cloudera认证的合作伙伴设备以外的测试矩阵未涵盖多宿主,因此可能会出现未知问题。

静态数据加密需要足够的熵以确保随机性。

  • 集群主机必须具有有效的网络名称解析系统和格式正确的 /etc/hosts文件。所有集群主机必须已通过DNS正确配置了正向和反向主机解析。这些/etc/hosts文件必须:
    • 包含有关所有主机的主机名和IP地址的一致信息
    • 不包含大写主机名
    • 不包含重复的IP地址

/etc/hosts在配置DNS 时或配置DNS时,集群主机不得使用别名。格式正确的/etc/hosts文件应类似于以下示例:

代码语言:javascript
复制
127.0.0.1 localhost.localdomain localhost
192.168.1.1 cluster-01.example.com cluster-01
192.168.1.2 cluster-02.example.com cluster-02
192.168.1.3 cluster-03.example.com cluster-03
  • 在大多数情况下,运行安装或升级向导时,Cloudera Manager Server必须具有对集群主机的SSH访问权限。您必须使用root帐户或具有无密码sudo权限的帐户登录。为了在安装和升级过程中进行身份验证,您必须输入密码或为root或sudo用户帐户上载公钥和私钥对。如果要使用公用密钥和专用密钥对,则在使用Cloudera Manager之前,必须在集群主机上安装公用密钥。

Cloudera Manager仅在初始安装或升级期间使用SSH。设置集群后,您可以禁用root SSH访问或更改root密码。Cloudera Manager不保存SSH凭据,安装完成后,所有凭据信息将被丢弃。

  • Cloudera Manager Agent运行root时将确保创建所需的目录,并且进程和文件由适当的用户(例如hdfs和mapred 用户)拥有。
  • 增强安全性的Linux(SELinux)不得阻止Cloudera Manager或运行时操作。

注意

在启用了安全性增强的Linux(SELinux)且处于enforcing模式下的平台上支持Cloudera Enterprise 。Cloudera不负责SELinux策略的开发,支持或实施。如果在启用SELinux的情况下运行Cloudera软件时遇到问题,请与操作系统提供商联系以寻求帮助。

如果您在enforcing模式下使用SELinux,则permissive在调查报告的问题时,Cloudera支持可以要求您禁用SELinux或将模式更改 为排除SELinux。

  • 必须禁用或配置防火墙(例如iptables和firewalld),以允许访问Cloudera Manager,运行时和相关服务使用的端口。
  • 对于RHEL和CentOS,/etc/sysconfig/network每个主机上的文件必须包含正确的主机名。
  • Cloudera Manager和Runtime使用多个用户帐户和组来完成其任务。用户帐户和组的集合根据您选择安装的组件而有所不同。不要删除这些帐户或组,也不要修改其权限。确保没有现有系统阻止这些帐户和组正常运行。例如,如果您有脚本删除不在白名单中的用户帐户,则将这些帐户添加到允许的帐户列表中。

更多详细信息参考:网络和安全要求

测试环境

  1. Cloudera Manager版本为7.7.1
  2. Cloudera Runtime的版本为7.1.8
  3. Redhat 8.4
  4. OpenJDK 1.8.0_141
  5. MariaDB 10.2
  6. root用户安装(非root用户安装也是没有任何问题的,需要sudo权限)
  7. 5节点

前置准备

hostname及hosts配置

集群中各个节点之间能互相通信使用静态IP地址。IP地址和主机名通过/etc/hosts配置,主机名通过/etc/hostname进行配置。参考:配置网络名

以cm节点(172.27.103.129)为例:

hostname配置

/etc/hostname文件如下:

代码语言:javascript
复制
[root@grocery-1 ~]# cat /etc/hostname
ccycloud-1.grocery.root.hwx.site

或者你可以通过命令修改立即生效

代码语言:javascript
复制
[root@grocery-1 ~]# hostnamectl set-hostname ccycloud-1.grocery.root.hwx.site

hosts配置

/etc/hosts文件如下:

代码语言:javascript
复制
[root@ccycloud-1 ~]# cat /etc/hosts
127.0.0.1  localhost
::1  localhost ip6-localhost ip6-loopback
fe00::0  ip6-localnet
ff00::0  ip6-mcastprefix
ff02::1  ip6-allnodes
ff02::2  ip6-allrouters
172.27.188.66 ccycloud-1.grocery.root.hwx.site ccycloud-1
[root@ccycloud-1 ~]#

以上两步操作,在集群中其它节点做相应配置。确认需要安装的所有主机的hosts文件:

这里使用DNS,所有hosts文件中没有配置所有节点的IP地址。如果使用hosts文件,则需要将所有节点的IP地址配置到/etc/hosts文件中。

配置互信

在管理节点上生成密钥,并配置对所有节点的互信。

生成密钥:

代码语言:javascript
复制
[root@ccycloud-1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:JJhXYOx4GpwZ4ofeaoUHPSVlRFov3ywhrCEwE1u9Cfg root@ccycloud.grocery.root.hwx.site
The key's randomart image is:
+---[RSA 2048]----+
|=o.. =O..        |
|.*o +Ooo         |
|.o.*=@* +        |
|  E.%+o* +       |
| . =.=  S o      |
|  o =    .       |
|   +             |
|  o              |
| .               |
+----[SHA256]-----+
[root@ccycloud-1 ~]#

对于需要交互输入的部分,输入回车即可(企业如果有内部要求,则按照要求进行)

将生成的密钥分发给所有节点,配置对所有节点的互信。

代码语言:javascript
复制
for i in {1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub ccycloud-$i.grocery.root.hwx.site ; done

交互式输入yes和对应节点的访问密码即可。

检查互信

主节点对其他节点的互信完成后,在主节点上执行一个在所有节点上都执行的命令,来进行互信验证,确认不需要输入密码可以访问其他节点。

代码语言:javascript
复制
[root@ccycloud-1 ~]# for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site " hostname -A" ; done
ccycloud-1.grocery.root.hwx.site
ccycloud-2.grocery.root.hwx.site
ccycloud-3.grocery.root.hwx.site
ccycloud-4.grocery.root.hwx.site
ccycloud-5.grocery.root.hwx.site
[root@ccycloud-1 ~]#

安装其他工具软件

操作节点安装以下工具软件

代码语言:javascript
复制
yum -y install createrepo wget unzip

安装http服务

安装httpd服务

代码语言:javascript
复制
sudo yum -y install httpd

修改配置文件

修改/etc/httpd/conf/httpd.conf配置文件,在<IfModule mime_module>中修改以下内容

代码语言:javascript
复制
AddType application/x-gzip .gz .tgz .parcel

可以使用下面的命令直接替换

代码语言:javascript
复制
sed -i 's/AddType application\/x-gzip .gz .tgz/AddType application\/x-gzip .gz .tgz .parcel/' /etc/httpd/conf/httpd.conf

4.保存httpd.conf的修改,并重启httpd服务

设置并启动httpd服务

代码语言:javascript
复制
systemctl enable httpd
systemctl start httpd
systemctl status httpd

通过浏览器访问http://ccycloud-1.grocery.root.hwx.site/ 测试,如果可以正常访问HTTP服务即可,如下图所示。

配置操作系统repo

如果系统已经挂载了操作系统的repo,则跳过该步。否则需要现在操作机上配置操作系统的镜像。

挂载操作系统iso文件

注意挂载对应的操作系统版本。

代码语言:javascript
复制
sudo mkdir /media/DVD1
sudo mount -o loop CentOS-7-x86_64-DVD-1611.iso /media/DVD1/

配置操作系统repo

代码语言:javascript
复制
$ sudo vim /etc/yum.repos.d/local_os.repo
[local_iso]
name=CentOS-$releasever - Media
baseurl=file:///media/DVD1
gpgcheck=0
enabled=1
$ sudo yum repolist

重制OS的repo

安装完httpd后,重新制作操作系统repo,换成http的方式方便其它服务器也可以访问

代码语言:javascript
复制
[ec2-user@ip-172-31-2-159 ~]$ sudo mkdir /var/www/html/iso
[ec2-user@ip-172-31-2-159 ~]$ sudo scp -r /media/DVD1/* /var/www/html/iso/
[ec2-user@ip-172-31-2-159 ~]$ sudo vim /etc/yum.repos.d/os.repo
[osrepo]
name=os_repo
baseurl=http://grocery-1.vpc.cloudera.com/iso/
enabled=true
gpgcheck=false
[ec2-user@ip-172-31-2-159 ~]$ sudo yum repolist

OS的Repo分发

将操作系统的repo文件分发到其他机器上。

代码语言:javascript
复制
for i in {2..5}; do scp /etc/yum.repos.d/os.repo grocery-$i.vpc.cloudera.com:/etc/yum.repos.d/os.repo; done

升级软件和系统内核

使用下面的命令升级所有包同时也升级软件和系统内核。如果升级系统内核报错,则跳过该步。

代码语言:javascript
复制
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site " yum -y update " ; done

禁用SELinux

在所有节点执行setenforce 0 命令,此处使用批处理shell执行:

代码语言:javascript
复制
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site " setenforce 0  " ; done

修改配置文件来关闭SELinux。

代码语言:javascript
复制
#关闭selinux
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site 'sed –i "7s/enforcing/disabled/g" /etc/selinux/config '  ;done

也可以手工修改/etc/selinux/config文件如下:

代码语言:javascript
复制
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

关闭防火墙

集群所有节点执行 systemctl stop命令,此处通过shell批量执行命令如下:

代码语言:javascript
复制
##关闭防火墙
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'systemctl disable firewalld' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'systemctl stop firewalld.service' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'systemctl list-unit-files | grep firewalld' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'systemctl status firewalld.service' ; done

集群时钟同步

在Redhat7.x的操作系统上,已经默认的安装了chrony,也可以直接使用chrony进行时钟同步。我们这里使用chrony来配置各台机器的时钟同步,将cm(172.27.161.0)服务作为本地chronyd服务器,允许同步的网段为(172.27.0.0/16)其它5台服务器与其保持同步。

所有机器安装chrony和ntpdate

代码语言:javascript
复制
##设置时区和时钟同步
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site 'yum -y install chrony'  ;done
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site 'timedatectl set-timezone Asia/Shanghai' ; done
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site 'chkconfig --level 345 chronyd on' ; done

Chrony服务器配置时钟与自己同步

如果企业有自己的时钟服务器,则都同步企业自身的时钟服务器,否则同步CM的时钟。

服务器端修改2处:server和allow部分。

代码语言:javascript
复制
[root@grocery-1 ~]# vim /etc/chrony.conf
server ccycloud-1.grocery.root.hwx.site iburst
#allow 192.168.0.0/16
allow 172.27.0.0/16
代码语言:javascript
复制
[root@ccycloud-1 ~]# egrep -v "^#|^$" /etc/chrony.conf
[root@ccycloud-1 ~]# egrep -v "^#|^$" /etc/chrony.conf
server ccycloud-1.grocery.root.hwx.site iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 172.27.0.0/16
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony

开启同步

代码语言:javascript
复制
systemctl enable chronyd
systemctl restart chronyd
# 查看时间同步状态
timedatectl status
# 开启网络时间同步
timedatectl set-ntp true

集群其它节点配置客户端,配置找cm机器去同步

代码语言:javascript
复制
vi /etc/chrony.conf,修改两处:server和allow部分
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server ccycloud-1.grocery.root.hwx.site iburst

Allow NTP client access from local network.

allow ccycloud-1.grocery.root.hwx.site

开启同步

代码语言:javascript
复制
systemctl enable chronyd
systemctl restart chronyd

查看时间同步状态

timedatectl status

开启网络时间同步

timedatectl set-ntp true

批量开启同步命令如下:

代码语言:javascript
复制
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site ' systemctl enable chronyd'  ;done
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site ' systemctl restart chronyd' ;done
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site ' timedatectl status' ;done
for i in {1..6}; do ssh ccycloud-$i.grocery.root.hwx.site ' timedatectl set-ntp true' ;done

验证始终同步

等待几分钟后,在所有节点执行下面命令,如下使用脚本批量执行

查看时间同步源:

代码语言:javascript
复制
chronyc sources -v

查看时间同步源状态:

代码语言:javascript
复制
chronyc sourcestats -v

设置硬件时间

硬件时间默认为UTC:

代码语言:javascript
复制
timedatectl set-local-rtc 1

启用NTP时间同步:

代码语言:javascript
复制
timedatectl set-ntp yes

校准时间服务器:

代码语言:javascript
复制
chronyc tracking

左边出现*号表示同步成功。

设置swap

管理节点执行

代码语言:javascript
复制
[root@ccycloud-1 ~]# #设置vm.swappiness
[root@ccycloud-1 ~]# for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "vm.swappiness = 1" >> /etc/sysctl.conf' ; done
[root@ccycloud-1 ~]# for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'sysctl vm.swappiness=1' ; done

设置透明大页面

管理节点执行

代码语言:javascript
复制
#设置透明大页面
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.d/rc.local' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'chmod +x /etc/rc.d/rc.local' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'cat /etc/rc.d/rc.local' ; done

关闭iptables

管理节点执行:

代码语言:javascript
复制
#关闭iptables
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'systemctl stop iptables' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'chkconfig iptables off' ; done

设置limits

管理节点执行:

代码语言:javascript
复制
#设置limits
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "hdfs - nofile 32768" >> /etc/security/limits.conf' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "mapred - nofile 32768" >> /etc/security/limits.conf' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "hbase - nofile 32768" >> /etc/security/limits.conf' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "hdfs - noproc 32768" >> /etc/security/limits.conf' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "mapred - noproc 32768" >> /etc/security/limits.conf' ; done
for i in {1..5}; do ssh ccycloud-$i.grocery.root.hwx.site 'echo "hbase - noproc 32768" >> /etc/security/limits.conf' ; done

安装MariaDB

添加MariaDB的yum源

代码语言:javascript
复制
## MariaDB 10.5
cat - >/etc/yum.repos.d/MariaDB.repo <<EOF
[mariadb]
name = MariaDB
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.5/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

执行如下:

代码语言:javascript
复制
# 检查是否有mariaDB源
[root@ccycloud-1 ~]# yum repolist enabled | grep MariaDB
Failed to set locale, defaulting to C
mariadb MariaDB 95+4
[root@ccycloud-1 ~]#

安装MariaDB服务端和客户端

代码语言:javascript
复制
yum install -y mariadb-server

修改MariaDB的配置文件

代码语言:javascript
复制
cat  > /etc/my.cnf <<EOF
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation = READ-COMMITTED

Disabling symbolic-links is recommended to prevent assorted security risks;

to do so, uncomment this line:

symbolic-links = 0

Settings user and group are ignored when systemd is used.

If you need to run mysqld under a different user or group,

customize your systemd unit file for mariadb according to the

instructions in http://fedoraproject.org/wiki/Systemd

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

#In later versions of MariaDB, if you enable the binary log and do not set
#a server_id, MariaDB will not start. The server_id must be unique within
#the replicating group.
server_id=1

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

include all files from the config directory

!includedir /etc/my.cnf.d
EOF

额外参数设置

如果包含HUE数据库,则my.cnf文件中再增加下面三个参数

  1. 确保该bind-address属性设置为 0.0.0.0或在默认值的情况下被注释掉。
代码语言:javascript
复制
bind-address=0.0.0.0
  1. 确保该default-storage-engine属性设置为 innodb。
代码语言:javascript
复制
default-storage-engine=innodb
  1. 确保该sql_mode属性设置为 STRICT_ALL_TABLES避免在迁移期间截断列。
代码语言:javascript
复制
sql_mode=STRICT_ALL_TABLES
  1. 保存文件并退出。
  1. 重新启动数据库服务器。

启动MariaDB数据库

代码语言:javascript
复制
echo "--Enable and start MariaDB"
systemctl enable mariadb
systemctl start mariadb

运行/usr/bin/mysql_secure_installation以设置 MariaDB 根密码和其他与安全相关的设置。在新安装中,root密码为空。当系统提示您输入 root 密码时,按 Enter键。对于其余提示,请输入下面以 粗体列出的响应:

代码语言:javascript
复制
sudo /usr/bin/mysql_secure_installation
[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] Y
New password:
Re-enter new password:
[...]
Remove anonymous users? [Y/n] Y
[...]
Disallow root login remotely? [Y/n] N
[...]
Remove test database and access to it [Y/n] Y
[...]
Reload privilege tables now? [Y/n] Y
[...]
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

创建MariaDB数据库

代码语言:javascript
复制
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE efm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON efm.* TO 'efm'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE nifireg DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nifireg.* TO 'nifireg'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE registry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON registry.* TO 'registry'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE streamsmsgmgr DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON streamsmsgmgr.* TO 'streamsmsgmgr'@'%' IDENTIFIED BY 'cloudera';

CREATE DATABASE ranger DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON ranger.* TO 'ranger'@'%' IDENTIFIED BY 'cloudera';

安装jdbc驱动

从网上下载MySQL的jdbc驱动,并进行解压:

代码语言:javascript
复制

#创建jdbc存放目录

代码语言:javascript
复制
for i in {1..6}; do ssh ccycloud-i.grocery.root.hwx.site &#39;mkdir -p /usr/share/java/&#39; ; done</code></pre></div></div><p>#将jdbc拷贝到所有节点的对应目录</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">for i in {1..6}; do scp ~/mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar  ccycloud-i.grocery.root.hwx.site:/usr/share/java/mysql-connector-java.jar; done

安装PostgreSQL

如果使用MariaDB,则跳过PostgreSQL的部分。PostgreSQL数据库的安装和部署参考:https://docs.cloudera.com/cdp-private-cloud-base/latest/installation/topics/cdpdc-install-config-postgresql-for-cdp.html

下载并安装yum源

https://yum.postgresql.org/上下载PostgreSQL10的yum源,

从10进去后,选择对应的操作系统版本:

也可以将对应的链接保存,通过wget命令下载:

安装PG的yum源

代码语言:javascript
复制
rpm -ivh pgdg-redhat-repo-latest.noarch.rpm

查看PG的yum源

代码语言:javascript
复制
ls -lrt /etc/yum.repos.d/
代码语言:javascript
复制
yum list postgresql*

安装PostgreSQL

我们这里安装PostgreSQL10的数据库版本,安装命令如下:

代码语言:javascript
复制
sudo yum -y install postgresql10-server

安装psycopg2的Python包

在Runtime 7中,Hue需要2.7.5或更高版本的psycopg2 Python软件包才能连接到PostgreSQL数据库。该psycopg2软件包会作为Cloudera Manager Agent的依赖项自动安装,但是安装的版本通常低于2.7.5。

如果要安装Runtime 7并将PostgreSQL用于Hue数据库,则必须psycopg2在所有Hue主机上安装 2.7.5或更高版本,如下所示。这些示例安装版本2.7.5:

  1. 安装python-pip 软件包:
代码语言:javascript
复制
sudo yum  -y install python-pip
for i in {1..4}; do ssh grocery-$i.vpc.cloudera.com " sudo yum -y install python-pip" ; done
  1. 升级pip版本
代码语言:javascript
复制
pip install --upgrade pip
for i in {1..4}; do ssh grocery-$i.vpc.cloudera.com " pip install --upgrade pip " ; done
  1. psycopg2使用pip以下命令安装2.7.5 :
代码语言:javascript
复制
sudo pip install psycopg2==2.7.5 --ignore-installed
for i in {1..4}; do ssh grocery-$i.vpc.cloudera.com " sudo pip install psycopg2==2.7.5 --ignore-installed " ; done

配置和启动PostgreSQL服务器

默认情况下,PostgreSQL仅接受回送接口上的连接。您必须重新配置PostgreSQL,以接受来自托管要为其配置数据库的服务的主机的完全限定域名(FQDN)的连接。如果不进行这些更改,则服务将无法连接并使用它们所依赖的数据库。

如果要更改现有数据库,请确保在继续之前停止使用该数据库的所有服务。

  1. 确保将LC_ALL其设置为en_US.UTF-8并初始化数据库,如下所示:

RHEL 7:

代码语言:javascript
复制
echo 'LC_ALL="en_US.UTF-8"' >> /etc/locale.conf
/usr/pgsql-10/bin/postgresql-10-setup initdb
  1. 启用MD5身份验证。编辑pg_hba.conf,通常在/var/lib/pgsql/data或/etc/postgresql/<version>/main中找到。

添加以下行:

代码语言:javascript
复制
host all all 127.0.0.1/32 md5

如果默认pg_hba.conf文件包含以下行:

代码语言:javascript
复制
host all all 127.0.0.1/32 ident

那么必须在该行之前插入上面显示的host指定md5身份验证的行。否则,运行脚本时可能会导致身份验证错误。

简单点可以允许所有机器通过md5方式访问。

您可以修改上面显示的行的内容以支持不同的配置。

  1. 配置设置以确保您的系统按预期运行。在/var/lib/pgsql/data/postgresql.conf或 /var/lib/postgresql/data/postgresql.conf文件中更新这些设置。设置因集群大小和资源而异,如下所示:
  • 中小型集群-将以下设置视为起点。如果资源有限,请考虑进一步减小缓冲区大小和检查点段。根据每个主机的资源利用率,可能需要进行持续的调整。例如,如果Cloudera Manager Server与其他角色在同一主机上运行,则可以接受以下值:
    • max_connection-通常,允许主机上的每个数据库最大100个连接,然后添加50个额外的连接。如连接设置中所述,您可能必须增加可用于PostgreSQL的系统资源。
    • shared_buffers -256MB(PG10无此参数)
    • wal_buffers -8MB
    • checkpoint_segments - 16(PG10无此参数)
    • checkpoint_completion_target - 0.9
    • listen_addresses = '*'
  1. 配置PostgreSQL服务器以在启动时启动。
代码语言:javascript
复制
sudo systemctl enable postgresql-10
  1. 重新启动PostgreSQL数据库:
代码语言:javascript
复制
sudo systemctl restart postgresql-10

创建数据库

以下组件需要数据库:

  • Cloudera Manager Server
  • Cloudera Management Service roles:
  • Reports Manager
  • Hue
  • Each Hive metastore
  • Oozie
  • Data Analytics Studio
  • Ranger

必须将数据库配置为支持PostgreSQL UTF8字符集编码。

记录您输入的数据库名称,用户名和密码的值。Cloudera Manager安装向导需要此信息才能正确连接到这些数据库。

注意:

要使用DAS,请安装PostgreSQL数据库9.6版。

步骤:

  1. 连接到PostgreSQL:
代码语言:javascript
复制
sudo -u postgres psql
  1. 从下表中为您正在使用的每个服务创建数据库:
代码语言:javascript
复制
CREATE ROLE <user> LOGIN PASSWORD '<password>';
CREATE DATABASE <database> OWNER <user> ENCODING 'UTF8';

您可以为<database><user><password>使用任何所需的值。以下示例是Cloudera Manager配置设置中提供的默认名称,但是您不需要使用它们:

Table 1. Databases for Cloudera Software

Service

Database

User

Cloudera Manager Server

scm

scm

Activity Monitor

amon

amon

Reports Manager

rman

rman

Hue

hue

hue

Hive Metastore Server

metastore

hive

Oozie

oozie

oozie

Data Analytics Studio

das

das

建表语句如下:

代码语言:javascript
复制
CREATE ROLE scm LOGIN PASSWORD 'cloudera';
CREATE DATABASE scm OWNER scm ENCODING 'UTF8';

CREATE ROLE amon LOGIN PASSWORD 'cloudera';
CREATE DATABASE amon OWNER amon ENCODING 'UTF8';

CREATE ROLE rman LOGIN PASSWORD 'cloudera';
CREATE DATABASE rman OWNER rman ENCODING 'UTF8';

CREATE ROLE hue LOGIN PASSWORD 'cloudera';
CREATE DATABASE hue OWNER hue ENCODING 'UTF8';

CREATE ROLE hive LOGIN PASSWORD 'cloudera';
CREATE DATABASE metastore OWNER hive ENCODING 'UTF8';

CREATE ROLE oozie LOGIN PASSWORD 'cloudera';
CREATE DATABASE oozie OWNER oozie ENCODING 'UTF8';

CREATE ROLE das LOGIN PASSWORD 'cloudera';
CREATE DATABASE das OWNER das ENCODING 'UTF8';

CREATE ROLE rangeradmin LOGIN PASSWORD '!Beijing28';
CREATE DATABASE ranger OWNER rangeradmin ENCODING 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE ranger TO rangeradmin;

安装Postgresql-jdbc驱动

  1. 安装PostgreSQL连接器:
代码语言:javascript
复制
yum install postgresql-jdbc*
  1. 将连接器.jar文件复制到Java共享目录:
代码语言:javascript
复制
cp /usr/share/java/postgresql-jdbc.jar /usr/share/java/postgresql-connector-java.jar
  1. 确认.jar文件位于Java共享目录中:
代码语言:javascript
复制
ls /usr/share/java/postgresql-connector-java.jar
  1. 将.jar文件的访问模式更改为644:
代码语言:javascript
复制
chmod 644 /usr/share/java/postgresql-connector-java.jar

完整命令如下:

代码语言:javascript
复制
for i in {1..6}; do ssh grocery-$i.vpc.cloudera.com " sudo yum -y install postgresql-jdbc* " ; done
for i in {1..6}; do ssh grocery-$i.vpc.cloudera.com " cp /usr/share/java/postgresql-jdbc.jar /usr/share/java/postgresql-connector-java.jar " ; done
for i in {1..6}; do ssh grocery-$i.vpc.cloudera.com " ls /usr/share/java/postgresql-connector-java.jar " ; done
for i in {1..6}; do ssh grocery-i.vpc.cloudera.com &#34; chmod 644 /usr/share/java/postgresql-connector-java.jar&#34; ; done</code></pre></div></div><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722964211550645055.jpg" /></div></div></div></figure><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722964211907108456.jpg" /></div></div></div></figure><h3 id="97sft" name="%E5%AE%89%E8%A3%85Mysql"><strong>安装Mysql</strong></h3><p>如果使用Mysql,则跳过Mariadb/PostgreSQL的部分。MySQL 数据库的安装和部署参考:https://docs.cloudera.com/cdp-private-cloud-base/latest/installation/topics/cm_ig_mysql.html </p><h3 id="87cb6" name="%E5%AE%89%E8%A3%85JDK"><strong>安装JDK</strong></h3><p>我们这里使用操作系统自带的openjdk,提前安装。也可以只安装Cloudera Manager Server节点,然后通过向导安装openJDK。</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">#安装openJDK1.8</code></pre></div></div><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">for i in {1..5}; do ssh ccycloud-i.grocery.root.hwx.site 'yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-headless.x86_64 java-1.8.0-openjdk-devel.x86_64' ; done

介质准备

  1. 进入Cloudera官网主页https://www.cloudera.com/,点击Products->Download
  1. 进入Cloudera产品下载主页https://www.cloudera.com/downloads.html
  1. 对于CDP PvC Base产品来讲有两个下载链接,Download Now和Free Trial,分别对应Cloudera订阅用户和试用用户。

试用版本介质获取

  1. 点击Free Trial,进入试用下载页面https://www.cloudera.com/downloads/cdp-private-cloud-trial/cdp-private-cloud-base-trial.html :
  1. 点击Try Now,进入产品下载申请页:
  1. 如果没有sign in,则需要先登录。登录之后进入下载条款页面:
  1. 接受条款并提交,进入试用安装页面

注: 试用版本不能轻易升级、备份、或迁移到生产就绪型配置,而无需手动步骤,描述在这里。如果计划将此系统迁移到生产系统,请考虑使用此处描述的生产安装过程。

  1. 试用版本仓库对应为:

https://archive.cloudera.com/cm7/

https://archive.cloudera.com/cdh7/

下载介质时注意选择el8的版本

订阅用户介质获取

  1. 点击Download Now,进行订阅用户下载页面https://www.cloudera.com/downloads/cdp-data-center.html
  1. 页面跳转到生成Credenntials页面:

注意: 对于订阅用户的所有安装方法,都将需要通过电子邮件提供的凭据以及CDP许可证密钥来访问Cloudera的存储库。如果您无权访问这些其他凭据,则可以通过将许可证文件的内容复制并粘贴到以下工具中,使用许可证密钥再次生成凭据。

  1. 将你的订阅的License的所有内容复制粘贴到该Generate Credentials中:
  1. 点击GetCredentials,会生成该订阅的账户信息,包括下载的用户名和密码,如下图所示:
  1. 将对应的用户名和密码保存,用于后续的介质下载。
  2. 对于国内用户来讲,都是需要离线安装CDP PvC Base的,介质的下载路径为:
代码语言:javascript
复制
Cloudera Manager Repository:
https://username:password@archive.cloudera.com/p/cm7/7.7.1/redhat8/yum
Cloudera Manager Repository File:
https://username:password@archive.cloudera.com/p/cm7/7.7.1/redhat8/yum/cloudera-manager.repo
Cloudera Runtime 7.1.8 location:
https://[username]:[password]@archive.cloudera.com/p/cdh7/7.1.8/parcels
其中username和password使用上面的credentials来替换。例如:
mkdir -p /var/www/html/cm7/7.7.1/redhat8/yum/RPMS/x86_64/
mkdir -p /var/www/html/cdh7/7.1.8.0/parcels/
mkdir -p /var/www/html/cm7/7.7.1/repo-as-tarball/
wget -nd -r -l1 --no-parent https://username:password@archive.cloudera.com/p/cm7/7.7.1/redhat8/yum/RPMS/x86_64/ -P /var/www/html/cm7/7.7.1/redhat8/yum/RPMS/x86_64/
wget https://username:password@archive.cloudera.com/p/cm7/7.7.1/redhat8/yum/RPM-GPG-KEY-cloudera -P /var/www/html/cm7/7.7.1/redhat8/yum
wget https://username:password@archive.cloudera.com/p/cm7/7.7.1/redhat8/yum/cloudera-manager-trial.repo -P /var/www/html/cm7/7.7.1/redhat8/yum
wget https://username:password@archive.cloudera.com/p/cm7/7.7.1/redhat8/yum/cloudera-manager.repo -P /var/www/html/cm7/7.7.1/redhat8/yum
wget https://username:password@archive.cloudera.com/p/cm7/7.7.1/allkeys.asc -P /var/www/html/cm7/7.7.1

wget https://username:password@archive.cloudera.com/p/cdh7/7.1.8.0/parcels/CDH-7.1.8-1.cdh7.1.8.p0.30990532-el8.parcel.sha1 -P /var/www/html/cdh7/7.1.8.0/parcels/
wget https://username:password@archive.cloudera.com/p/cdh7/7.1.8.0/parcels/CDH-7.1.8-1.cdh7.1.8.p0.30990532-el8.parcel.sha256 -P /var/www/html/cdh7/7.1.8.0/parcels/
wget https://username:password@archive.cloudera.com/p/cdh7/7.1.8.0/parcels/CDH-7.1.8-1.cdh7.1.8.p0.30990532-el8.parcel -P /var/www/html/cdh7/7.1.8.0/parcels/
wget https://username:password@archive.cloudera.com/p/cdh7/7.1.8.0/parcels/manifest.json -P /var/www/html/cdh7/7.1.8.0/parcels/

Cloudera Manager安装

配置本地repo源

下载介质时注意选择自己需要的版本和对应的操作系统版本,下载链接参考介质准备章节。将下载的介质放到HTTPD的对应目录下。

创建repo源

将Cloudera Manager安装需要的5个rpm包以及一个asc文件下载到本地,放在同一目录,执行createrepo命令生成rpm元数据。

代码语言:javascript
复制
[root@ccycloud-1 yum]# createrepo .
Directory walk started
Directory walk done - 5 packages
Temporary output repo path: ./.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
[root@ccycloud-1 yum]# ls
RPM-GPG-KEY-cloudera  RPMS  cloudera-manager-trial.repo  cloudera-manager.repo  repodata
[root@ccycloud-1 yum]#

在/var/www/html/cm7/7.7.1/redhat8/yum/创建repo

配置Web服务器

将上述cdh7/cm7目录移动到/var/www/html目录下(这里直接下载到对应的目录下了), 使得用户可以通过HTTP访问这些rpm包。

验证浏览器能否正常访问

5.制作Cloudera Manager的repo源

代码语言:javascript
复制
[cloudera-manager]
name=Cloudera Manager 7.7.1
baseurl=http://ccycloud-1.grocery.root.hwx.site/cm7/7.7.1/redhat8/yum/
gpgkey=http://ccycloud-1.grocery.root.hwx.site/cm7/7.7.1/redhat8/yum/RPM-GPG-KEY-cloudera
gpgcheck=1
enabled=1
autorefresh=0
type=rpm-md

将对应的repo文件放到/etc/yum.repos.d/目录下

代码语言:javascript
复制
cp cloudera-manager.repo /etc/yum.repos.d/

yum源检查,如果检查报错,则检查配置yum的配置文件和网络设置。

代码语言:javascript
复制
yum repolist
Failed to set locale, defaulting to C.UTF-8
Failed loading plugin "product-id": No module named 'subscription_manager'
Failed loading plugin "upload-profile": No module named 'subscription_manager'
repo id                                           repo name
appstream-internal                                Red Hat Universal Base Image 8 (RPMs) - AppStream Internal
baseos-internal                                   Red Hat Universal Base Image 8 (RPMs) - BaseOS Internal
cloudera-manager                                  Cloudera Manager 7.7.1
codeready-builder-for-rhel-8-x86_64-rpms-internal Red Hat Universal Base Image 8 (RPMs) - Codeready-Builder
epel-internal                                     Epel Packages for Enterprise Linux 8 - x86_64
mariadb                                           MariaDB
supplymentry-internal                             Red Hat Universal Base Image 8 (RPMs) - Supplementary Internal
[root@ccycloud-1 parcels]#

安装Cloudera Manager Server

通过yum安装Cloudera Manager Server

使用软件包将Cloudera Manager安装在Cloudera Manager Server主机上。

在Cloudera Manager服务器主机上,键入以下命令以安装Cloudera Manager软件包:

代码语言:javascript
复制
sudo yum -y install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server

安装Python3.8

CDP 7.1.8 及更高版本中的某些服务(例如 Hue)使用 Python 3.8。在安装 Cloudera Manager 之后,在将服务添加到集群之前,您必须在运行受影响服务的所有主机上安装 Python 3.8。

如果要使用 Hue,则必须在Hue服务的机器上安装 Python 3.8。

安装 Python 3.8 在安装 Cloudera Manager 之后和将服务添加到集群之前,您必须在所有主机上安装 Python 3.8。安装步骤参考:在 RHEL 8 上安装 Python 3.8

安装依赖软件包

在您的系统上安装必要的开发人员工具,例如gcc和 make。

在安装 Python 3.8 之前安装以下软件包:

代码语言:javascript
复制
yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel -y

部署Python3.8

  1. 以 root 用户身份通过 SSH 连接到主机系统。
  2. 下载 Python 3.8 并通过运行以下命令解压缩包:
代码语言:javascript
复制
cd /opt
curl -O https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
tar -zxvf Python-3.8.12.tgz
  1. 将目录更改为解压 Python 3.8 包的位置:
代码语言:javascript
复制
cd /opt/Python-3.8.12
  1. 按如下方式安装 Python 3.8:
代码语言:javascript
复制
./configure --enable-shared --prefix=[***CUSTOM-INSTALL-PATH***]

笔记

默认情况下,Python 可以安装在以下任一位置:

    • /usr/bin
    • /usr/local/python38/bin
    • /usr/local/bin
    • /opt/rh/rh-python38/root/usr/bin

如果要在任何其他位置安装 Python 3.8,则必须使用该--prefix 选项指定路径。

该--enabled-shared选项用于构建共享库而不是静态库。我这里使用默认路径。

  1. 如下构建 Python 3.8:
    • 运行make命令编译文件:
代码语言:javascript
复制
make
    • 运行以下命令将编译的文件放在默认位置或使用 --prefix选项指定的自定义位置:
代码语言:javascript
复制
make install
    • 将共享的编译库文件(libpython3.8.so)复制到 /lib64/目录下:
代码语言:javascript
复制
cp --no-clobber ./libpython3.8.so* /lib64/

该--no-clobber选项用于防止覆盖文件。

    • 更改 libpython3.8.so 文件的权限如下:
代码语言:javascript
复制
chmod 755 /lib64/libpython3.8.so*
  1. 如果您在加载共享库时看到错误,例如error: libpython3.8.so.1.0: cannot open shared object file: No such file or directory,请运行以下命令:
代码语言:javascript
复制
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/

Hue设置

(对于 Hue)如果您已将 Python 3.8 安装在自定义位置,则必须在Cloudera Manager > Clusters > Hue > Configuration > Hue Service Environment Advanced Configuration Snippet (Safety Valve)中附加自定义路径,以冒号 (:) 分隔,如下所示:

代码语言:javascript
复制
Key: PATH
Value: [***CUSTOM-INSTALL-PATH***]:/usr/local/sbin:/usr/local/bin:/usr/sbin:

Hue节点安装MySQL客户端

CDP 使用 Python 3.8 版。要将 MariaDB 用作 Hue 的后端数据库,您必须根据您的操作系统在所有 Hue 主机上安装 MySQL 客户端和其他必需的依赖项。

  1. 以 root 用户身份通过 SSH 连接到 Hue 主机。
  2. 安装所需的依赖项如下:
代码语言:javascript
复制
yum install -y mysql-devel xmlsec1  xmlsec1-openssl
  1. 将安装包的路径添加到 PATH 环境变量中,如下所示:
代码语言:javascript
复制
export PATH=/usr/local/bin:$PATH

我添加到/etc/profile文件中

  1. 安装 MySQL 客户端如下:
代码语言:javascript
复制
pip3.8 install mysqlclient

初始化数据库

初始化数据库的语法如下:

代码语言:javascript
复制
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh [options] <databaseType> <databaseName> <databaseUser> <password>

参数:

Parameter

Description

<databaseType>

One of the supported database types:MariaDB: mysqlMySQL: mysqlOracle: oraclePostgreSQL: postgresql

<databaseName>

要使用的Cloudera Manager Server数据库的名称。对于MySQL、MariaDB和PostgreSQL数据库,如果您指定了-u 和 -p具有具有创建数据库和授予特权特权的用户凭据的选项。Cloudera Manager配置设置中提供的默认数据库名称是scm,但您不需要使用它。

<databaseUser>

要创建或使用的Cloudera Manager Server数据库的用户名。Cloudera Manager配置设置中提供的默认用户名是scm,但您不需要使用它。

<password>

<databaseUser>创建或使用的密码。如果您不希望密码在屏幕上可见或存储在命令历史记录中,请不要指定密码,并提示您输入密码,如下所示Enter SCM password:

选项:

Option

Description

-?|--help

显示帮助。

--config-path

Cloudera Manager服务器配置文件的路径。默认是 /etc/cloudera-scm-server.

-f|--force

如果指定,则在发生错误时脚本不会停止。

-h|--host

The IP address or hostname of the host where the database is installed. The default is to use localhost.

-p|--password

The admin password for the database application. Use with the -u option. The default is no password. Do not put a space between -p and the password (for example, -phunter2). If you do not want the password visible on the screen or stored in the command history, use the -p option without specifying a password, and you are prompted to enter it as follows:Enter database password:如果您已经创建了数据库,请不要使用此选项。

-P|--port

用于连接数据库的端口号。对于MariaDB,默认端口为3306,对于MySQL为3306,对于PostgreSQL为5432,对于Oracle为1521。此选项仅用于远程连接。

--scm-host

安装Cloudera Manager Server的主机名。如果Cloudera Manager Server和数据库安装在同一主机上,请不要使用此选项,否则请不要使用-H 选项。

--scm-password-script

A script to execute whose stdout provides the password for user SCM (for the database).

-u|--user

The admin username for the database application. Use with the -p option. Do not put a space between -u and the username (for example, -uroot). If this option is supplied, the script creates a user and database for the Cloudera Manager Server. If you have already created the database, do not use this option.

这里执行命令如下:

代码语言:javascript
复制
[root@ccycloud-1 yum]# sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm cloudera
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64
Verifying that we can write to /etc/cloudera-scm-server
Creating SCM configuration file in /etc/cloudera-scm-server
Executing:  /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/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.
log4j:ERROR Could not find value for key log4j.appender.A
log4j:ERROR Could not instantiate appender named "A".
[2022-04-28 16:38:33,489] INFO     0[main] - com.cloudera.enterprise.dbutil.DbCommandExecutor.testDbConnection(DbCommandExecutor.java) - Successfully connected to database.
All done, your SCM database is configured correctly!
[root@ccycloud-1 yum]#

启动Cloudera Manager Server

  1. 启动Cloudera Manager Server服务
代码语言:javascript
复制
systemctl start cloudera-scm-server
systemctl status cloudera-scm-server
  1. 等待几分钟,以启动Cloudera Manager Server。要观察启动过程,请在Cloudera Manager Server主机上运行以下命令:
代码语言:javascript
复制
sudo tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

当您看到此日志条目时,Cloudera Manager管理控制台已准备就绪:

代码语言:javascript
复制
INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
  1. 检查端口是否监听
代码语言:javascript
复制
[root@ccycloud-1 yum]#  netstat -lnpt | grep 7180
tcp        0      0 0.0.0.0:7180            0.0.0.0:*               LISTEN      3476/java
[root@ccycloud-1 yum]#
  1. 通过http://ccycloud-1.grocery.root.hwx.site:7180/cmf/login 访问CM
  1. 使用admin/admin用户登录系统。

如果已有License,则选择上传License,否则选择Try选项,然后Continue。

如何使用Auto-TLS为CM配置TLS加密

使用 Auto-TLS 简化为 Cloudera Manager 配置 TLS 加密的过程。

Auto-TLS 功能可自动执行在集群级别启用 TLS 加密所需的所有步骤。使用 Auto-TLS,您可以让 Cloudera 管理集群中所有证书的证书颁发机构 (CA) 或使用公司现有的 CA。在大多数情况下,所有必要的步骤都可以通过 Cloudera Manager UI 轻松启用。

当 Cloudera Manager 用作证书颁发机构时:

  • 创建根证书颁发机构或证书签名请求 (CSR),以创建由公司现有证书颁发机构 (CA) 签署的中间证书颁发机构
  • 为主机生成 CSR 并自动签名

始终执行以下步骤

  • 为主机创建密钥库和信任库。
  • 将证书、密钥库和信任库部署到集群中的所有主机。
  • 然后,通过从角色实例特定目录配置密钥库和信任库信息,所有集群服务都自动启用 TLS。
  • 为 Cloudera Manager 服务器和代理启用 TLS。
  • 完成此初始设置后,任何新服务、主机(或)其他计算集群设置都会默认自动启用 TLS。
  • 提供用于轮换证书的自动化框架。

让我们通过以下示例在 CDP Private Cloud Base 7.1 集群上查看这些选项:

  • 用例 1:使用 Cloudera Manager 生成内部 CA 和相应的证书
  • 用例 2:使用现有根 CA 启用 Auto-TLS
  • 用例 3:使用现有证书启用 Auto-TLS

使用这些选项中的任何一个,您都可以在启用 Auto-TLS 的 Cloudera Manager 上创建新集群时重用现有的 TLS 设置。当您启动向导以创建新集群时,您应该会看到以下消息。现在,当您部署集群时,所有服务都将自动配置有线加密。

Auto-TLS 功能显着降低了集群 TLS 管理的开销,从而提供更高的安全性并减少了运营开销,并帮助您专注于客户及其工作负载。

自签名证书不应用于生产部署。自签名证书将在密钥生成过程中创建并存储在指定的密钥库中,并且应替换为已签名证书。使用自签名证书要求生成和分发证书,并为证书建立显式信任。

但是,使用自签名证书可以轻松获取用于TLS / SSL配置的证书,并且可能适用于非生产或测试设置。有关更多信息,请参阅在传输中加密数据和为Cloudera Manager手动配置TLS加密。

在下面的命令中为您的系统替换路径,文件名,别名和其他示例。

  1. 创建证书目录:
代码语言:javascript
复制
mkdir -p /opt/cloudera/security/x509/ /opt/cloudera/security/jks/

向Cloudera Manager授予对目录的访问权限,设置正确的权限,然后更改为目录:

代码语言:javascript
复制
sudo chown -R cloudera-scm:cloudera-scm /opt/cloudera/security/jks
sudo umask 0700
cd /opt/cloudera/security/jks
  1. 生成密钥对和自签名证书,并使用与密钥库和storepass相同的密码将所有内容存储在密钥库中,如下所示。将当前主机的FQDN用于CN,以避免引发java.io.IOException: HTTPS hostname wrong 异常。用适合您的环境的条目替换OU,O,L,ST和C的值:
代码语言:javascript
复制
keytool -genkeypair -alias cmhost -keyalg RSA -keysize 2048 -dname "cn=cm01.example.com, ou=Department,
o=Company, l=City, st=State, c=US" -keypass password -keystore example.jks -storepass password

[root@ccycloud-1 jks]# keytool -genkeypair -alias cmhost -keyalg RSA -keysize 2048 -dname "cn=ccycloud-1.grocery.root.hwx.site, ou=ipausers, o=Cloudera, l=Shanghai, st=Shanghai, c=CN" -keypass cloudera -keystore example.jks -storepass cloudera

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore example.jks -destk

  1. 将默认的Java信任库(cacerts)复制到备用系统信任库(jssecacerts):
代码语言:javascript
复制
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
source /etc/profile
sudo cp JAVA_HOME/jre/lib/security/cacerts JAVA_HOME/jre/lib/security/jssecacerts
  1. 从密钥库(example.jks)导出证书。
代码语言:javascript
复制
keytool -export -alias cmhost -keystore example.jks -rfc -file selfsigned.cer

[root@ccycloud-1 jks]# keytool -export -alias cmhost -keystore example.jks -rfc -file selfsigned.cer
Enter keystore password:
Certificate stored in file <selfsigned.cer>

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore example.jks -destkeystore example.jks -deststoretype pkcs12".
[root@ccycloud-1 jks]#

  1. 将自签名证书(selfsigned.cer)复制到/opt/cloudera/security/x509/ 目录中。
代码语言:javascript
复制
cp selfsigned.cer /opt/cloudera/security/x509/cmhost.pem
代码语言:javascript
复制
[root@ccycloud-1 jks]# for i in {2..6}; do ssh ccycloud-$i.grocery.root.hwx.site 'mkdir -p /opt/cloudera/security/jks'  ;done
[root@ccycloud-1 jks]# for i in {2..6}; do scp /opt/cloudera/security/jks/selfsigned.cer ccycloud-$i.grocery.root.hwx.site:/opt/cloudera/security/jks/selfsigned.cer ;done
cmhost.pem 100% 1349 3.1MB/s 00:00
cmhost.pem 100% 1349 1.5MB/s 00:00
cmhost.pem 100% 1349 3.1MB/s 00:00
cmhost.pem 100% 1349 2.0MB/s 00:00
cmhost.pem 100% 1349 1.9MB/s 00:00
[root@ccycloud-1 jks]#
  1. 将公共密钥导入备用系统信任库(jssecacerts),以便在此计算机上使用Java运行的任何进程都将信任该密钥。Java信任库的默认密码为changeit。不要使用在步骤2中为密钥库创建的密码。
代码语言:javascript
复制
$ keytool -import -alias cmhost -file /opt/cloudera/security/jks/selfsigned.cer
-keystore $JAVA_HOME/jre/lib/security/jssecacerts -storepass changeit

[root@ccycloud-1 jks]# keytool -import -alias cmhost -file /opt/cloudera/security/jks/selfsigned.cer
Enter keystore password:
Re-enter new password:
Owner: CN=ccycloud-1.grocery.root.hwx.site, OU=ipausers, O=Cloudera, L=Shanghai, ST=Shanghai, C=CN
Issuer: CN=ccycloud-1.grocery.root.hwx.site, OU=ipausers, O=Cloudera, L=Shanghai, ST=Shanghai, C=CN
Serial number: 5b9a917f
Valid from: Thu Apr 28 17:31:02 CST 2022 until: Wed Jul 27 17:31:02 CST 2022
Certificate fingerprints:
MD5: 61:C0:0F:9F:07:B5:FD:08:FA:8A:41:E7:C0:9F:5E:8F
SHA1: 15:C4:AF:62:88:4A:34:31:A3:60:8A:F1:13:FD:B2:6C:00:A2:D4:7F
SHA256: DC:54:FF:79:C3:88:11:D9:8D:BE:FD:EA:B9:EF:72:47:2E:10:5C:85:30:34:CC:18:DD:05:09:32:2C:AE:A6:71
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: A6 2A 18 0B C5 E2 85 28 BB 89 EF 80 1A BD 6D 6B .*.....(......mk
0010: 38 6C 2E 32 8l.2
]
]

Trust this certificate? [no]: yes
Certificate was added to keystore
[root@ccycloud-1 jks]#

重要

在集群中的每个主机上重复此过程。

  1. 重命名密钥库:
代码语言:javascript
复制
mv /opt/cloudera/security/jks/example.jks /opt/cloudera/security/jks/cmhost-keystore.jks
  1. 您还可以删除证书,因为它已在步骤5中复制到相应的路径。
代码语言:javascript
复制
rm /opt/cloudera/security/jks/selfsigned.cer
  1. 自签名证书设置完成。

CDP PvC Base集群安装

CDP PvC Base集群安装向导

  1. admin/admin登录到CM

这时有两个选项,一个是上传企业订阅的license,一个是使用60天试用,试用到期后无法访问Cloudera Manager的管理控制台。

我们这里先选择60天试用。弹出试用协议,如下图所示:

选择Yes,进行下一步

  1. 点击Click here to setup Enable AutoTLS,进入AutoTLS配置页面。证书位置为之前创建的证书完整路径,其他信息根据自己集群的实际情况填写
  1. 配置对应的信息,然后点击下一步:
  1. 根据提示,进行到Cloudera Manager服务器,执行systemctl restart cloudera-scm-manager,重启服务。然后查看日志,待看到Started Jetty server时,通过浏览器访问CM。
  1. 可以看到,CM的连接端口已经从7180变更到7183,点击高级,访问CM
  1. 点击“继续”,选择集群类型

对于新安装,常规集群(也称为基本集群)是唯一的选择。安装完基础集群后,您可以添加计算集群。

选中Private Cloud Base Cluster:

可以看到已经启用了Auto-TLS,但没有配置KDC,而CDP有些服务必须要部署KDC。这里先忽略该预警,后续再配置KDC。

  1. 点击继续,输入Basic集群的名称,也可以使用默认的”Cluster 1”:
  1. 输入主机ip或者名称,点击搜索找到主机后点击继续
  1. 点击“继续”
  1. CDH and other software”中选择“Parcel Repositories & Network Settings”,点击“ 更多选项”,点击“-”删除其它所有地址,输入http://grocery-1.vpc.cloudera.com/cdh7,点击“保存更改”

点击Save & Verify Configuration,验证通过,点击关闭

  1. 点击“继续”,进入下一步安装jdk. 选择Install a Cloudera-provided version of OpenJDK,点击继续

我们这里选择使用系统自带的OpenJDK。

  1. 点击“继续”,进入下一步配置ssh账号密码,确保所有机器的root密码都一致,然后输入root的密码即可。
  1. 点击“继续”,进入下一步,安装Cloudera Manager相关到各个节点

等待agent安装完毕后,自动跳转到下一步开始安装parcel

  1. 点击“继续”,进入下一步安装cdh到各个节点
  1. 自动进入下一步主机检查和网络检查,确保所有检查项均通过。

需要手工点击进行网络性能和主机检查。

如果有错误或者黄色警告,查看“显示检查器结果”,并逐项解决,然后“重新运行”检查,直到所有的检查都通过,否则没办法点击继续下一步。

点击完成进入服务安装向导。

集群设置安装向导

  1. 选择需要安装的服务

自定义服务中可以看到所有组件,可以根据自己的需求来选择。

选择需要安装的服务,根据需要选择,这里随便选择Data Mart,也可以自定义服务

  1. 点击“继续”,进入集群角色分配,两台机器作为管理节点,另外三台机器作为DataNode

注意:Cloudera Management Service中的Activity Monitor现在已经基本上不用,可以不安装该服务。Telemetry Publisher是遥感服务,用于Workload XM通信,如果没有计划使用Workload XM,则不需要安装该服务。ZooKeeper至少安装3节点,需要为奇数节点数。

  1. 点击“继续”,进入下一步,测试数据库连接

测试都成功后才能点击继续。

  1. 4.测试成功,点击继续。设置Ranger相关参数。这里密码都设置为P@ssw0rd,大家使用自己的密码进行设置
  1. 点击“继续”,进入参数设置,此处使用默认参数,根据实际情况进行目录修改
  1. 点击“继续”,进入各个服务启动
  1. 安装成功,点击继续
  1. 点击继续,进入安装总结页面
  1. 安装成功后进入home管理界面

系统会自动恢复成没有错误的状态

组件版本检查

  1. 通过Hosts->All Hosts进入All Hosts页面,然后执行Inspect All Hosts:
  1. 执行完成后点击Show Inspector Results查看结果
  1. 检查结果如下:
  1. 产品版本信息如下:

可以看到CDP7.1.8版本包含的组件信息。

配置计算集群

  1. 点击grocery集群的集群名,进入集群页面:
  1. 在Data Contexts旁边点击创建
  1. 数据SDX的名称,接着选择SDX维护数据上下文的服务,然后点击创建:
  1. 创建完成后,在base集群可以看到Data Contexts,如下图所示:
  1. 点击已有的SDX,这里点击dataContext,来创建计算集群
  1. 点击Create Compute Cluster,进入计算集群的部署页面:
  1. Hosts指定页面,数据域名或者ip地址搜索:
  1. 设置存储库,和前面安装基础集群设置相同
  1. 安装JDK,通前面部署JDK相同
  1. 提供操作系统访问凭证
  1. 安装Agent
  1. 安装Parcels
  1. 集群检查,可以选择新计算集群或者新计算集群和Base集群两种
  1. 服务选择

根据使用方式,选择对应的服务或者自定义服务

  1. 角色分配
  1. 如果涉及到数据库,则下一步是数据库设置。如果不涉及数据库,则直接跳过进行审核更改。这里使用默认值
  1. 运行命令
  1. 汇总最终部署结果。
  1. 结果展示

Hdfs预警是因为纠删码造成的。设置对应的参数即可。

问题处理

HDFS预警处理

集群安装完成后,如果安装的数据节点比较少,hdfs会有纠删码的预警。Hdfs默认是开启纠删码设置的。

只需要把纠删码和纠删码验证测试关闭即可。

NTP服务器ntp_adjtime() failed: Operation not permitted错误

NTP服务配置后启动NTPD服务,NTPD服务报错

解决方案:

代码语言:javascript
复制
vi /usr/lib/systemd/system/ntpd.services

ExecStart=/usr/sbin/ntpd之后的部分全部删除

保存后重新加载

代码语言:javascript
复制
systemctl daemon-reload

启动并查看ntp服务

代码语言:javascript
复制
systemctl start ntpd
systemctl status ntpd

NTP时钟同步不允许调整时间

代码语言:javascript
复制
[root@ccycloud-1 ~]# ntpdate time.windows.com
28 Apr 15:27:41 ntpdate[1962]: Can't adjust the time of day: Operation not permitted
[root@ccycloud-1 ~]#

说明:独享物理机没有此问题,所以推断应该是VPS有限制和占用。所以时间是修改不了的,理论上已经有物理主机同步过了,只要设置时区就可以了。

心跳错误

症状:

代码语言:javascript
复制
When trying to install CDH via Cloudera Manager, you may sometimes encounter "heartbeat" errors similar to the following:
Installation failed. Failed to receive heartbeat from agent.
Ensure that the host's hostname is configured properly.
Ensure that port 7182 is accessible on the Cloudera Manager server (check firewall rules).
Ensure that ports 9000 and 9001 are free on the host being added.
Check agent logs in /var/log/cloudera-scm-agent/ on the host being added (some of the logs can be found in the installation details).

适用于Cloudera Manager(所有版本)

原因:

这种类型的错误可能由多种因素引起,但它们都归结为能够通过网络正确地与Cloudera Manager服务器通信的客户端节点。

此错误的潜在根本原因:

  1. 您的客户端计算机没有正确配置其IP地址。
  2. 防火墙和/或iptables可能会阻止网络流量。
  3. DNS配置错误

故障排除步骤

代码语言:javascript
复制
IP Address misconfiguration:

Use "ifconfig -a" to see a listing of your network interfaces, your main network interface is probably something like "eth0". Assure that it has a real IP address, not the loopback address (127.0.0.1) assigned to it. Run the "hostname -f" command to find out what hostname your local machine is using for itself, then run "nslookup <hostname>" against that hostname (or "dig <hostname>" for more options) to see what IP address it is resolving to. If DNS does not return an IP address for your host, then the configuration will be strictly controlled by /etc/hosts. Look in that file to see what IP address you are assigning to your host.

  1. Firewalls or iptables: either disable them or assure they are allowing the correct ports to pass through. Follow you company policies to decide which path if best for you.

$ sudo chkconfig iptables --list
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

$ sudo ufw disable

  1. If "nslookup <hostname>" (where <hostname> is the name of your Cloudera Manager server) does not return the correct IP address, then you have a misconfigured DNS, contact your network admin.

When it's all said and done, all machines in your cluster need to be able to resolve each other's hostnames and IP addresses as well as connect to each other on the specific network ports mentioned in the error message. Assure that /etc/hosts or DNS are configured properly so that your hosts can resolve each other and that each local machine is binding it's hadoop services to a real network IP instead of the loopback address.

If all that is correct and you still cannot connect, check to make sure firewalls or other services are not blocking the traffic.

无法正常安装agent

原因:由于我一开始起用了Https支持,所以安装agent时无法和master进行加密通信。其实agent是已经安装好了。最后把CM卸载重新安装,不启用https。

下面附卸载命令:

代码语言:javascript
复制
service cloudera-scm-agent stop
service supervisord stop
systemctl stop cloudera-scm-server
yum -y remove cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
rm -rf /opt/cloudera/* /var/lib/cloudera* /var/log/cloudera* /etc/cloudera*

数据库部分:drop database scm

代码语言:javascript
复制
Error, CM server guid updated, expected 25cf17b3-391a-4368-848a-07118d6f11fb, received b3d4a47a-1476-4ea4-b236-24426b1b8540
rm /var /lib/cloudera-scm-agent/cm_guid -f
systemctl restart cloudera-scm-agent

安装DAS报错

安装Data Engineering时,对应DAS的知识库如果不是PostgreSQL9.6,会报下面的错误:

解决方案:自定义服务中不选择DAS,在PostgreSQL9.6服务器上建DAS知识库,然后再安装DAS服务。

初始化ZooKeeper中的solr报错

在运行命令启动服务时,报正在初始化ZooKeeper中的solr错误,重新执行即可修改该错误。

安装Parcel提示主机运行状况不良

Cloudera 安装Parcel提示主机运行状况不良

解决方法

删除agent目录下面的cm_guid文件,并重启失败节点的agent服务恢复。

代码语言:javascript
复制
[root@esgyn001 ~]# cd /var/lib/cloudera-scm-agent/
cm_guid response.avro uuid
[root@esgyn001 cloudera-scm-agent]# rm -rf cm_guid
[root@esgyn001 cloudera-scm-agent]# service cloudera-scm-agent restart
Stopping cloudera-scm-agent: [ OK ]
Starting cloudera-scm-agent:

升级内核报错

在使用yum -y update 升级系统内核时报错:

可以直接跳过系统内核更新。

Hue配置数据库报错

Hue在配置数据库连接时报错,但界面填写的信息都正确,基本上是Hue服务器的系统默认Python版本不是3.8造成的,设置好对应的环境变量,重启agent服务再重试,同时检查server的日志。

总结

  1. 从安装方式上来看,CDP PvC Base7与CDH6变化不大,这也方便了CDH6的用户可以较为快速的迁移到CDP PvC Base7,以及适应CDP PvC Base7的安装与使用。
  2. 安装向导界面有一些变化,现在可以一目了然的看到一共多少步骤,以及每个步骤是干什么。
  3. 安装条件前置没有任何变化,包括防火墙,Selinux关闭,ntp同步等等。可以参考Fayson之前的文章《CDH安装前置准备》
  4. Cloudera Manager自带的JDK直接提供的是OpenJDK1.8,而不是Oracle JDK,同样CDP PVC BASE也不再支持JDK1.7。
  5. 进到主界面变化也不大,主要是Cloudera的logo变成了黑色,与Cloudera主页的整体风格一致。
  6. 在配置Cloudera Manager连接到数据库时的脚本有所变化。以前是/usr/share/cmf/schema/scm_prepare_database.sh,现在是/opt/cloudera/cm/schema/scm_prepare_database.sh
  7. Cloudera Manager服务的状态在Redhat7通过systemctl status cloudera-scm-server查看是显示正确,而以前是不正确的,可以参考Fayson之前的文章《Cloudera Manager Server服务在RedHat7状态显示异常分析》
  8. 注意CM的安装除了下载rpm包以外,还要下载allkeys.asc文件,否则安装agent的时候会报以下错误:
  1. 对于离线安装CDH6.0,分发Parcel出现hash校验失败的问题,是因为在CM6中修复了一个bug,让它不再忽略由http服务器发送的“Content-Encoding”的header信息,但是我们在Redhat中安装的httpd服务,当它传输parcel文件时,默认会错误的设置“Content-Encoding”。于是CM server会错误的认为parcel文件已经被httpd压缩并尝试解压缩。所以会导致失败。解决办法是参考2.8章节的,设置httpd的conf文件,AddType application/x-gzip .gz .tgz .parcel,然后重启httpd服务和CM服务。这个问题在beta的时候就已经存在了,具体请参考《Redhat7.4安装CDH6.0_beta1时分发Parcel异常分析》
  2. 在创建元数据库时,不需要再创建Navigator和Sentry相关的元数据库,但需要创建Ranger服务相关的元数据库。
  3. 第一次启动Ranger服务时,创建x_portal_user表时会报以下错误:
代码语言:javascript
复制
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
SQLException : SQL state: 42000 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes ErrorCode: 1071
2019-11-24 01:12:06,672 [E] ranger_core_db_mysql.sql file import failed!

这是因为索引建立的时候,字符长度超过255,由于utf-8字符最长只能为255,超长之后会报错,所以需要对MySQL做如下配置:

代码语言:javascript
复制
SET GLOBAL innodb_file_per_table = ON,
innodb_file_format = Barracuda,
innodb_large_prefix = ON;