大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)

目录

一、概述

在众多 Hadoop 版本中, CDH(Cloudera Hadoop) 是 Hadoop 众多分支中比较出色的版本, 它由Cloudera 发行和维护。CDH 基于 Apache 的 Hadoop 进行重新构建,提供了基于 Web 页面的群集部署和管理操作。Hadoop发行版除了社区的Apache hadoop外,Cloudera Hadoop(CDH)、Hortonworks、MapR、EMC、IBM、INTEL、华为等都提供自己的商业版本。

从2021年2月1日起,所有CDH和Cloudera Manager的下载都需要用户名和密码,说白了就是需要money,用户只能通过购买正式许可证才能够在线下载CM和CDH安装包,但是有免费版,只不过不让在线安装了,所以这里使用本地离线安装方式。

官方文档:https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/introduction.html


1)目前比较流行Hadoop版本

  • Apache Hadoop

维护人员比较多,更新频率比较快,稳定性相对比较差。

  • Cloudera Hadoop(CDH)

Cloudera公司的发行版本,基于Apache Hadoop的二次开发,优化了组件兼容和交互接口、简化安装配置、增加Cloudera兼容特。

2)CDH特点

  • 灵活性——存储任何类型的数据并使用各种不同的计算框架对其进行操作,包括批处理,交互式SQL,自由文本搜索,机器学习和统计计算。
  • 集成——在完整的Hadoop平台上快速启动并运行,该平台可与各种硬件和软件解决方案配合使用。
  • 安全性——处理和控制敏感数据。
  • 可扩展性——支持广泛的应用程序,并扩展它们以适应您的需求。
  • 高可用性——可以执行关键型业务任务。
  • 兼容性——利用现有的IT基础架构。

二、CDH组件介绍

1)Hive

  • Hive数据仓库软件支持对分布式存储中的大型数据集进行读写和管理。HiveQL (Hive query language)是一种与SQL非常相似的查询语言,通过MapReduce或Apache Spark将查询转换成一系列的任务,在Hadoop集群上执行。关于Hive,也可以参考我之前的文章:大数据Hadoop之——数据仓库Hive

  • 用户可以使用Hive运行批处理工作负载,同时也可以使用Apache Impala或Apache spark等工具分析交互SQL或机器学习工作负载的相同数据——所有这些都在一个平台中

作为CDH的一部分,Hive还依赖于:

  • YARN提供的统一资源管理;
  • Cloudera Manager提供的简化部署和管理;
  • 共享安全和治理,以满足Apache Sentry和Cloudera Navigator提供的合规需求。

2)Impala

  • Impala是一款用于大数据的分布式数据库查询引擎。Impala并没有取代基于MapReduce的批处理框架,比如Hive。Hive和其他构建在MapReduce上的框架最适合长时间运行的批处理作业,比如涉及Extract、Transform和Load (ETL)类型作业的批处理。
  • Impala可以直接对存储在HDFS、HBase或Amazon Simple Storage Service (S3)中的Apache Hadoop数据提供快速、交互式的SQL查询。除了使用相同的统一存储平台外,Impala还使用了与Apache Hive相同的元数据、SQL语法(Hive SQL)、ODBC驱动、用户界面(Hue中Impala查询UI)。这为实时或面向批处理的查询提供了熟悉的统一平台。

1、Impala 优势

  • 在Apache Hadoop中查询大量数据(“大数据”)的能力
  • 集群环境中的分布式查询,以便方便地扩展和利用具有成本效益的商品硬件。
  • 能够在不同的组件之间共享数据文件,没有复制或导出/导入步骤;例如,用Pig编写,用Hive转换,用Impala查询。Impala可以读写Hive表,通过使用Impala对Hive生成的数据进行分析,实现简单的数据交换。
  • 大数据处理和分析的单一系统,因此客户可以避免昂贵的建模和ETL分析。

2、工作原理

Impala解决方案由以下组件组成:

  • 客户端——实体包括Hue、ODBC客户端、JDBC客户端和Impala Shell都可以与Impala进行交互。这些接口通常用于发出查询或完成管理任务,比如连接到Impala。
  • Hive Metastore ——存储关于Impala可用数据的信息。例如,metastore让Impala知道哪些数据库可用,以及这些数据库的结构是什么。当您通过Impala SQL语句创建、删除和修改模式对象、将数据加载到表中等等时,相关的元数据更改会通过Impala 1.2中引入的专用目录服务自动广播到所有Impala节点。
  • Impala——这个进程运行在datanode上,负责协调和执行查询。每个Impala实例都可以接收、计划和协调来自Impala客户端的查询。查询分布在Impala节点之间,这些节点充当工人,执行并行的查询片段。
  • HBase和HDFS低层数据存储。

