大数据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版本

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

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

2)CDH特点

二、CDH组件介绍

1)Hive

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

2)Impala

1、Impala 优势

2、工作原理

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

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

3、Impala查询原理

4、Impala的特性

3)Kudu

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

1、Kudu 优势

2、Kudu-Impala集成

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

5)Sentry

6)Spark

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

三、Cloudera Manager

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

1)Terminology(术语)

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

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

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

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

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

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

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

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

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

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

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

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

2)Architecture(架构)

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

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

3)心跳检测

4)State Management(状态管理)

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

5)Configuration Management(配置管理)

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

1、Host Templates(主机模板)

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

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

$ 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

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

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

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

7)软件分发管理

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

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

8)主机管理

9)资源管理

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

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

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

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

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

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管理服务以一组角色的形式实现各种管理特性:

四、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的文章,请小伙伴耐心等待,有什么问题或者意见欢迎给我留言~