【温馨提示】HUE=Hadoop User ExperienceHadoop用户体验),直白来说就一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公 司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。通过使用HUE我们可以在浏览器端的We联制台上与Hadoop 集群进行交互来分析处理数据。

3、Impala查询原理

  • 用户应用程序通过ODBC或JDBC向Impala发送SQL查询,这些ODBC或JDBC提供了标准化的查询接口。用户应用程序可以连接到集群中的任何impalad。这个impalad成为查询的协调器。
  • Impala解析查询并分析它,以确定集群中impalad实例需要执行哪些任务。执行计划是为了达到最佳效率。
  • HDFS、HBase等服务通过本地impalad实例访问,提供数据。
  • 每个impalad将数据返回给协调impalad,协调impalad将这些结果发送给客户端。

4、Impala的特性

  • Hive查询语言(HiveQL)中最常见的SQL-92特性,包括SELECT、join和aggregate函数。
  • HDFS、HBase、Amazon Simple Storage System (S3)存储,包括:
    1. HDFS文件格式:delimited text files、Parquet、Avro、SequenceFile、RCFile。
    2. 压缩编解码器:Snappy, GZIP, Deflate, BZIP。
  • 常用的数据存取接口包括:
    1. JDBC driver
    2. ODBC driver

3)Kudu

Apache Kudu是一个为Hadoop平台开发的柱状存储管理器。Kudu拥有Hadoop生态系统应用程序的共同技术属性:它运行在商用硬件上,具有水平可伸缩性,并支持高可用性操作。

1、Kudu 优势

  • 快速处理OLAP工作负载。
  • 与MapReduce、Spark、Flume等Hadoop生态系统组件集成。
  • 与Apache Impala的紧密集成,使其成为与Apache Parquet一起使用HDFS的一个很好的、可变的替代方案。
  • 强大而灵活的一致性模型,允许您在每个请求的基础上选择一致性需求,包括严格序列化一致性的选项。
  • 在同时运行顺序和随机工作负载方面有很强的性能。
  • 通过Cloudera Manager轻松的管理。
  • 高可用性,Tablet Servers和Master使用了Raft共识算法,只要可用的副本比不可用的多,就可以确保可用。读取可以由只读的追随者平板电脑来完成,即使是在leader平板电脑故障的情况下。
  • 结构数据模型

2、Kudu-Impala集成

Apache Kudu与Apache Impala紧密集成,允许您使用Impala的SQL语法从Kudu平板电脑插入、查询、更新和删除数据,这是使用Kudu api构建自定义Kudu应用程序的另一种选择。此外,您可以使用JDBC或ODBC将现有的或用任何语言、框架或商业智能工具编写的新应用程序连接到您的Kudu数据,使用Impala作为代理。

  • CREATE/ALTER/DROP TABLE—Impala支持使用Kudu作为持久化层创建、修改和删除表。这些表遵循与Impala中其他表相同的内部/外部方法,允许灵活地接收和查询数据。
  • INSERT—使用与HDFS或HBase持久化表相同的机制,Impala可以将数据插入到Kudu表中。
  • UPDATE/DELETE—Impala支持UPDATE和DELETE SQL命令,可以逐行或批量修改Kudu表中的现有数据。SQL命令的语法被设计成尽可能与现有解决方案兼容。除了简单的DELETE或UPDATE命令外,您还可以在查询的FROM子句中指定复杂的连接,使用与常规SELECT语句相同的语法。
  • 灵活的分区——类似于Hive中对表的分区,Kudu允许你通过哈希或范围动态地将表预分割成预定义数量的平板电脑,以便在集群中均匀地分配写和查询。您可以按任意数量的主键列、任意数量的散列、分割行的列表或这些列的组合进行分区。分区方案是必需的。
  • 并行扫描——为了在现代硬件上实现最高的性能,Impala使用的Kudu客户端可以在多个平板电脑上并行扫描。
  • 高效查询——在可能的情况下,Impala将谓词计算下推到Kudu,以便谓词的计算尽可能接近数据。在许多工作负载中,查询性能与Parquet相当。

5)Sentry

  • Apache Sentry是Hadoop的一个基于角色的细粒度授权模块。Sentry提供了在Hadoop集群上为经过身份验证的用户和应用程序控制和强制数据上的精确权限级别的能力。目前,Sentry在Apache Hive、Hive Metastore/HCatalog、Apache Solr、Impala和HDFS(仅限于Hive表数据)上都是开箱可用的。

  • Sentry被设计成一个可插拔的Hadoop组件授权引擎。它允许您定义授权规则来验证用户或应用程序对Hadoop资源的访问请求。Sentry是高度模块化的,可以支持Hadoop中各种数据模型的授权。

6)Spark

可以参考我之前Spark的几篇文章:

三、Cloudera Manager

Cloudera Manager是一个端到端用于管理CDH集群的应用程序。Cloudera Manager通过提供对CDH集群每个部分的细粒度可见性和控制,为运营商提高性能、提高服务质量、提高合规和降低管理成本设定了企业部署的标准。使用Cloudera Manager,您可以轻松地部署和集中操作完整的CDH堆栈和其他托管服务。该应用程序自动化安装过程,将部署时间从几周减少到几分钟;提供集群范围内主机和服务运行的实时视图;提供单一的中央控制台来执行跨集群的配置更改;并整合了一系列的报告和诊断工具,以帮助您优化性能和利用率。本入门介绍了Cloudera Manager的基本概念、结构和功能。

1)Terminology(术语)

为了有效地使用Cloudera Manager,您应该首先理解它的术语。这些术语之间的关系如下所示,它们的定义如下:

  • deployment

Cloudera Manager和它管理的所有集群的配置。

  • dynamic resource pool(动态资源池)

在Cloudera Manager中,一个命名的资源配置和一个用于在YARN应用程序或池中运行的Impala查询之间调度资源的策略。

  • cluster
    1. 一组包含HDFS文件系统的计算机或机架,并在该数据上运行MapReduce和其他进程。伪分布式集群是运行在一台机器上的CDH安装,对于演示和个人研究非常有用。
    2. 在Cloudera Manager中,包含一组主机的逻辑实体、安装在主机上的单一版本的CDH,以及运行在主机上的服务和角色实例。一个主机只能属于一个集群。Cloudera Manager可以管理多个CDH集群,但每个集群只能与单个Cloudera Manager服务器或Cloudera Manager HA对关联。
  • host

在Cloudera Manager中,运行角色实例的物理或虚拟机。一个主机只能属于一个集群。

  • rack

在Cloudera Manager中,包含一组物理主机的物理实体,通常由同一台交换机提供服务。

  • service

    1. Linux命令,运行/etc/init目录下System V init脚本在尽可能可预测的环境中,删除大多数环境变量,并将当前工作目录设置为/。
    2. clouddera Manager中的一类托管功能,可以是分布式的,也可以不是,在集群中运行。有时称为服务类型。例如:MapReduce、HDFS、YARN、Spark、Accumulo。在传统环境中,多个服务运行在一台主机上;在分布式系统中,一个服务运行在许多主机上。
  • service instance

在Cloudera Manager中,集群中运行的服务实例。例如:“HDFS-1”、“yarn”。一个服务实例跨越多个角色实例。

  • role

在Cloudera Manager中,服务中的一个功能类别。例如,HDFS服务的角色有:NameNode、SecondaryNameNode、DataNode、Balancer。有时称为角色类型。

  • role instance

在Cloudera Manager中,运行在主机上的角色实例。它通常映射到Unix进程。例如:“NameNode-h1”、“DataNode-h1”。

  • role group

在Cloudera Manager中,一组角色实例的一组配置属性。

  • host template

Cloudera Manager中的一组角色组。将模板应用到主机时,每个角色组中会创建一个角色实例,并分配给该主机。

  • gateway

    1. 一种角色类型,通常为客户端提供对特定集群服务的访问。例如,HDFS、Hive、Kafka、MapReduce、Solr、Spark都有网关角色,为客户端提供对各自服务的访问。网关角色的名称中并不总是包含“网关”,也不是仅供客户端访问。例如,Hue Kerberos Ticket Renewer是一个网关角色,它从Kerberos代理票据。
    2. 支持一个或多个网关角色的节点有时被称为网关节点或边缘节点,“边缘”的概念在网络或云环境中很常见。对于Cloudera集群,当从Cloudera Manager管理控制台的Actions菜单中选择Deploy client configuration时,集群中的网关节点接收适当的客户端配置文件。
  • parcel

一种二进制发布格式,包含已编译代码和元信息,如包描述、版本和依赖关系。

  • static service pool(静态服务池)

在Cloudera Manager中,对一组服务的总集群资源(cpu、内存和I/O权重)进行静态分区。

2)Architecture(架构)

如下图所示,Cloudera Manager的核心是Cloudera Manager Server。服务器承载管理控制台Web Server和应用程序逻辑,并负责安装软件、配置、启动和停止服务,以及管理服务运行的集群。

Cloudera Manager服务器与其他几个组件一起工作:

  • Agent——安装在每台主机上。代理负责启动和停止进程、解包配置、触发安装和监视主机。
  • Management Service——由一组角色组成的服务,这些角色执行各种监视、警报和报告功能。
  • **Database **——存储配置和监控信息。通常,多个逻辑数据库在一个或多个数据库服务器上运行。例如,Cloudera Manager Server和监控角色使用不同的逻辑数据库。
  • Cloudera Repository——由clouddera Manager发布的软件存储库。
  • Clients——是与服务器交互的接口:
    1. Admin Console——基于web的UI,管理员可以使用它管理集群和Cloudera Manager。
    2. API ——开发人员用来创建自定义Cloudera Manager应用程序的API。

3)心跳检测

  • 心跳是Cloudera Manager中的主要通信机制。默认情况下,代理每15秒向Cloudera Manager服务器发送一次心跳。然而,为了减少用户延迟,当状态发生变化时,频率会增加。
  • 在心跳交换期间,Agent通知Cloudera Manager Server它的活动。然后,Cloudera Manager Server响应Agent应该执行的操作。代理和Cloudera Manager服务器最终都进行了一些协调。例如,如果启动一个服务,Agent会尝试启动相关的进程;如果进程启动失败,则Cloudera Manager Server将启动命令标记为失败。

4)State Management(状态管理)

Cloudera Manager Server维护集群的状态。这种状态可以分为两类:“模型”“运行时”,两者都存储在Cloudera Manager Server数据库中。

5)Configuration Management(配置管理)

Cloudera Manager定义了几个级别的配置:

  • 服务级别可以定义应用于整个服务实例的配置,例如HDFS服务的默认复制因子(dfs.replication)。
  • 角色组级别可以定义应用于成员角色的配置,例如datanode的处理程序计数(dfs.datanode.handler.count)。对于不同组的datanode,可以进行不同的设置。例如,运行在性能更好的硬件上的datanode可能有更多的处理器。
  • 角色实例级别可以覆盖它从其角色组继承的配置。这应该谨慎使用,因为它很容易导致角色组内的配置分歧。一个示例用法是在特定角色实例中临时启用调试日志记录以排除问题。
  • 主机具有监控、软件管理、资源管理等相关配置。
  • Cloudera Manager本身拥有与其管理操作相关的配置。

1、Host Templates(主机模板)

在典型的环境中,主机集具有相同的硬件和运行在其上的相同的服务集。主机模板在集群中定义了一组角色组(每种类型最多一个),主要有两个好处:

  • 将新主机添加到集群中很容易——多个主机可以在单个操作中创建、配置和启动不同服务的角色。
  • 轻松更改——组主机上不同服务的角色配置,这有助于快速切换整个集群的配置,以适应不同的工作负载或用户。

2、Server and Client Configuration(服务器和客户端配置)

  • 管理员有时会感到惊讶,修改/etc/hadoop/conf,然后重启HDFS没有效果。这是因为由Cloudera Manager启动的服务实例不会从默认位置读取配置。以HDFS为例,当不被Cloudera Manager管理时,每台主机通常会有一个HDFS配置,位于/etc/hadoop/conf/hdfs-site.xml。在同一主机上运行的服务器端守护进程和客户端都将使用相同的配置。
  • Cloudera Manager区分了服务器配置和客户端配置。对于HDFS,“/etc/hadoop/conf/hdfs-site.xml”文件中只包含与HDFS客户端相关的配置。也就是说,默认情况下,如果您运行一个需要与Hadoop通信的程序,它将从该目录获取NameNode和JobTracker的地址,以及其他重要配置。/etc/hbase/conf和/etc/hive/conf采用了类似的方法。
  • 相反,HDFS角色实例(例如NameNode和DataNode)从私有的每进程目录(/var/run/cloudera-scm-agent/process/unique-process-name)中获取配置。为每个进程提供自己的私有执行和配置环境,允许Cloudera Manager独立控制每个进程。例如,879-hdfs-NAMENODE进程目录的内容如下:
$ tree -a /var/run/cloudera-scm-Agent/process/879-hdfs-NAMENODE/
  /var/run/cloudera-scm-Agent/process/879-hdfs-NAMENODE/
  ├── cloudera_manager_Agent_fencer.py
  ├── cloudera_manager_Agent_fencer_secret_key.txt
  ├── cloudera-monitor.properties
  ├── core-site.xml
  ├── dfs_hosts_allow.txt
  ├── dfs_hosts_exclude.txt
  ├── event-filter-rules.json
  ├── hadoop-metrics2.properties
  ├── hdfs.keytab
  ├── hdfs-site.xml
  ├── log4j.properties
  ├── logs
  │   ├── stderr.log
  │   └── stdout.log
  ├── topology.map
  └── topology.py

区分服务器和客户端配置提供了几个优点:

  • 服务器端配置中的敏感信息,如Hive Metastore RDBMS的密码,不会泄露给客户端。
  • 依赖于另一个服务的服务可以使用自定义配置进行部署。
  • 客户机配置文件要小得多,可读性也更好。这也避免了将非管理员Hadoop用户与不相关的服务器端属性混淆。

3、部署客户端配置和网关

  • 客户端配置是包含服务设置的相关配置文件的zip文件。每个zip文件包含服务所需的一组配置文件。
  • Cloudera Manager可以在集群中部署客户端配置;每个适用的服务都有一个Deploy Client Configuration操作。此操作并不一定要将客户端配置部署到整个集群;它只将客户端配置部署到该服务已分配给的所有主机。
  • 要将客户端配置部署到没有为其分配角色的主机,您需要使用网关。网关是一个标记,用来表示服务应该可以从特定的主机访问。与所有其他角色不同,它没有关联的进程。
  • 网关也可以为某些主机定制客户端配置。网关可以放置在角色组中,这些组可以进行不同的配置。然而,与角色实例不同的是,无法覆盖网关实例的配置。
  • 在我们前面讨论过的集群中,没有Hive角色实例的三个主机(tcdn501-[2-5])拥有Hive网关:

6)部署客户端配置和网关

  • 在一个非cloudera Manager管理的集群中,你很可能使用init脚本启动一个角色实例进程,例如service hadoop-hdfs-datanode start。Cloudera Manager不为它管理的守护进程使用init脚本;在由Cloudera Manager管理的集群中,使用init脚本启动和停止服务是无效的。

  • 在由Cloudera Manager管理的集群中,只能通过Cloudera Manager启动或停止角色实例进程。Cloudera Manager使用一个名为supervisor的开源进程管理工具,该工具启动进程,负责重定向日志文件、通知进程失败、将调用进程的有效用户ID设置为正确的用户,等等。Cloudera Manager支持自动重启崩溃的进程。如果一个角色实例的进程在启动后多次崩溃,它还会用一个糟糕的健康状况标志来标记它。

  • 停止Cloudera Manager服务器和Cloudera Manager代理不会导致服务停止;任何正在运行的角色实例都将继续运行。

  • Agent以init方式启动。d在启动。然后,它又与Cloudera Manager Server联系,确定应该运行哪些进程。Agent作为Cloudera Manager主机监控的一部分被监控。如果Agent停止心跳,主机将被标记为健康状态不良。

  • Agent的主要职责之一是启动和停止流程。当Agent从Server heartbeat中检测到一个新进程时,Agent会在/var/run/cloudera-scm-agent中为它创建一个目录,并解包配置。然后它联系监督者,监督者开始这个过程。

  • 这些行动强化了一个重要的观点:Cloudera Manager流程从不单独运行。换句话说,进程不仅仅是exec()的参数,它还包括配置文件、需要创建的目录和其他信息。

7)软件分发管理

Cloudera Manager的一个主要功能是安装和升级CDH和其他托管服务。Cloudera Manager支持两种软件分发格式:packages and parcels

  • 包是一种二进制发布格式,包含编译后的代码和元信息,比如包描述、版本和依赖关系。包管理系统评估这个元信息,以允许包搜索、升级到新版本,并确保包的所有依赖项都得到满足。Cloudera Manager为每个支持的操作系统使用本地系统包管理器。

包是一种二进制分发格式,包含程序文件,以及Cloudera Manager使用的额外元数据。包裹和包裹之间的重要区别是:

  • 包裹是自包含的,并且安装在一个版本控制的目录中,这意味着一个给定包裹的多个版本可以同时安装。然后,您可以将这些已安装版本中的一个指定为活动版本。对于包,一次只能安装一个包,因此安装的包和活动的包之间没有区别。
  • 滚动升级需要包裹。
  • 您可以在文件系统的任何位置安装包。它们默认安装在/opt/cloudera/ packages目录下。相反,包安装在/usr/lib目录下。

8)主机管理

  • Cloudera Manager提供了几个特性来管理Hadoop集群中的主机。第一次运行Cloudera Manager Admin Console时,您可以搜索要添加到集群中的主机,一旦主机被选中,您就可以将CDH角色的分配映射到主机。Cloudera Manager自动部署集群中所有需要作为托管主机参与的软件:JDK、Cloudera Manager Agent、CDH、Impala、Solr等。
  • 部署并运行服务之后,管理控制台中的Hosts区域将显示集群中受管理主机的总体状态。包括主机上运行的CDH版本、主机所属集群、主机上运行的角色数量。Cloudera Manager提供参与主机的生命周期管理、主机的添加、删除等操作。Cloudera Management Service Host Monitor角色执行运行状况测试并收集主机指标,以便监控主机的运行状况和性能。

9)资源管理

资源管理通过定义不同服务对集群资源的影响,帮助确保可预测的行为。使用资源管理:

  • 保证在合理的时间内完成关键的工作负荷。
  • 支持基于组间资源公平分配的用户组间合理的集群调度。
  • 防止用户剥夺其他用户对集群的访问权限。

使用cgroups静态分配资源可以通过单个静态服务池向导进行配置。您按总资源的百分比分配服务,向导配置cgroup。

以下图为例,HBase、HDFS、Impala、YARN服务的静态池分别分配20%、30%、20%、30%的集群资源为例。

通过使用动态资源池,可以动态分配静态分配给YARN和Impala的资源。

根据你使用的CDH版本,clouddera Manager中的动态资源池支持以下场景:

  • YARN——YARN管理虚拟核、内存、运行的应用程序、未声明的子池(父池)的最大资源,以及每个池的调度策略。在前面的图中,为YARN定义了三个动态资源池Dev、Product和Mktg,权重分别为3、2和1。如果一个应用程序启动并分配给Product池,而其他应用程序正在使用Dev和Mktg池,则Product资源池将接收到集群总资源的30% x 2/6(或10%)。如果没有应用程序使用Dev和Mktg池,YARN Product池将分配30%的集群资源。
  • Impala——Impala为运行查询的池管理内存,并限制每个池中运行查询和排队查询的数量。

10)用户管理

Cloudera Manager提供了几种用户身份验证机制。您可以配置Cloudera Manager,根据Cloudera Manager数据库或外部身份验证服务对用户进行身份验证。外部认证服务可以是LDAP服务器(Active Directory或OpenLDAP兼容目录),也可以指定其他外部服务。Cloudera Manager还支持使用安全断言标记语言(SAML)来支持单点登录。

11)安全管理

Cloudera Manager致力于整合多个项目的安全配置。身份验证是一个过程,在尝试访问系统资源时,用户和服务需要证明他们的身份。组织通常通过各种经过时间考验的技术来管理用户身份和身份验证,包括用于身份、目录和其他服务(如组管理)的轻量级目录访问协议(Lightweight Directory Access Protocol, LDAP)和用于身份验证的Kerberos。

12)Cloudera管理服务

Cloudera管理服务以一组角色的形式实现各种管理特性:

  • Activity Monitor——收集MapReduce服务运行的活动的信息。默认不添加此角色。
  • Host Monitor—收集主机的运行状况和度量信息。
  • Service Monitor——从YARN和Impala服务收集有关服务的运行状况和度量信息以及活动信息。
  • Event Server——聚集相关的Hadoop事件,并使它们可用来进行警告和搜索。
  • Alert Publisher——为某些类型的事件生成和发送警报
  • Reports Manager——生成报表,提供用户、用户组、目录的磁盘利用率、用户和YARN池的处理活动、HBase表和命名空间的历史视图。Cloudera Express中未添加此角色。

四、CDH环境部署

1)前期准备

1、机器信息

OS IP hostname 角色
centos7 192.168.182.161 hadoop-cdhmaster-168-182-161 CM server、CM agent、CM deamon、CDH
centos7 192.168.182.162 hadoop-cdhslave01-168-182-162 CM agent、CM deamon、CDH
centos7 192.168.182.163 hadoop-cdhslave02-168-182-163 CM agent、CM deamon、CDH

【温馨提示】centos8会存在不兼容问题

2、修改主机名

$ hostnamectl set-hostname hadoop-cdhmaster-168-182-161
$ hostnamectl set-hostname hadoop-cdhslave01-168-182-162
$ hostnamectl set-hostname hadoop-cdhslave02-168-182-163

3、配置hosts

$ cat >> /etc/hosts << EOF
192.168.182.161  hadoop-cdhmaster-168-182-161
192.168.182.162  hadoop-cdhslave01-168-182-162
192.168.182.163  hadoop-cdhslave02-168-182-163
EOF

4、关掉防火墙

$ systemctl stop firewalld
$ systemctl disable firewalld

5、禁用SELINUX

$ sed -i "s/.*SELINUX=.\*/SELINUX=disabled/g" /etc/selinux/config

6、时间同步

$ yum -y install chrony
$ systemctl start chronyd
$ chronyc sources -v
# 同步硬件时钟到系统时钟
$ hwclock --systohc
# 检测时间
$ timedatectl

7、安装python

CDH 6中的Hue要求Python 2.7.5或更低,默认包含在RHEL 7兼容的操作系统(os)中。Centos7一般自带了Python 2.7.5了,可以跳过,如果没有,则按下面命令安装。

$ yum install python275
$ ln -s /usr/bin/python2 /usr/bin/python
$ python --version

8、端口

下图概述了Cloudera Manager、Cloudera Navigator和Cloudera Management Service角色使用的一些端口。

Cloudera Manager和Cloudera Navigator使用的端口

点对点包裹分发中使用的端口

更多使用的端口信息,可以参考官方文档:https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cm_ig_ports_cm.html

9、配置免密登录

$ ssh-keygen
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop-cdhmaster-168-182-161
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop-cdhslave01-168-182-162
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop-cdhslave02-168-182-163

9、安装JDK

官方文档

$ yum install java-1.8.0-openjdk-devel -y

【温馨提示】最好按照官方的方式安装jdk,要不然可能会出现服务起不来。

10、交换分区和大页设置

所有集群节点都要执行,禁用交换分区和透明大页,否则会在安装配置 CDH 群集环境检测中报错。

$ sysctl -w vm.swappiness=0
$ echo "vm.swappiness=0" >> /etc/sysctl.conf
$ echo never > /sys/kernel/mm/transparent_hugepage/defrag
$ echo never >/sys/kernel/mm/transparent_hugepage/enabled
$ echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.d/rc.local
$ echo "echo never > /sys/kernel/mm/transparent_hughugepage/enabled" >> /etc/rc.d/rc.local

2)安装CM前期准备

1、组件版本

https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_63_packaging.html#cdh_630_packaging

2、安装Mysql(cdhmaster)

$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
$ rpm -ivh mysql-community-release-el7-5.noarch.rpm
$ yum update -y
# 安装
$ yum install mysql-server -y

配置/etc/my.cnf

$ 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

key_buffer_size = 32M
max_allowed_packet = 16M
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 MySQL, if you enable the binary log and do not set
#a server_id, MySQL 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/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

sql_mode=STRICT_ALL_TABLES
EOF

启动服务

# 启动
$ systemctl start mysqld
$ systemctl status mysqld
# 开机自启动
$ systemctl enable mysqld

# 登录,默认没有密码
$ mysql

设置root密码

$ /usr/bin/mysql_secure_installation

连接验证

3、为 Cloudera 各软件创建数据库

$ mysql -uroot -p -h
密码:123456

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

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

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

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

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

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

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

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

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

# 最后刷新一下
flush privileges;

### 检查
show databases;

4、安装 MySQL JDBC(所有节点)

用于各节点连接数据库,JDBC的版本跟mysql版本对应。

$ mkdir /opt/software/CDH /opt/server/CDH -p
$ cd /opt/software/CDH
$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
$ tar -xf mysql-connector-java-5.1.46.tar.gz
# 必须放在/usr/share/java/这个目录下,没有就创建,而且名字得改成mysql-connector-java.jar 
$ mkdir -p /usr/share/java/
$ cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar /usr/share/java/mysql-connector-java.jar

3)安装 CM Server 和 CM Agent

【温馨提示】cloudera-manager-daemons是守护进程,所有节点都得安装。

1、下载安装包

CDH官方的网站已经无法直接下载安装包了(需要账号密码),也就是说需要钱了,不是免费的了,这里提供百度云下载地址。

链接:https://pan.baidu.com/s/16raZeCbAxoqx6A54Fo3-Nw
提取码:6666

把下载好的压缩包解压,并用python 启动一个本地服务作为本地仓库

$ cd /opt/software/CDH/
$ unzip CDH6.3.2.zip
$ cd CDH6.3.2
$ tar -xf  cm6.3.1-redhat7.tar.gz
$ python -m SimpleHTTPServer 8080


配置本地yum源(所有节点)

$ cat > /etc/yum.repos.d/cloudera-manager.repo << EOF
[cloudera-manager]
name=Cloudera-Manager
baseurl=http://hadoop-cdhmaster-168-182-161:8080/cm6.3.1/
gpgcheck=0
enabled=1
EOF

# 清除缓存并生成新的缓存
$ yum clean all
$ yum makecache

2、安装CM Server 和Agent(cdhmaster)

$ yum install -y cloudera-manager-agent cloudera-manager-daemons cloudera-manager-server

3、安装CM Agent(其它节点)

$ yum install -y cloudera-manager-agent cloudera-manager-daemons

4、CM 数据库初始化

# /opt/cloudera/cm/schema/scm_prepare_database.sh <databaseType> <databaseName> <databaseUser> <password>
$ /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm root 123456

会去修改CM server的db配置文件/etc/cloudera-scm-server/db.properties

4、修改CM agent配置

# 修改server_host,跟CM心态检测,根据自己的主机名来修改
$ sed -i '/server_host=/cserver_host=hadoop-cdhmaster-168-182-161' /etc/cloudera-scm-agent/config.ini

5、启动CM服务(CM节点)

$ systemctl start cloudera-scm-server
$ systemctl status cloudera-scm-server
$ jps
# 会启动端口7180的服务,服务启动有点慢,需要等待一段时间
netstat -tnlp|grep 7180
# 日志目录:/var/log/cloudera-scm-server/

6、启动agent(所有节点)

$ systemctl start cloudera-scm-agent
$ systemctl status cloudera-scm-agent
# 日志目录:/var/log/cloudera-scm-agent/

4)通过CM web安装CDH 6.3.2

web UI访问(账号/密码):http://hadoop-cdhmaster-168-182-161:7180/


1、用户协议

2、版本选择

因为CDH本身就是商业版,所以需要高级功能还是需要收费的,这里选择免费版

下面这个页面需要点时间,耐心等待一下

3、修改集群名称

4、选择集群机器

【温馨提示】需要安装CM agent才会显示,如果看不到,请检查CM agent服务是否正常。

5、创建本地仓库目录和本地安装目录

$ cd /opt/server/CDH
$ mkdir cloudera/parcels -p
$ mkdir cloudera/parcel-repo -p

把上面的离线包里的这些文件提前放在/opt/server/CDH/cloudera/parcel-repo目录下

$ cp /opt/software/CDH/CDH6.3.2/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel* /opt/server/CDH/cloudera/parcel-repo/
$ cp /opt/software/CDH/CDH6.3.2/manifest.json /opt/server/CDH/cloudera/parcel-repo/
$ ll /opt/server/CDH/cloudera/parcel-repo/
# 目录需要写入权限
$ chmod 777 /opt/server/CDH/cloudera/parcel-repo

6、配置本地仓库和本地安装目录


这里也加一个本地仓库地址,怎么启动本地仓库服务,上面有讲,这里就不再重复了。哪个快会自动选择哪个。也可以不加,看自己选择


6、自动下载分配解压激活

这里需要比较长的时间,请耐心等待,自动完成后会自动跳转到下一步。


7、检查

没问题的话,就直接下一步了。

到这里安装包已经完成下载、分配、解压、激活的操作了,接下来才是正真安装CDH组件相关的服务

8、安装CDH组件

选择组件组合,也可以自定义,这里我选择自定义

9、自定义角色分配

有些是自动分配的,有些没分配的就得手动配置机器,hive 选择的机器需要选择mysql的机器,要不然检测到机器上没有mysql,就会有问题。

10、数据库设置

11、审核更改

默认就行,直接下一步

12、开始安装

组件安装并自动启动,时间有点久,等待即可



到此CDH 6.3.2环境部署就完成了,后面会有更多关于其它组件集成到CDH的文章,请小伙伴耐心等待,有什么问题或者意见欢迎给我留言~

posted @ 2022-05-18 22:25  大数据老司机  阅读(3402)  评论(0编辑  收藏  举报