热门推荐
Cloudera Manager搭建
2025-01-12 00:09

第1章 数仓之Cloudera Manager

1.1 CM简介
1.1.1 Cloudera Manager简介

Cloudera Manager(简称CM)是一个集群管理工具,具备自动化安装、中心化管理、集群监控及报警等功能。它能够将集群的安装时间从几天缩短至几个小时,并将运维人员从数十人减少到几人以内,极大地提高了集群管理的效率。

1.2 服务器准备
1.2.1 ECS配置及安全组修改
1. 修改实例规格(如有需要
  1. 停止实例。

  2. 更改实例规格(注意:抢占式实例不支持更改规格,需确认使用按量付费或包年包月实例)。

  3. 启动实例。

2. 修改安全组策略

确保以下端口在安全组中开放,以便Cloudera Manager及相关服务正常通信

服务端口Cloudera Manager Server7180Cloudera Manager Agent7182HDFS NameNode (WebUI)50070YARN ResourceManager8088HiveServer2 (WebUI)10000Ranger Server6080Spark History Server18081Flink (Standalone WebUI)8081Azkaban8443PostgreSQL5432

提示:可以使用以下JSON文件直接导入安全组规则。(请根据实际需求调整

1.3 CM部署前准备
1.3.1 连接云服务器

使用SSH客户端(如PuTTY或CRT)进行远程连接。以下以CRT为例

  1. 新建一个Session。

  2. 填写主机名(公网IP地址)和SSH端口(默认22)。

  3. 配置用户名和认证方式(密码或密钥)。

1.3.2 修改文件

在所有ECS实例上执行以下操作

# 安装lrzsz工具
yum -y install lrzsz

# 编辑hosts文件
vim /etc/hosts

添加以下地址映射及FQDN(完全限定域名,确保各节点之间互相解析

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.18.28.136 bindata01 bindata01
172.18.28.132 bindata02 bindata02
172.18.28.134 bindata03 bindata03
172.18.28.135 bindata04 bindata04
172.18.28.133 bindata05 bindata05

注意:请根据实际的私有IP地址进行修改。完成后,可以通过 命令测试节点间的连通性。

1.3.3 解决SSH连接频繁断开问题

编辑SSH配置文件以保持连接

vim /etc/ssh/sshd_config

找到并修改以下参数

ClientAliveInterval 30
ClientAliveCountMax 1800

保存并退出后,重启SSH服务

service sshd restart
1.3.4 SSH免密登录

为了方便集群内文件分发和管理,配置各节点之间的SSH免密登录。

在节点上执行

  1. 生成SSH密钥对

    ssh-keygen -t rsa

    按回车键接受默认路径和空密码。

  2. 将公钥复制到目标节点

    ssh-copy-id bindata01
    ssh-copy-id bindata02
    ssh-copy-id bindata03
    ssh-copy-id bindata04
    ssh-copy-id bindata05
  3. 重复以上步骤,在、、、节点上配置对所有节点的免密登录。

1.3.5 集群同步脚本

创建一个脚本用于在集群内同步文件。

  1. 在目录下创建目录并进入

    mkdir /root/bin
    cd /root/bin
  2. 创建脚本

    vi xsync

    添加以下内容

    #!/bin/bash
    # 获取参数个数
    pcount=$#
    if (( pcount == 0 )); then
        echo "No arguments provided."
        exit 1
    fi
    
    # 获取文件名称和路径
    p1=$1
    fname=$(basename "$p1")
    pdir=$(cd -P "$(dirname "$p1")"; pwd)
    
    # 获取当前用户
    user=$(whoami)
    
    # 循环同步到其他节点
    for host in bindata02 bindata03 bindata04 bindata05; do
        echo "------------------- $host -------------------"
        rsync -av "$pdir/$fname" "$user@$host:$pdir"
    done
  3. 赋予执行权限

    chmod +x xsync
1.3.6 集群整体操作脚本

创建一个脚本用于在所有节点上执行命令。

  1. 在目录下创建

    vi xcall.sh

    添加以下内容

    #!/bin/bash
    
    for i in bindata01 bindata02 bindata03 bindata04 bindata05; do
        echo "--------- $i ---------"
        ssh "$i" "$*"
    done
  2. 赋予执行权限

    chmod +x xcall.sh
1.3.7 安装JDK(所有节点
  1. 在节点上创建目录

    mkdir -p /opt/module /opt/software
  2. 上传JDK安装包 到 目录,并安装

    rpm -ivh /opt/software/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
  3. 配置环境变量

    vim /etc/profile.d/my_env.sh

    添加以下内容

    export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin
  4. 使环境变量生效

    source /etc/profile.d/my_env.sh
    java -version
  5. 分发JDK到其他节点并加载环境变量

    xsync /usr/java/
    xsync /etc/profile.d/my_env.sh

    在每个节点上执行

    source /etc/profile.d/my_env.sh
  6. 验证Java安装

    xcall.sh java -version
1.3.8 安装MySQL

注意:请确保以root用户执行以下步骤。

  1. 卸载已有MySQL

    检查是否已安装MySQL

    rpm -qa | grep -i mysql

    如已安装,卸载MySQL

    rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
    yum remove mysql-libs -y
  2. 安装MySQL依赖

    yum install libaio autoconf unzip -y
  3. 下载并安装MySQL

    cd /opt/software/
    wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-shared-compat-5.6.24-1.el6.x86_64.rpm
    wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-shared-5.6.24-1.el6.x86_64.rpm
    rpm -ivh MySQL-shared-compat-5.6.24-1.el6.x86_64.rpm
    rpm -ivh MySQL-shared-5.6.24-1.el6.x86_64.rpm
  4. 上传并安装MySQL服务器

    # 上传mysql-libs.zip到/opt/software
    cd /opt/software/
    unzip mysql-libs.zip
    cd mysql-libs
    rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
  5. 启动MySQL服务

    service mysql start
  6. 配置MySQL

    mysql -uroot -p$(cat /root/.mysql_secret)

    在MySQL命令行中

    SET PASSWORD=PASSWORd('000000');
    EXIT;
  7. 配置允许远程访问

    mysql -uroot -p000000

    在MySQL命令行中

    USE mysql;
    UPDATE user SET host='%' WHERe user='root';
    DELETE FROM user WHERe user='root' AND host!='%';
    FLUSH PRIVILEGES;
    EXIT;
1.3.9 CM安装部署
1.3.9.1 在MySQL中创建数据库

登录MySQL并执行以下命令

CREATE DATAbase scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATAbase hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATAbase oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATAbase hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue';
FLUSH PRIVILEGES;
1.3.9.2 安装Cloudera Manager
  1. 准备安装包

    在节点上

    mkdir /opt/cloudera-manager
    cd /opt/software/
    tar -zxvf cm6.3.1-redhat7.tar.gz
    cd cm6.3.1/RPMS/x86_64/
    mv cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm /opt/cloudera-manager/
    mv cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm /opt/cloudera-manager/
    mv cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm /opt/cloudera-manager/
    cd /opt/cloudera-manager/
  2. 安装Cloudera Manager Daemons

    rpm -ivh cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm

    同步到其他节点

    cd /opt/
    xsync /opt/cloudera-manager/

    在每个节点(bindata02-bindata05)上安装

    rpm -ivh /opt/cloudera-manager/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
  3. 安装Cloudera Manager Agent

    在所有节点上执行

    yum install bind-utils psmisc cyrus-sasl-plain cyrus-sasl-gssapi fuse portmap fuse-libs lsb-core httpd mod_ssl openssl-devel python-psycopg2 MySQL-python libxslt -y
    rpm -ivh cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
  4. 配置Cloudera Manager Agent

    编辑,将设置为

    server_host=bindata01

    在所有节点上重复此操作。

  5. 安装Cloudera Manager Server

    在节点上执行

    rpm -ivh cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
  6. 上传CDH包到Parcel Repository

    cd /opt/cloudera/parcel-repo
    mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
  7. 配置数据库

    编辑

    com.cloudera.cmf.db.type=mysql
    com.cloudera.cmf.db.host=bindata01
    com.cloudera.cmf.db.name=scm
    com.cloudera.cmf.db.user=scm
    com.cloudera.cmf.db.password=scm
    com.cloudera.cmf.db.setupType=EXTERNAL
  8. 初始化数据库并启动服务

    /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
    systemctl start cloudera-scm-server
    tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
  9. 启动Cloudera Manager Agent

    在所有节点上执行

    systemctl start cloudera-scm-agent
1.3.10 Cloudera Manager的集群部署
  1. 访问Cloudera Manager Web UI

    在浏览器中访问 ,使用默认用户名和密码(通常为admin/admin)登录。

  2. 接受条款和协议

    在首次登录时,接受相关的条款和协议。

  3. 集群安装向导

    按照向导步骤进行

    • 选择安装类型:选择 自定义安装 以便更灵活地配置各组件。

    • 选择安装服务:选择需要安装的服务(如HDFS、YARN、Hive等)。

    • 分配节点:指定各服务运行的节点。

    • 集群设置:大部分设置可保持默认,必要时根据需求调整。

    • 启动进程:选择自动启动相关进程。

  4. 配置HDFS权限检查

    在Cloudera Manager中,导航到HDFS配置,关闭权限检查

    dfs.permissions=false
  5. 配置NameNode HA

    1. 进入HDFS页面,点击 启用High Availability

    2. 设置命名服务名称(如 )。

    3. 分配Active和Standby NameNode角色。

    4. 审核更改并应用配置。

    5. 等待服务启动完成。

  6. 配置YARN HA

    按照类似NameNode HA的步骤,配置YARN ResourceManager的高可用性。

  7. 优化系统参数

    在所有节点上执行以下命令,关闭Transparent Huge Pages(THP

    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    可将这些命令添加到 以确保重启后依然有效。

1.3.11 安全性与优化
  1. 设置防火墙规则:根据实际需求,进一步细化安全组规则,限制不必要的端口开放。

  2. 定期备份配置和数据库:确保在发生故障时能够快速恢复。

  3. 监控集群健康状态:使用Cloudera Manager的监控功能,及时发现和处理潜在问题。

1.4 常见问题与解决方案
1.4.1 SSH连接频繁断开

问题:云服务器SSH连接经常在一段时间后断开。

解决方案

  1. 编辑文件,修改以下参数

    ClientAliveInterval 30
    ClientAliveCountMax 1800
  2. 重启SSH服务

    service sshd restart
1.4.2 防火墙阻止必要端口

问题:部分服务无法访问,可能是防火墙阻止了必要端口。

解决方案

  1. 检查防火墙状态

    systemctl status firewalld
  2. 开放必要端口

    firewall-cmd --permanent --add-port=7180/tcp
    firewall-cmd --permanent --add-port=8080/tcp
    # 根据需要开放其他端口
    firewall-cmd --reload
1.4.3 Cloudera Manager服务启动失败

问题:Cloudera Manager Server或Agent无法启动。

解决方案

  1. 检查日志文件

    tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
    tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
  2. 确认数据库连接配置正确。

  3. 确保所有依赖包已正确安装。

第2章 数仓之数据采集模块

本章将介绍如何安装和配置HDFS、YARN、Zookeeper、Kafka及Flume等数据采集相关组件。这些组件是构建大数据生态系统的基础,负责数据的存储、资源管理以及实时数据流处理。

2.1 HDFS、YARN、Zookeeper安装
2.1.1 选择自定义安装

在Cloudera Manager的集群安装向导中,建议选择自定义安装,以便根据实际需求灵活配置各个组件。

  1. 登录Cloudera Manager Web UI。

  2. 进入集群安装向导

  3. 选择安装类型步骤,选择自定义安装,然后点击继续

2.1.2 选择安装服务

在自定义安装模式下,选择需要安装的服务组件。

  1. 选择安装服务

    页面,勾选以下服务

    • HDFS:负责分布式文件存储。

    • YARN:资源管理与任务调度。

    • Zookeeper:分布式协调服务。

  2. 确认选择后,点击继续

2.1.3 分配节点

为各个服务分配集群中的节点。

  1. HDFS

    • NameNode:选择作为主NameNode。

    • Secondary NameNode:选择作为Secondary NameNode。

  2. YARN

    • ResourceManager:选择作为主ResourceManager。

    • NodeManager:选择所有节点(至)作为NodeManager。

  3. Zookeeper

    • Zookeeper Server:选择和作为Zookeeper的服务器节点。

完成分配后,点击继续

2.1.4 集群设置全部选默认即可

集群设置页面,建议大部分设置保持默认,除非有特定需求需要调整。

  1. 确认各项参数设置正确。

  2. 点击继续进入下一步。

2.1.5 自动启动进程

配置集群服务的启动方式。

  1. 启动进程页面,选择自动启动所有服务

  2. 确认设置后,点击继续

2.1.6 修改HDFS的权限检查配置

为了简化权限管理,可以关闭HDFS中的权限检查。

  1. 在Cloudera Manager中,导航到HDFS服务。

  2. 点击配置选项卡。

  3. 搜索。

  4. 将设置为。

  5. 保存更改并重新启动HDFS服务以应用配置。

2.1.7 配置NameNode HA

高可用的NameNode配置可以避免单点故障,提高集群的可靠性。

  1. 在Cloudera Manager中,导航到HDFS服务。

  2. 点击配置,搜索并启用High Availability选项。

  3. 设置命名服务名称,例如。

  4. 分配两个NameNode角色

    • Active NameNode

    • Standby NameNode

  5. 配置Zookeeper用于HA管理。

  6. 审核更改并应用配置,等待NameNode HA服务启动完成。

2.1.8 配置YARN HA

类似于NameNode HA,配置YARN ResourceManager的高可用性。

  1. 在Cloudera Manager中,导航到YARN服务。

  2. 点击配置,搜索并启用ResourceManager High Availability选项。

  3. 分配两个ResourceManager角色

    • Active ResourceManager

    • Standby ResourceManager

  4. 配置Zookeeper用于YARN HA管理。

  5. 审核更改并应用配置,等待YARN HA服务启动完成。

2.2 Kafka安装

Kafka是一个分布式流处理平台,常用于实时数据的采集和处理。本节将介绍如何在集群中安装和配置Kafka。

2.2.1 Kafka安装

为了节省时间,推荐使用离线包进行Kafka的安装。

  1. 下载Kafka离线安装包

    在Cloudera Manager的下载页面或Kafka官方网站下载适用于CDH的Kafka离线包。例如:。

  2. 上传安装包到集群

    使用脚本将Kafka安装包上传到所有节点的指定目录。

    xsync /opt/software/kafka-2.8.0.tgz
  3. 解压安装包

    在每个节点上执行以下命令解压Kafka安装包

    cd /opt/software/
    tar -zxvf kafka-2.8.0.tgz
  4. 创建Kafka数据目录

    为Kafka创建数据存储目录

    mkdir -p /var/lib/kafka/data
  5. 配置Kafka

    编辑Kafka的配置文件,设置以下参数

    vim /opt/software/kafka-2.8.0/config/server.properties
    broker.id=1
    listeners=PLAINTEXT://bindata01:9092
    log.dirs=/var/lib/kafka/data
    zookeeper.connect=bindata04:2181,bindata05:2181

    注意:根据实际情况调整和的值,每个Kafka Broker应有唯一的。

  6. 启动Kafka服务

    在每个Kafka Broker节点上启动Kafka

    /opt/software/kafka-2.8.0/bin/kafka-server-start.sh -daemon /opt/software/kafka-2.8.0/config/server.properties
2.2.2 查看Kafka Topic

验证Kafka安装是否成功,并查看现有的Topic列表。

/opt/cloudera/parcels/CDH/bin/kafka-topics --zookeeper bindata03:2181 --list
2.2.3 创建 Kafka Topic

创建新的Kafka Topic,用于存储不同类型的日志数据。

  1. 创建测试Topic

    /opt/cloudera/parcels/CDH/bin/kafka-topics --create --bootstrap-server bindata03:9092,bindata04:9092,bindata05:9092 --replication-factor 1 --partitions 1 --topic test
  2. 验证Topic创建

    /opt/cloudera/parcels/CDH/bin/kafka-topics --list --bootstrap-server bindata03:9092,bindata04:9092,bindata05:9092

    应看到 Topic已列出。

2.2.4 删除 Kafka Topic

根据需要,可以删除不再使用的Kafka Topic。

  1. 删除测试Topic

    /opt/cloudera/parcels/CDH/bin/kafka-topics --delete --bootstrap-server bindata03:9092,bindata04:9092,bindata05:9092 --topic test
  2. 验证Topic删除

    /opt/cloudera/parcels/CDH/bin/kafka-topics --list --bootstrap-server bindata03:9092,bindata04:9092,bindata05:9092

    确认 Topic已被删除。

2.3 Flume安装

Flume是一个高可用、高可靠的分布式系统,用于高效地收集、聚合和传输大量日志数据。本节将介绍如何安装和配置Flume。

2.3.1 下载Flume安装包
  1. 下载Flume离线安装包

    在Cloudera Manager的下载页面或Apache Flume官方网站下载适用于CDH的Flume安装包。例如:。

  2. 上传安装包到集群

    使用脚本将Flume安装包上传到所有节点的指定目录。

    xsync /opt/software/apache-flume-1.9.0-bin.tar.gz
2.3.2 解压安装包

在每个Flume节点上执行以下命令解压Flume安装包

cd /opt/software/
tar -zxvf apache-flume-1.9.0-bin.tar.gz
2.3.3 配置Flume
  1. 创建Flume配置文件

    在每个Flume节点上创建Flume的配置文件,例如

    vim /opt/software/apache-flume-1.9.0-bin/conf/flume.conf

    添加以下内容

    # Define the sources, channels, and sinks
    agent1.sources = source1
    agent1.channels = channel1
    agent1.sinks = sink1
    
    # Configure the source
    agent1.sources.source1.type = netcat
    agent1.sources.source1.bind = localhost
    agent1.sources.source1.port = 44444
    
    # Configure the channel
    agent1.channels.channel1.type = memory
    agent1.channels.channel1.capacity = 1000
    agent1.channels.channel1.transactionCapacity = 100
    
    # Configure the sink
    agent1.sinks.sink1.type = hdfs
    agent1.sinks.sink1.hdfs.path = hdfs://bindata01:8020/user/flume/logs
    agent1.sinks.sink1.hdfs.fileType = DataStream
    agent1.sinks.sink1.hdfs.writeFormat = Text
    agent1.sinks.sink1.hdfs.batchSize = 1000
    agent1.sinks.sink1.hdfs.rollSize = 0
    agent1.sinks.sink1.hdfs.rollCount = 10000
    
    # Bind the source and sink to the channel
    agent1.sources.source1.channels = channel1
    agent1.sinks.sink1.channel = channel1

    说明

    • Source:使用Netcat作为数据源,监听本地端口。

    • Channel:使用内存作为数据通道,容量为。

    • Sink:将数据写入HDFS路径。

  2. 启动Flume Agent

    在每个Flume节点上启动Flume Agent

    /opt/software/apache-flume-1.9.0-bin/bin/flume-ng agent --conf /opt/software/apache-flume-1.9.0-bin/conf --conf-file /opt/software/apache-flume-1.9.0-bin/conf/flume.conf --name agent1 -Dflume.root.logger=INFO,console &
  3. 验证Flume运行状态

    使用以下命令查看Flume进程是否在运行

    ps -ef | grep flume

    应看到Flume Agent的相关进程正在运行。

2.3.4 配置Flume自动启动

为了确保Flume在系统重启后自动启动,可以创建系统服务。

  1. 创建Flume服务文件

    在每个Flume节点上创建文件

    vim /etc/systemd/system/flume.service

    添加以下内容

    [Unit]
    Description=Apache Flume Service
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/opt/software/apache-flume-1.9.0-bin/bin/flume-ng agent --conf /opt/software/apache-flume-1.9.0-bin/conf --conf-file /opt/software/apache-flume-1.9.0-bin/conf/flume.conf --name agent1 -Dflume.root.logger=INFO,console
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
  2. 重新加载Systemd配置

    systemctl daemon-reload
  3. 启动并设置Flume服务自启动

    systemctl start flume
    systemctl enable flume
  4. 验证Flume服务状态

    systemctl status flume

    确认服务已成功启动并处于运行状态。

2.3.5 配置Flume与Kafka集成(可选

如果需要将Flume与Kafka集成,以实现更复杂的数据流处理,可以按照以下步骤进行配置。

  1. 编辑Flume配置文件

    vim /opt/software/apache-flume-1.9.0-bin/conf/flume.conf

    修改的Sink配置为Kafka

    agent1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
    agent1.sinks.sink1.kafka.bootstrap.servers = bindata03:9092,bindata04:9092,bindata05:9092
    agent1.sinks.sink1.kafka.topic = flume_kafka_topic
    agent1.sinks.sink1.kafka.batch.size = 20
  2. 重启Flume服务

    systemctl restart flume
  3. 验证Kafka Topic

    确认Flume已将数据写入指定的Kafka Topic

    /opt/cloudera/parcels/CDH/bin/kafka-topics --list --bootstrap-server bindata03:9092,bindata04:9092,bindata05:9092

    应看到已创建。

2.4 Zookeeper安装与配置(补充

虽然Zookeeper在Cloudera Manager安装过程中已经配置,但本节将详细介绍Zookeeper的安装与配置,以确保其高可用性和稳定性。

2.4.1 安装Zookeeper
  1. 下载Zookeeper安装包

    在Cloudera Manager的下载页面或Apache Zookeeper官方网站下载Zookeeper安装包。例如:。

  2. 上传安装包到集群

    使用脚本将Zookeeper安装包上传到所有节点的指定目录。

    xsync /opt/software/zookeeper-3.6.3.tar.gz
  3. 解压安装包

    在每个Zookeeper节点上执行以下命令解压Zookeeper安装包

    cd /opt/software/
    tar -zxvf zookeeper-3.6.3.tar.gz
2.4.2 配置Zookeeper
  1. 创建Zookeeper数据目录

    mkdir -p /var/lib/zookeeper
  2. 配置Zookeeper

    编辑文件

    vim /opt/software/zookeeper-3.6.3/conf/zoo.cfg

    添加或修改以下内容

    tickTime=2000
    dataDir=/var/lib/zookeeper
    clientPort=2181
    initLimit=5
    syncLimit=2
    server.1=bindata04:2888:3888
    server.2=bindata05:2888:3888

    说明

    • server.X:配置Zookeeper集群中的服务器节点,其中是编号,和分别作为Zookeeper的服务器节点。

  3. 配置Zookeeper ID

    在每个Zookeeper服务器节点上,编辑文件

    echo "1" > /var/lib/zookeeper/myid  # bindata04
    echo "2" > /var/lib/zookeeper/myid  # bindata05
  4. 启动Zookeeper服务

    在每个Zookeeper服务器节点上启动Zookeeper

    /opt/software/zookeeper-3.6.3/bin/zkServer.sh start
  5. 验证Zookeeper状态

    使用以下命令检查Zookeeper是否正常运行

    /opt/software/zookeeper-3.6.3/bin/zkServer.sh status

    应显示或。

2.4.3 配置Zookeeper自动启动
  1. 创建Zookeeper服务文件

    在每个Zookeeper服务器节点上创建文件

    vim /etc/systemd/system/zookeeper.service

    添加以下内容

    [Unit]
    Description=Apache Zookeeper Service
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/opt/software/zookeeper-3.6.3/bin/zkServer.sh start
    ExecStop=/opt/software/zookeeper-3.6.3/bin/zkServer.sh stop
    ExecReload=/opt/software/zookeeper-3.6.3/bin/zkServer.sh restart
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
  2. 重新加载Systemd配置

    systemctl daemon-reload
  3. 启动并设置Zookeeper服务自启动

    systemctl start zookeeper
    systemctl enable zookeeper
  4. 验证Zookeeper服务状态

    systemctl status zookeeper

    确认服务已成功启动并处于运行状态。

2.4.4 配置Zookeeper监控与管理
  1. 安装Zookeeper监控工具(如

    Zookeeper自带了命令行监控工具,可以用于检查集群状态。

    /opt/software/zookeeper-3.6.3/bin/zkCli.sh -server bindata04:2181
  2. 常用命令

    • 查看Zookeeper节点列表

      ls /
    • 查看特定节点的数据

      get /zookeeper/quota
    • 退出Zookeeper CLI

      quit


第3章 数仓之数仓搭建环境准备

本章将详细讲解Hive的安装与配置。Hive作为数据仓库系统,提供了SQL-like的查询语言,方便对存储在HDFS中的大规模数据进行分析和处理。

3.1 Hive安装
3.1.1 添加服务
  1. 登录Cloudera Manager Web UI

  2. 进入集群管理页面

    • 点击集群,选择Cluster 1

  3. 添加Hive服务

    • 点击添加服务按钮。

    • 在服务列表中选择Hive,然后点击继续

3.1.2 添加Hive服务
  1. 选择安装位置

    • 选择要安装Hive服务的节点,通常选择一个专用的Hive Server节点,例如。

  2. 确认依赖项

    • Cloudera Manager会自动检测并安装Hive所需的依赖组件,如HDFS和YARN。

  3. 点击 继续 以进入下一步。

3.1.3 将 Hive 服务添加到 Cluster 1
  1. 配置Hive服务

    • 在Hive服务的配置页面,确认各项参数设置正确。

    • 特别注意Hive metastore的数据库配置,确保其指向之前在MySQL中创建的Hive数据库。

  2. 点击 继续 以进入下一步。

3.1.4 配置Hive元数据

Hive依赖于metastore来存储元数据,因此需要正确配置Hive metastore。

  1. 配置数据库连接

    • 在Hive服务配置页面,找到Hive metastore数据库相关配置。

    • 设置数据库类型为。

    • 输入数据库主机、端口、数据库名称、用户名和密码。

    com.cloudera.cmf.db.type=mysql
    com.cloudera.cmf.db.host=bindata01
    com.cloudera.cmf.db.name=hive
    com.cloudera.cmf.db.user=hive
    com.cloudera.cmf.db.password=hive
  2. 初始化Hive metastore数据库

    Cloudera Manager会自动执行初始化脚本,将Hive metastore所需的表结构创建到MySQL数据库中。

  3. 确认配置并应用

    • 点击继续,Cloudera Manager将自动完成Hive服务的安装和配置。

3.1.5 测试通过后继续

在Cloudera Manager完成Hive服务的安装后,进行基本测试以确保服务正常运行。

  1. 访问Hive Web UI

    • Hive Server通常在端口上提供服务。

    • 可以通过Hive CLI或Beeline连接到Hive。

    beeline -u jdbc:hive2://bindata01:10000 -n hive -p hive
  2. 执行简单查询

    SHOW DATAbaseS;

    应显示已创建的数据库列表。

3.1.6 自动启动Hive进程

确保Hive服务在系统启动时自动启动。

  1. 在Cloudera Manager中

    • 导航到Hive服务。

    • 点击配置选项卡。

    • 搜索自动启动相关设置,确保其启用。

  2. 验证自动启动

    • 重启集群节点,确认Hive服务是否随系统自动启动。

3.2 Hive metastore配置(补充

Hive metastore是Hive的核心组件,负责存储数据库、表、分区等元数据信息。以下是进一步优化Hive metastore的配置步骤。

3.2.1 配置Hive metastore连接池
  1. 编辑Hive metastore配置文件

    vim /etc/hive/conf/hive-site.xml
  2. 添加或修改连接池参数

    <property>
        <name>javax.jdo.option.ConnectionPoolMaxTotal</name>
        <value>50</value>
        <description>最大连接数</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPoolMaxIdle</name>
        <value>20</value>
        <description>最大空闲连接数</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPoolMinIdle</name>
        <value>5</value>
        <description>最小空闲连接数</description>
    </property>
3.2.2 配置Hive metastore Thrift服务
  1. 启动Hive metastore Thrift服务

    hive --service metastore &
  2. 配置服务端口

    在中设置Thrift服务的端口(默认)。

    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://bindata01:9083</value>
        <description>Hive metastore Thrift URI</description>
    </property>
  3. 配置防火墙规则

    确保端口在安全组中开放,允许客户端连接。

    firewall-cmd --permanent --add-port=9083/tcp
    firewall-cmd --reload


第4章 Spark安装

Spark是一个高速、通用的大数据处理引擎,适用于批处理、实时流处理以及机器学习等多种场景。CDH 6.x版本自带Spark 2.4,无需额外升级。本章将介绍如何安装和配置Spark。

4.1 安装Spark
4.1.1 确认Spark版本

CDH 6.x自带Spark 2.4,无需手动安装。可以通过Cloudera Manager进行管理和配置。

4.1.2 添加Spark服务
  1. 登录Cloudera Manager Web UI

  2. 进入集群管理页面

    • 点击集群,选择Cluster 1

  3. 添加Spark服务

    • 点击添加服务按钮。

    • 在服务列表中选择Spark,然后点击继续

4.1.3 分配Spark组件
  1. 选择Spark Master和Worker节点

    • Spark Master:选择一台节点(如)作为Spark Master。

    • Spark Worker:选择集群中所有需要运行Spark Worker的节点(至)。

  2. 确认组件分配

    • 确认所有组件分配正确后,点击继续

4.1.4 配置Spark参数
  1. 调整Spark配置

    • 在Spark服务的配置页面,根据集群资源情况调整Spark参数。

    • 例如,设置、等参数,以优化Spark的性能。

  2. 设置Spark与YARN的集成

    • 确保Spark使用YARN作为资源管理器,在中配置相关参数。

4.1.5 启动Spark服务
  1. 应用配置并启动服务

    • Cloudera Manager会根据配置自动启动Spark Master和Worker。

  2. 验证Spark服务状态

    • 在Cloudera Manager中,检查Spark服务的运行状态,确保所有组件均处于运行状态。

4.1.6 测试Spark安装
  1. 提交一个简单的Spark作业

    在Spark Master节点上,运行一个简单的Spark应用程序以验证安装是否成功。

    spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster /opt/cloudera/parcels/CDH/lib/spark/examples/jars/spark-examples.jar 10
  2. 查看作业运行状态

    在Cloudera Manager的Spark Web UI中,查看提交的作业是否成功完成。

4.1.7 配置Spark自动启动

确保Spark服务在系统启动时自动启动。

  1. 在Cloudera Manager中

    • 导航到Spark服务。

    • 点击配置选项卡。

    • 搜索自动启动相关设置,确保其启用。

  2. 验证自动启动

    • 重启集群节点,确认Spark服务是否随系统自动启动。

4.2 Spark优化(可选

根据集群的具体使用场景,可以对Spark进行进一步的优化配置,以提升其性能和资源利用率。

4.2.1 调整Spark内存设置
  1. 编辑Spark配置文件

    在Cloudera Manager中,导航到Spark服务的配置选项卡。

  2. 设置Executor和Driver内存

    • :设置每个Executor的内存大小,例如。

    • :设置Driver的内存大小,例如。

4.2.2 配置动态资源分配
  1. 启用动态资源分配

    spark.dynamicAllocation.enabled=true
    spark.dynamicAllocation.minExecutors=2
    spark.dynamicAllocation.maxExecutors=10
    spark.dynamicAllocation.initialExecutors=2
  2. 配置Shuffle服务

    确保YARN的Shuffle服务已启用,以支持动态资源分配。

4.2.3 配置Spark缓存策略

根据数据访问模式,配置Spark的缓存策略以优化性能。

  1. 设置RDD持久化级别

    在Spark应用程序中,根据需要选择合适的持久化级别(如、等)。

  2. 优化数据分区

    根据数据量和节点资源,调整数据分区数,以平衡负载和资源利用。


第5章 配置OOZIE

Oozie是一个工作流调度系统,用于管理Hadoop作业的依赖关系和执行顺序。本章将介绍如何在CDH集群中添加和配置Oozie服务。

5.1 添加服务
5.1.1 登录Cloudera Manager
  1. 打开Cloudera Manager Web UI。

  2. 进入集群管理页面,选择Cluster 1

5.1.2 添加Oozie服务
  1. 点击添加服务按钮。

  2. 在服务列表中选择Oozie,然后点击继续

5.2 分配节点
5.2.1 选择Oozie服务器节点
  1. Oozie Server

    • 选择一台专用节点(如)作为Oozie Server。

  2. Oozie Client

    • 选择所有需要运行Oozie客户端的节点。

5.2.2 确认组件分配

确认Oozie的各个组件(如Oozie Server、Oozie Client)已正确分配到指定节点后,点击继续

5.3 配置Oozie元数据

Oozie需要一个数据库来存储其元数据信息。以下是配置Oozie元数据的步骤。

5.3.1 在MySQL中创建Oozie数据库
  1. 登录MySQL

    mysql -uroot -p000000
  2. 创建Oozie数据库和用户

    CREATE DATAbase oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';
    FLUSH PRIVILEGES;
    EXIT;
5.3.2 配置Oozie数据库连接
  1. 编辑Oozie配置文件

    Cloudera Manager会自动配置Oozie的数据库连接参数,但需要确认配置是否正确。

    com.cloudera.cmf.db.type=mysql
    com.cloudera.cmf.db.host=bindata01
    com.cloudera.cmf.db.name=oozie
    com.cloudera.cmf.db.user=oozie
    com.cloudera.cmf.db.password=oozie
    com.cloudera.cmf.db.setupType=EXTERNAL
  2. 初始化Oozie数据库

    Cloudera Manager会自动运行初始化脚本,将Oozie的表结构创建到MySQL数据库中。

5.3.3 配置Oozie服务
  1. 设置Oozie Web端口

    默认情况下,Oozie Web UI运行在端口上。可以根据需要调整该端口。

  2. 配置Oozie的内存设置

    根据集群资源情况,调整Oozie的JVM内存参数,以优化性能。

5.3.4 启动Oozie服务
  1. 应用配置并启动服务

    Cloudera Manager会根据配置自动启动Oozie Server和Oozie Client。

  2. 验证Oozie服务状态

    • 在Cloudera Manager中,检查Oozie服务的运行状态,确保所有组件均处于运行状态。

    • 访问Oozie Web UI

5.3.5 配置Oozie服务器端口防火墙

确保Oozie的Web端口在防火墙中开放。

firewall-cmd --permanent --add-port=11000/tcp
firewall-cmd --reload
5.4 自启动Oozie

确保Oozie服务在系统启动时自动启动。

  1. 在Cloudera Manager中

    • 导航到Oozie服务。

    • 点击配置选项卡。

    • 搜索自动启动相关设置,确保其启用。

  2. 验证自动启动

    • 重启集群节点,确认Oozie服务是否随系统自动启动。


第6章 配置HUE

HUE(Hadoop User Experience)是一个基于Web的用户界面,提供对Hadoop生态系统各组件的访问和管理功能。本章将介绍如何在CDH集群中添加和配置HUE服务。

6.1 添加服务
6.1.1 登录Cloudera Manager
  1. 打开Cloudera Manager Web UI。

  2. 进入集群管理页面,选择Cluster 1

6.1.2 添加HUE服务
  1. 点击添加服务按钮。

  2. 在服务列表中选择HUE,然后点击继续

6.2 添加Hue服务
6.2.1 选择安装位置
  1. HUE Server

    • 选择一台专用节点(如)作为HUE Server。

  2. HUE Client

    • 选择所有需要运行HUE客户端的节点。

6.2.2 配置HUE服务
  1. 配置数据库连接

    HUE使用MySQL作为其数据库,确保已在MySQL中创建HUE数据库(见第5章)。

    com.cloudera.cmf.db.type=mysql
    com.cloudera.cmf.db.host=bindata01
    com.cloudera.cmf.db.name=hue
    com.cloudera.cmf.db.user=hue
    com.cloudera.cmf.db.password=hue
    com.cloudera.cmf.db.setupType=EXTERNAL
  2. 设置HUE Web端口

    默认情况下,HUE Web UI运行在端口上。可以根据需要调整该端口。

  3. 配置HUE的内存和并发设置

    根据集群资源情况,调整HUE的JVM内存参数和并发连接数,以优化性能。

6.2.3 启动HUE服务
  1. 应用配置并启动服务

    Cloudera Manager会根据配置自动启动HUE Server和HUE Client。

  2. 验证HUE服务状态

    • 在Cloudera Manager中,检查HUE服务的运行状态,确保所有组件均处于运行状态。

    • 访问HUE Web UI

6.2.4 配置HUE服务的权限
  1. 创建HUE用户

    在HUE Web UI中,创建用于访问Hadoop生态系统的用户账户。

  2. 配置用户权限

    根据业务需求,配置各用户在HDFS、Hive、Spark等组件中的访问权限。

6.3 分配节点
6.3.1 选择HUE服务器节点
  1. HUE Server

    • 通常选择作为HUE Server,以集中管理和访问。

  2. HUE Client

    • 选择所有需要运行HUE客户端的节点(如至)。

6.3.2 确认组件分配

确认HUE的各个组件(如HUE Server、HUE Client)已正确分配到指定节点后,点击继续

6.4 配置Hue元数据

HUE依赖于其数据库来存储用户信息和配置参数,因此需要正确配置HUE的数据库连接。

6.4.1 配置HUE数据库连接
  1. 编辑HUE配置文件

    Cloudera Manager会自动配置HUE的数据库连接参数,但需要确认配置是否正确。

    com.cloudera.cmf.db.type=mysql
    com.cloudera.cmf.db.host=bindata01
    com.cloudera.cmf.db.name=hue
    com.cloudera.cmf.db.user=hue
    com.cloudera.cmf.db.password=hue
    com.cloudera.cmf.db.setupType=EXTERNAL
  2. 初始化HUE数据库

    Cloudera Manager会自动运行初始化脚本,将HUE的表结构创建到MySQL数据库中。

6.4.2 配置HUE与Hive的集成
  1. 编辑HUE配置文件

    vim /etc/hue/conf/hue.ini
  2. 配置Hive服务

    [beeswax]
    hive_server_host=bindata01
    hive_server_port=10000
  3. 重启HUE服务

    systemctl restart hue
6.4.3 配置HUE与Spark的集成
  1. 编辑HUE配置文件

    vim /etc/hue/conf/hue.ini
  2. 配置Spark服务

    [spark]
    spark_server_host=bindata01
    spark_server_port=8088
  3. 重启HUE服务

    systemctl restart hue
6.4.4 配置HUE与Oozie的集成
  1. 编辑HUE配置文件

    vim /etc/hue/conf/hue.ini
  2. 配置Oozie服务

    [oozie]
    oozie_url=http://bindata01:11000/oozie
  3. 重启HUE服务

    systemctl restart hue
6.5 自动启动Hue进程

确保HUE服务在系统启动时自动启动。

  1. 在Cloudera Manager中

    • 导航到HUE服务。

    • 点击配置选项卡。

    • 搜索自动启动相关设置,确保其启用。

  2. 验证自动启动

    • 重启集群节点,确认HUE服务是否随系统自动启动。


第7章 其它配置

本章涵盖了一些高级配置和优化设置,包括HDFS域名访问、资源管理优化、调度器配置等。这些配置旨在提升集群的性能、稳定性和安全性。

7.1 HDFS配置域名访问

在云环境下,Hadoop集群必须使用域名访问,不能直接使用IP地址。为此,需要启用参数。

  1. 编辑HDFS配置文件

    在Cloudera Manager中,导航到HDFS服务的配置选项卡。

  2. 启用域名访问

    搜索并设置以下参数

    dfs.client.use.datanode.hostname=true
  3. 应用配置并重新启动HDFS服务

    Cloudera Manager会提示需要重新启动HDFS相关服务,确认后进行重启。

  4. 验证配置

    使用域名而非IP地址访问HDFS,确保配置生效。

7.2 设置物理核和虚拟核占比

为了优化资源利用,可以根据实际需求调整YARN的物理核和虚拟核的占比。

  1. 编辑YARN配置

    在Cloudera Manager中,导航到YARN服务的配置选项卡。

  2. 设置物理核和虚拟核数

    • yarn.nodemanager.resource.cpu-vcores:设置每个NodeManager可用的虚拟核数。

      例如,每台机器物理核2核,虚拟核设置为4核

      yarn.nodemanager.resource.cpu-vcores=4
  3. 应用配置并重新启动YARN服务

7.3 修改单个容器下最大CPU申请资源

调整YARN的调度器参数,以控制单个容器下的最大CPU资源申请。

  1. 编辑YARN配置

    在Cloudera Manager中,导航到YARN服务的配置选项卡。

  2. 设置最大CPU申请资源

    yarn.scheduler.maximum-allocation-vcores=4
  3. 应用配置并重新启动YARN服务

7.4 设置每个任务容器内存大小和单节点大小

调整YARN的内存分配参数,以优化集群的资源利用率。

  1. 编辑YARN配置

    在Cloudera Manager中,导航到YARN服务的配置选项卡。

  2. 设置每个任务容器内存大小

    yarn.scheduler.maximum-allocation-mb=4096
  3. 设置每个节点的可用内存

    yarn.nodemanager.resource.memory-mb=7168
  4. 应用配置并重新启动YARN服务

7.5 关闭Spark动态分配资源参数

为了控制Spark的资源分配,建议关闭动态分配资源参数。

  1. 编辑Spark配置

    在Cloudera Manager中,导航到Spark服务的配置选项卡。

  2. 关闭动态分配

    spark.dynamicAllocation.enabled=false
  3. 应用配置并重新启动Spark服务

7.6 修改HDFS副本数

根据数据的重要性和集群资源,调整HDFS的副本数。

  1. 编辑HDFS配置

    在Cloudera Manager中,导航到HDFS服务的配置选项卡。

  2. 设置副本数

    dfs.replication=1
  3. 应用配置并重新启动HDFS服务

7.7 设置动态分区模式

Hive默认是严格模式,要求动态分区至少有一个静态分区字段。为了简化操作,可以将其设置为非严格模式。

  1. 编辑Hive配置

    在Cloudera Manager中,导航到Hive服务的配置选项卡。

  2. 设置动态分区模式

    hive.exec.dynamic.partition.mode=nonstrict
  3. 应用配置并重新启动Hive服务

7.8 Hive on Spark配置

将Hive的执行引擎设置为Spark,以提升查询性能。

  1. 编辑Hive配置

    在Cloudera Manager中,导航到Hive服务的配置选项卡。

  2. 设置执行引擎为Spark

    hive.execution.engine=spark
  3. 配置Spark相关参数

    根据集群资源,调整Spark的内存和并发设置。

  4. 应用配置并重新启动Hive服务

7.9 设置容量调度器

默认情况下,CDH使用公平调度器。为了更好地管理资源,可以将其修改为容量调度器。

  1. 编辑YARN调度器配置

    在Cloudera Manager中,导航到YARN服务的配置选项卡。

  2. 设置调度器为容量调度器

    yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
  3. 配置容量调度器队列

    • 根队列:默认root队列,可以创建子队列。

    • 创建子队列:例如、、。

    • 设置资源占比

      • 队列占YARN集群资源的40%。

      • 队列占YARN集群资源的20%。

      • 队列占YARN集群资源的40%。

  4. 应用配置并重新启动YARN服务

  5. 验证调度器配置

    • 访问YARN ResourceManager Web UI,确认调度器已切换为容量调度器,并显示已创建的队列。

7.10 配置Yarn环境变量

为了确保HUE在执行调度任务时能够正确识别环境变量,需要配置YARN的环境变量。

  1. 编辑YARN环境变量配置

    vim /etc/hadoop/conf/yarn-env.sh
  2. 添加JAVA_HOME路径

    export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
  3. 应用配置并重新启动YARN服务

7.11 Oozie和HDFS HA配置

由于HDFS已启用高可用性,HUE需要正确配置以识别Active和Standby节点。

  1. 配置HTTPFS角色

    在Cloudera Manager中,导航到HDFS服务,添加HTTPFS角色到集群中。

  2. 配置HUE连接HTTPFS

    编辑HUE的配置文件,设置HDFS的HTTPFS地址。

    [hdfs]
    dfs_namenode_http_address=bindata01:50070,bindata02:50070
  3. 重启HUE服务

    systemctl restart hue
  4. 验证配置

    在HUE Web UI中,访问HDFS浏览器,确保能够正确访问Active NameNode。

7.12 取消向量化执行

Hive的向量化执行可以提升查询性能,但在某些情况下可能需要关闭。

  1. 编辑Hive配置

    在Cloudera Manager中,导航到Hive服务的配置选项卡。

  2. 关闭向量化执行

    hive.vectorized.execution.enabled=false
  3. 应用配置并重新启动Hive服务

7.13 设置Yarn AppMaster资源限制

控制YARN的AppMaster资源使用,以防止单个应用占用过多资源。

  1. 编辑YARN配置

    在Cloudera Manager中,导航到YARN服务的配置选项卡。

  2. 设置AppMaster资源限制

    yarn.scheduler.capacity.maximum-am-resource-percent=0.6

    说明:设置最多60%的资源可用于运行AppMaster。

  3. 应用配置并重新启动YARN服务

7.14 关闭Transparent Huge Pages (THP)

关闭THP可以提高Hadoop组件的性能和稳定性。

  1. 执行以下命令

    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  2. 确保重启后依然有效

    将上述命令添加到文件中。

    vim /etc/rc.local

    添加以下内容

    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  3. 保存并退出


第8章 常见问题与解决方案

在搭建和配置CDH集群的过程中,可能会遇到各种问题。以下是一些常见问题及其解决方案,供参考。

8.1 SSH连接频繁断开

问题:云服务器SSH连接经常在一段时间后断开。

解决方案

  1. 编辑文件,修改以下参数

    ClientAliveInterval 30
    ClientAliveCountMax 1800
  2. 重启SSH服务

    service sshd restart
8.2 防火墙阻止必要端口

问题:部分服务无法访问,可能是防火墙阻止了必要端口。

解决方案

  1. 检查防火墙状态

    systemctl status firewalld
  2. 开放必要端口

    firewall-cmd --permanent --add-port=7180/tcp  # Cloudera Manager Server
    firewall-cmd --permanent --add-port=8080/tcp  # Cloudera Manager Agent
    firewall-cmd --permanent --add-port=50070/tcp  # HDFS NameNode WebUI
    firewall-cmd --permanent --add-port=8088/tcp  # YARN ResourceManager WebUI
    firewall-cmd --permanent --add-port=10000/tcp  # HiveServer2 WebUI
    firewall-cmd --permanent --add-port=6080/tcp  # Ranger Server
    firewall-cmd --permanent --add-port=18081/tcp  # Spark History Server
    firewall-cmd --permanent --add-port=8081/tcp  # Flink Standalone WebUI
    firewall-cmd --permanent --add-port=8443/tcp  # Azkaban
    firewall-cmd --permanent --add-port=5432/tcp  # PostgreSQL
    firewall-cmd --reload
8.3 Cloudera Manager服务启动失败

问题:Cloudera Manager Server或Agent无法启动。

解决方案

  1. 检查日志文件

    tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
    tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
  2. 确认数据库连接配置正确,确保MySQL服务正常运行。

  3. 确保所有依赖包已正确安装

    yum install bind-utils psmisc cyrus-sasl-plain cyrus-sasl-gssapi fuse portmap fuse-libs lsb-core httpd mod_ssl openssl-devel python-psycopg2 MySQL-python libxslt -y
  4. 如果问题仍然存在,尝试重新安装Cloudera Manager服务组件。

8.4 Hive metastore连接失败

问题:Hive无法连接到metastore数据库。

解决方案

  1. 检查MySQL服务是否正常运行

    systemctl status mysql
  2. 确认Hive metastore的数据库连接配置正确,特别是数据库主机、端口、用户名和密码。

  3. 检查防火墙是否开放了MySQL的端口。

  4. 确认数据库用户具有足够的权限访问Hive metastore数据库。

8.5 Kafka Topic无法创建或删除

问题:尝试创建或删除Kafka Topic时失败。

解决方案

  1. 检查Kafka服务是否正常运行

    systemctl status kafka
  2. 确认Zookeeper连接配置正确,确保Kafka能够连接到Zookeeper。

  3. 查看Kafka日志文件,查找具体错误信息

    tail -f /var/log/kafka/server.log
  4. 确认所使用的Kafka命令参数正确,尤其是和的地址和端口。

8.6 HUE无法访问Hive或Spark

问题:通过HUE Web UI无法访问Hive或Spark服务。

解决方案

  1. 检查HUE服务是否正常运行

    systemctl status hue
  2. 确认HUE配置文件中Hive和Spark的连接参数正确。

  3. 检查HDFS和YARN服务是否正常运行,确保HUE能够通过网络访问这些服务。

  4. 查看HUE日志文件,查找具体错误信息

    tail -f /var/log/hue/hue.log
8.7 Flume数据未写入HDFS

问题:Flume无法将数据写入HDFS。

解决方案

  1. 检查Flume Agent是否正常运行

    ps -ef | grep flume
  2. 确认Flume配置文件中的HDFS路径正确,并且HDFS服务正常运行。

  3. 查看Flume日志文件,查找具体错误信息

    tail -f /var/log/flume/flume.log
  4. 确认HDFS目录权限设置正确,Flume用户有写入权限。

8.8 Spark作业执行缓慢

问题:提交的Spark作业执行速度较慢,影响数据处理效率。

解决方案

  1. 优化Spark配置

    • 增加数量和内存。

    • 调整的内存和CPU核心数。

  2. 优化数据分区

    • 根据数据量和集群资源,调整数据分区数,避免数据倾斜。

  3. 使用Spark缓存

    • 对频繁访问的数据集进行缓存,提高查询速度。

  4. 监控Spark作业

    • 使用Cloudera Manager的Spark Web UI,监控作业的执行情况,识别性能瓶颈。

  5. 调整YARN资源分配

    • 确保Spark作业有足够的资源分配,避免资源竞争。

8.9 HDFS存储空间不足

问题:HDFS存储空间不足,导致数据写入失败。

解决方案

  1. 增加HDFS存储容量

    • 为HDFS添加更多的数据节点或增加现有节点的存储容量。

  2. 调整HDFS副本数

    • 减少HDFS的副本数(如从3降为2或1,以节省存储空间。

  3. 清理不必要的数据

    • 删除过时或不再需要的数据文件,释放存储空间。

  4. 压缩数据

    • 使用压缩格式存储数据,如Parquet或ORC,减少存储占用。


第9章 集群监控与维护

本章将介绍如何利用Cloudera Manager进行集群监控与维护,确保CDH集群的高可用性和性能。

9.1 集群监控
9.1.1 使用Cloudera Manager监控集群状态

Cloudera Manager提供了全面的集群监控功能,可以实时查看各服务的运行状态和性能指标。

  1. 登录Cloudera Manager Web UI

  2. 导航到 集群管理页面,选择Cluster 1

  3. 查看服务状态

    • 每个服务的运行状态(启动、停止、警告、错误)在服务列表中一目了然。

    • 点击任意服务,可查看详细的性能指标和历史数据。

  4. 监控关键指标

    • HDFS:NameNode内存使用、磁盘空间、文件数等。

    • YARN:资源使用率、应用数、队列状态等。

    • Spark:作业执行时间、资源利用率等。

    • Kafka:Topic数量、消息速率、延迟等。

    • Hive:查询执行时间、metastore性能等。

9.1.2 设置告警规则

配置告警规则,以便在集群出现异常时及时通知运维人员。

  1. 在Cloudera Manager中

    • 导航到集群管理页面,选择Cluster 1

    • 点击告警选项卡。

  2. 创建新的告警规则

    • 点击添加告警规则按钮。

    • 选择需要监控的指标和阈值,例如

      • HDFS NameNode内存使用超过80%。

      • YARN ResourceManager CPU使用率超过90%。

  3. 配置告警通知

    • 设置告警触发时的通知方式,如邮件、短信或集成第三方监控工具。

  4. 保存并应用告警规则

9.2 集群维护
9.2.1 定期备份配置和数据库

为了防止配置丢失或数据库损坏,建议定期备份集群的配置文件和数据库。

  1. 备份Cloudera Manager配置

    cp -r /etc/cloudera-scm-server /backup/cloudera-scm-server_backup_$(date +%F)
  2. 备份Hive metastore数据库

    mysqldump -u hive -phive hive > /backup/hive_metastore_backup_$(date +%F).sql
  3. 备份Oozie数据库

    mysqldump -u oozie -poozie oozie > /backup/oozie_backup_$(date +%F).sql
  4. 备份HUE数据库

    mysqldump -u hue -phue hue > /backup/hue_backup_$(date +%F).sql
9.2.2 定期更新和打补丁

保持集群组件的更新和打补丁,以修复已知漏洞和提升性能。

  1. 使用Cloudera Manager进行更新

    • Cloudera Manager会提示可用的更新和补丁。

    • 按照向导步骤应用更新,确保在非高峰期进行,以减少对业务的影响。

  2. 验证更新后服务状态

    • 更新完成后,检查所有服务是否正常运行。

    • 通过Cloudera Manager的监控功能,确认关键指标无异常。

9.2.3 优化集群性能

根据集群的使用情况,定期进行性能优化,以确保资源的高效利用。

  1. 调整资源分配

    • 根据业务需求,动态调整YARN的资源分配策略。

    • 监控Spark和Hive的资源使用情况,避免资源浪费。

  2. 清理临时文件

    • 定期清理HDFS中的临时文件和不再使用的数据,释放存储空间。

    hdfs dfs -rm -r /tmp/*
  3. 监控磁盘使用情况

    • 通过Cloudera Manager监控各节点的磁盘使用情况,及时扩展存储资源。

9.2.4 管理用户权限

确保集群的安全性,合理管理用户权限。

  1. 使用Cloudera Manager配置用户角色

    • 在Cloudera Manager中,导航到安全性设置。

    • 创建用户组,并分配相应的访问权限。

  2. 配置HDFS和Hive的访问控制

    • 使用HDFS的权限机制,控制用户对文件和目录的访问权限。

    • 使用Hive的角色和权限管理,控制用户对数据库和表的访问权限。


第10章 性能优化与调优

为了提升CDH集群的整体性能,本章将介绍一些常见的性能优化和调优方法,涵盖HDFS、YARN、Hive、Spark等关键组件。

10.1 HDFS性能优化
10.1.1 调整块大小

HDFS的块大小影响数据的读写性能和存储效率。根据数据类型和访问模式,适当调整块大小。

  1. 编辑HDFS配置

    在Cloudera Manager中,导航到HDFS服务的配置选项卡。

  2. 设置块大小

    dfs.blocksize=134217728  # 128MB

    说明:将块大小设置为128MB,可以减少NameNode的内存消耗,提高大文件的读写性能。

  3. 应用配置并重新启动HDFS服务

10.1.2 优化NameNode内存设置

NameNode的内存设置直接影响HDFS的性能和稳定性。

  1. 编辑NameNode的JVM参数

    在Cloudera Manager中,导航到HDFS服务的配置选项卡,搜索NameNode JVM Heap Size

  2. 调整内存大小

    根据集群规模和数据量,适当增加NameNode的内存。例如,将堆内存设置为8GB

    HDFS NameNode Heap Size = 8192
  3. 应用配置并重新启动NameNode服务

10.1.3 配置HDFS缓存

启用HDFS的缓存功能,可以加速对热点数据的访问。

  1. 编辑HDFS配置

    在Cloudera Manager中,导航到HDFS服务的配置选项卡。

  2. 设置缓存目录

    dfs.namenode.cache.pool.default.capacity=100
    dfs.namenode.cache.pool.default.type=MEMORY
  3. 应用配置并重新启动HDFS服务

10.2 YARN性能优化
10.2.1 调整YARN调度器参数

根据集群资源和业务需求,调整YARN调度器的参数,以优化资源分配和任务调度。

  1. 编辑YARN配置

    在Cloudera Manager中,导航到YARN服务的配置选项卡。

  2. 设置调度器参数

    yarn.scheduler.capacity.maximum-am-resource-percent=0.6
    yarn.scheduler.capacity.root.default.capacity=40
    yarn.scheduler.capacity.root.spark.capacity=40
    yarn.scheduler.capacity.root.hive.capacity=20
    yarn.scheduler.capacity.root.flink.capacity=40
  3. 应用配置并重新启动YARN服务

10.2.2 优化NodeManager资源设置

确保每个NodeManager合理分配资源,避免资源浪费或过载。

  1. 编辑NodeManager配置

    在Cloudera Manager中,导航到YARN服务的配置选项卡,找到NodeManager相关配置。

  2. 设置资源参数

    yarn.nodemanager.resource.memory-mb=7168
    yarn.nodemanager.resource.cpu-vcores=4
  3. 应用配置并重新启动NodeManager服务

10.2.3 配置YARN队列

根据业务需求,创建和配置不同的YARN队列,确保资源合理分配。

  1. 创建队列

    在YARN调度器配置中,创建、、等队列。

  2. 设置队列资源占比

    yarn.scheduler.capacity.root.spark.capacity=40
    yarn.scheduler.capacity.root.hive.capacity=20
    yarn.scheduler.capacity.root.flink.capacity=40
  3. 应用配置并重新启动YARN服务

10.3 Hive性能优化
10.3.1 使用合适的文件格式

选择高效的文件格式,如Parquet或ORC,可以显著提升查询性能。

  1. 创建表时指定文件格式

    CREATE TABLE example_table (
        id INT,
        name STRING,
        value DOUBLE
    )
    STORED AS PARQUET;
10.3.2 启用Hive向量化执行

向量化执行可以提升查询性能,但需要确保执行引擎为Spark,并使用支持的文件格式。

  1. 编辑Hive配置

    在Cloudera Manager中,导航到Hive服务的配置选项卡。

  2. 启用向量化执行

    hive.vectorized.execution.enabled=true
    hive.vectorized.execution.reduce.enabled=true
  3. 应用配置并重新启动Hive服务

10.3.3 优化Hive查询
  1. 使用分区表

    对大表进行分区,可以显著提升查询效率。

    CREATE TABLE partitioned_table (
        id INT,
        name STRING,
        value DOUBLE
    )
    PARTITIonED BY (dt STRING)
    STORED AS PARQUET;
  2. 使用桶表

    对表进行桶划分,可以提高JOIN操作的性能。

    CREATE TABLE bucketed_table (
        id INT,
        name STRING,
        value DOUBLE
    )
    CLUSTERED BY (id) INTO 10 BUCKETS
    STORED AS PARQUET;
10.3.4 配置Hive缓存

启用Hive的缓存机制,可以加速频繁访问的数据查询。

  1. 编辑Hive配置

    在Cloudera Manager中,导航到Hive服务的配置选项卡。

  2. 设置缓存参数

    hive.llap.io.enabled=true
    hive.llap.execution.mode=native
  3. 应用配置并重新启动Hive服务

10.4 Spark性能优化
10.4.1 调整Executor数量和内存

根据集群资源和作业需求,合理配置Spark的Executor数量和内存。

  1. 编辑Spark配置

    在Cloudera Manager中,导航到Spark服务的配置选项卡。

  2. 设置Executor参数

    spark.executor.instances=10
    spark.executor.memory=4g
    spark.executor.cores=2
    spark.driver.memory=2g
  3. 应用配置并重新启动Spark服务

10.4.2 优化Spark应用程序
  1. 使用缓存和持久化

    对频繁使用的数据集进行缓存,提高查询速度。

    val df = spark.read.parquet("hdfs://bindata01:8020/user/data.parquet")
    df.cache()
  2. 优化数据分区

    根据数据量和集群资源,调整数据分区数,避免数据倾斜。

    df.repartition(100)
  3. 使用合适的Shuffle分区数

    spark.sql.shuffle.partitions=200
10.4.3 配置Spark Shuffle服务
  1. 编辑Spark配置

    在Cloudera Manager中,导航到Spark服务的配置选项卡。

  2. 启用Shuffle服务

    spark.shuffle.service.enabled=true
    spark.dynamicAllocation.shuffleTracking.enabled=true
  3. 应用配置并重新启动Spark服务


第11章 安全配置

为了保护数据安全和集群的稳定运行,本章将介绍如何配置CDH集群的安全性,包括用户认证、权限管理和数据加密等。

11.1 配置Kerberos认证

Kerberos是一种网络认证协议,用于确保集群中的用户和服务的身份验证。

11.1.1 安装Kerberos服务
  1. 在Kerberos服务器节点上安装Kerberos

    yum install krb5-server krb5-libs krb5-workstation -y
  2. 配置Kerberos

    编辑文件,配置Kerberos的Realm和KDC信息。

    [libdefaults]
        default_realm = EXAMPLE.COM
        dns_lookup_kdc = false
        dns_lookup_realm = false
    
    [realms]
        EXAMPLE.COM = {
            kdc = kerberos.example.com
            admin_server = kerberos.example.com
        }
    
    [domain_realm]
        .example.com = EXAMPLE.COM
        example.com = EXAMPLE.COM
  3. 初始化Kerberos数据库

    kdb5_util create -r EXAMPLE.COM -s
  4. 启动Kerberos服务

    systemctl start krb5kdc
    systemctl start kadmin
    systemctl enable krb5kdc
    systemctl enable kadmin
11.1.2 配置Cloudera Manager使用Kerberos
  1. 在Cloudera Manager中启用Kerberos

    • 导航到安全性设置。

    • 启用Kerberos认证,并配置Kerberos Realm和KDC地址。

  2. 为各个服务创建Kerberos Principal

    Cloudera Manager会自动为集群中的各个服务创建必要的Kerberos Principal。

  3. 生成和分发Keytab文件

    Cloudera Manager会生成Keytab文件,并将其分发到相应的节点。

  4. 应用配置并重新启动所有服务

11.1.3 验证Kerberos认证
  1. 测试用户认证

    使用Kerberos用户登录集群,确保认证正常。

    kinit user@EXAMPLE.COM
  2. 验证服务认证

    确认集群中的各个服务(如HDFS、YARN、Hive等)能够通过Kerberos进行认证。

11.2 配置权限管理

合理配置权限管理,确保用户只能访问其被授权的数据和服务。

11.2.1 使用HDFS权限机制
  1. 设置HDFS目录权限

    hdfs dfs -chmod 755 /user/hive
    hdfs dfs -chown hive:hive /user/hive
  2. 创建用户组并分配权限

    groupadd analytics
    usermod -aG analytics user1
    hdfs dfs -chgrp analytics /user/analytics
    hdfs dfs -chmod 770 /user/analytics
11.2.2 使用Hive权限管理
  1. 启用Hive的授权机制

    在Hive配置文件中启用授权插件。

    hive.security.authorization.enabled=true
    hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider
  2. 配置Hive角色和权限

    使用Hive的SQL命令,创建角色并分配权限。

    CREATE ROLE analyst;
    GRANT SELECT ON DATAbase sales TO ROLE analyst;
    GRANT ROLE analyst TO USER user1;
11.2.3 使用Cloudera Ranger进行细粒度权限管理

Cloudera Ranger提供了更加细粒度的权限管理和审计功能。

  1. 安装和配置Ranger

    • 在Cloudera Manager中,导航到添加服务,选择Ranger,并按照向导完成安装。

  2. 配置Ranger策略

    • 登录Ranger Web UI,创建策略,定义用户和组对各个服务的访问权限。

  3. 集成Ranger与Hive、HDFS等服务

    • 在Cloudera Manager中,为Hive、HDFS等服务启用Ranger的集成。

11.3 数据加密配置

为了保护数据在传输和存储过程中的安全,可以配置数据加密。

11.3.1 启用HDFS数据加密
  1. 生成加密密钥

    hdfs key create mycluster.key
  2. 编辑HDFS配置

    在Cloudera Manager中,导航到HDFS服务的配置选项卡,启用数据加密。

    dfs.encrypt.data.transfer=true
    dfs.encrypt.data.transfer.protocol=RC4
  3. 应用配置并重新启动HDFS服务

11.3.2 启用Hive数据加密
  1. 编辑Hive配置

    在Cloudera Manager中,导航到Hive服务的配置选项卡,启用加密选项。

    hive.encryption.enabled=true
    hive.encryption.keystore.path=/path/to/keystore.jceks
    hive.encryption.keystore.password=yourpassword
  2. 创建加密表

    CREATE TABLE encrypted_table (
        id INT,
        name STRING,
        value DOUBLE
    )
    STORED AS PARQUET
    TBLPROPERTIES ("orc.compress"="ZLIB", "orc.enc.spark.key"="yourkey");
11.3.3 启用Kafka数据加密
  1. 编辑Kafka配置文件

    vim /opt/software/kafka-2.8.0/config/server.properties
  2. 启用SSL加密

    security.inter.broker.protocol=SSL
    ssl.keystore.location=/path/to/kafka.keystore.jks
    ssl.keystore.password=yourpassword
    ssl.key.password=yourpassword
    ssl.truststore.location=/path/to/kafka.truststore.jks
    ssl.truststore.password=yourpassword
  3. 重启Kafka服务


第12章 高可用性配置

为了确保CDH集群的高可用性,避免单点故障导致服务中断,本章将介绍如何配置各个组件的高可用性设置。

12.1 HDFS NameNode HA配置
12.1.1 配置Active和Standby NameNode
  1. 在Cloudera Manager中

    • 导航到HDFS服务。

    • 点击配置选项卡,启用High Availability选项。

  2. 分配NameNode角色

    • Active NameNode

    • Standby NameNode

  3. 配置Zookeeper Failover Controller

    确保Zookeeper已正确配置,用于管理NameNode的故障转移。

  4. 应用配置并重新启动HDFS服务

12.1.2 验证NameNode HA配置
  1. 检查NameNode状态

    在Cloudera Manager的HDFS Web UI中,确认Active和Standby NameNode的状态。

  2. 测试故障转移

    • 停止Active NameNode服务

      systemctl stop hdfs-namenode
    • 确认Standby NameNode已自动切换为Active状态。

    • 重新启动原Active NameNode服务

      systemctl start hdfs-namenode
    • 确认故障转移过程是否顺利完成。

12.2 YARN ResourceManager HA配置
12.2.1 配置Active和Standby ResourceManager
  1. 在Cloudera Manager中

    • 导航到YARN服务。

    • 点击配置选项卡,启用ResourceManager High Availability选项。

  2. 分配ResourceManager角色

    • Active ResourceManager

    • Standby ResourceManager

  3. 配置Zookeeper用于YARN HA管理

  4. 应用配置并重新启动YARN服务

12.2.2 验证ResourceManager HA配置
  1. 检查ResourceManager状态

    在Cloudera Manager的YARN Web UI中,确认Active和Standby ResourceManager的状态。

  2. 测试故障转移

    • 停止Active ResourceManager服务

      systemctl stop yarn-resourcemanager
    • 确认Standby ResourceManager已自动切换为Active状态。

    • 重新启动原Active ResourceManager服务

      systemctl start yarn-resourcemanager
    • 确认故障转移过程是否顺利完成。

12.3 Hive metastore HA配置
12.3.1 配置Hive metastore的高可用性
  1. 在Cloudera Manager中

    • 导航到Hive服务。

    • 点击配置选项卡,启用Hive metastore High Availability选项。

  2. 分配metastore角色

    • Active metastore

    • Standby metastore(需预先配置节点

  3. 配置数据库高可用性

    使用MySQL的主从复制或其他高可用性方案,确保Hive metastore数据库的高可用性。

  4. 应用配置并重新启动Hive服务

12.3.2 验证Hive metastore HA配置
  1. 检查metastore状态

    在Cloudera Manager的Hive Web UI中,确认Active和Standby metastore的状态。

  2. 测试故障转移

    • 停止Active metastore服务

      systemctl stop hive-metastore
    • 确认Standby metastore已自动切换为Active状态。

    • 重新启动原Active metastore服务

      systemctl start hive-metastore
    • 确认故障转移过程是否顺利完成。

12.4 Spark High Availability配置
12.4.1 配置Spark Master的高可用性
  1. 在Cloudera Manager中

    • 导航到Spark服务。

    • 点击配置选项卡,启用Spark Master High Availability选项。

  2. 分配Spark Master角色

    • Primary Spark Master

    • Standby Spark Master

  3. 配置Zookeeper用于Spark Master HA管理

  4. 应用配置并重新启动Spark服务

12.4.2 验证Spark Master HA配置
  1. 检查Spark Master状态

    在Cloudera Manager的Spark Web UI中,确认Primary和Standby Spark Master的状态。

  2. 测试故障转移

    • 停止Primary Spark Master服务

      systemctl stop spark-master
    • 确认Standby Spark Master已自动切换为Primary状态。

    • 重新启动原Primary Spark Master服务

      systemctl start spark-master
    • 确认故障转移过程是否顺利完成。


第13章 备份与恢复

为了防止数据丢失和系统故障,备份与恢复是维护CDH集群的重要环节。本章将介绍如何进行集群的备份和恢复操作,包括配置备份策略和执行恢复步骤。

13.1 配置备份策略
13.1.1 定期备份配置文件

定期备份Cloudera Manager和各个服务的配置文件,确保在配置丢失或损坏时能够快速恢复。

  1. 备份Cloudera Manager配置

    cp -r /etc/cloudera-scm-server /backup/cloudera-scm-server_backup_$(date +%F)
  2. 备份各服务的配置文件

    例如,备份Hive配置文件

    cp /etc/hive/conf/hive-site.xml /backup/hive-site.xml_backup_$(date +%F)
13.1.2 定期备份数据库

定期备份Hive metastore、Oozie、HUE等服务的数据库,确保在数据库故障时能够恢复元数据信息。

  1. 备份Hive metastore数据库

    mysqldump -u hive -phive hive > /backup/hive_metastore_backup_$(date +%F).sql
  2. 备份Oozie数据库

    mysqldump -u oozie -poozie oozie > /backup/oozie_backup_$(date +%F).sql
  3. 备份HUE数据库

    mysqldump -u hue -phue hue > /backup/hue_backup_$(date +%F).sql
13.1.3 备份HDFS数据

定期备份HDFS中的重要数据,以防止数据丢失。

  1. 使用DistCp进行HDFS数据备份

    hadoop distcp hdfs://bindata01:8020/user/data hdfs://backup-server:8020/user/data_backup_$(date +%F)
  2. 验证备份结果

    hdfs dfs -ls hdfs://backup-server:8020/user/data_backup_$(date +%F)
13.2 执行恢复操作
13.2.1 恢复配置文件

在配置文件丢失或损坏时,使用备份文件进行恢复。

  1. 恢复Cloudera Manager配置

    cp -r /backup/cloudera-scm-server_backup_<日期> /etc/cloudera-scm-server
  2. 恢复各服务的配置文件

    cp /backup/hive-site.xml_backup_<日期> /etc/hive/conf/hive-site.xml
13.2.2 恢复数据库

在数据库故障时,使用备份文件进行恢复。

  1. 恢复Hive metastore数据库

    mysql -u hive -phive hive < /backup/hive_metastore_backup_<日期>.sql
  2. 恢复Oozie数据库

    mysql -u oozie -poozie oozie < /backup/oozie_backup_<日期>.sql
  3. 恢复HUE数据库

    mysql -u hue -phue hue < /backup/hue_backup_<日期>.sql
13.2.3 恢复HDFS数据

在HDFS数据丢失时,使用备份数据进行恢复。

  1. 使用DistCp进行HDFS数据恢复

    hadoop distcp hdfs://backup-server:8020/user/data_backup_<日期> hdfs://bindata01:8020/user/data
  2. 验证恢复结果

    hdfs dfs -ls hdfs://bindata01:8020/user/data


第14章 性能监控与日志管理

为了确保CDH集群的高效运行,持续的性能监控和日志管理是必不可少的。本章将介绍如何利用Cloudera Manager进行性能监控以及如何管理和分析集群日志。

14.1 性能监控
14.1.1 使用Cloudera Manager监控关键指标

Cloudera Manager提供了丰富的监控指标,帮助运维人员实时了解集群的运行状态。

  1. 登录Cloudera Manager Web UI

  2. 导航到 集群管理页面,选择Cluster 1

  3. 查看服务指标

    • HDFS:NameNode内存使用、磁盘利用率、文件系统操作速率等。

    • YARN:资源使用率、应用提交数、队列状态等。

    • Spark:作业执行时间、资源分配情况、内存使用等。

    • Hive:查询执行时间、metastore响应时间等。

    • Kafka:Topic消息速率、延迟、分区状态等。

  4. 自定义监控仪表盘

    • 根据业务需求,自定义Cloudera Manager的监控仪表盘,展示关键性能指标。

14.1.2 设置告警规则

配置告警规则,以便在集群出现异常时及时通知运维人员。

  1. 在Cloudera Manager中

    • 导航到集群管理页面,选择Cluster 1

    • 点击告警选项卡。

  2. 创建新的告警规则

    • 点击添加告警规则按钮。

    • 选择需要监控的指标和阈值,例如

      • HDFS NameNode内存使用超过80%。

      • YARN ResourceManager CPU使用率超过90%。

  3. 配置告警通知

    • 设置告警触发时的通知方式,如邮件、短信或集成第三方监控工具。

  4. 保存并应用告警规则

14.1.3 使用Ganglia进行集群监控

Ganglia是一个分布式监控系统,适用于大规模集群的性能监控。

  1. 安装Ganglia

    在Cloudera Manager中,导航到添加服务,选择Ganglia,并按照向导完成安装。

  2. 配置Ganglia

    • 配置Ganglia的Master和Monitor节点。

    • 设置监控指标和报警阈值。

  3. 访问Ganglia Web UI

    • 通过浏览器访问,查看集群的实时性能数据。

14.2 日志管理
14.2.1 集中化日志收集

使用集群内的日志收集工具,将各个服务的日志集中存储,便于管理和分析。

  1. 配置Flume收集日志

    • 在Flume配置文件中,添加日志收集源和Sink,将日志数据写入HDFS或其他存储系统。

    agent2.sources = source2
    agent2.channels = channel2
    agent2.sinks = sink2
    
    agent2.sources.source2.type = exec
    agent2.sources.source2.command = tail -F /var/log/hadoop/*.log
    
    agent2.channels.channel2.type = memory
    agent2.channels.channel2.capacity = 1000
    agent2.channels.channel2.transactionCapacity = 100
    
    agent2.sinks.sink2.type = hdfs
    agent2.sinks.sink2.hdfs.path = hdfs://bindata01:8020/user/logs/hadoop
    agent2.sinks.sink2.hdfs.fileType = DataStream
    agent2.sinks.sink2.hdfs.writeFormat = Text
    agent2.sinks.sink2.hdfs.batchSize = 1000
    agent2.sinks.sink2.hdfs.rollSize = 0
    agent2.sinks.sink2.hdfs.rollCount = 10000
    
    agent2.sources.source2.channels = channel2
    agent2.sinks.sink2.channel = channel2
  2. 启动Flume Agent

    systemctl start flume
    systemctl enable flume
14.2.2 使用Logstash进行日志处理

Logstash是一个强大的日志处理工具,可以用于收集、过滤和转发日志数据。

  1. 安装Logstash

    在指定节点上安装Logstash。

    yum install logstash -y
  2. 配置Logstash管道

    创建一个Logstash配置文件,例如

    input {
        file {
            path => "/var/log/hadoop/*.log"
            start_position => "beginning"
        }
    }
    
    filter {
        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{data:component} %{GREEDYdata:message}" }
        }
        date {
            match => [ "timestamp", "ISO8601" ]
        }
    }
    
    output {
        elasticsearch {
            hosts => ["elasticsearch:9200"]
            index => "hadoop_logs-%{+YYYY.MM.dd}"
        }
        stdout { codec => rubydebug }
    }
  3. 启动Logstash服务

    systemctl start logstash
    systemctl enable logstash
  4. 验证日志收集

    检查Elasticsearch中的索引,确认日志数据已成功收集。

14.2.3 使用Kibana进行日志分析

Kibana是一个开源的数据可视化和分析工具,常与Elasticsearch配合使用。

  1. 安装Kibana

    在指定节点上安装Kibana。

    yum install kibana -y
  2. 配置Kibana

    编辑文件,设置Elasticsearch的地址。

    server.port: 5601
    server.host: "0.0.0.0"
    elasticsearch.hosts: ["http://elasticsearch:9200"]
  3. 启动Kibana服务

    systemctl start kibana
    systemctl enable kibana
  4. 访问Kibana Web UI

    • 通过浏览器访问。

    • 配置索引模式,创建可视化仪表盘,分析Hadoop集群的日志数据。

14.3 总结

本章介绍了如何利用Cloudera Manager进行集群的性能监控和日志管理。通过实时监控关键性能指标和集中化的日志收集与分析,可以及时发现和解决集群中的问题,确保CDH集群的高效和稳定运行。


第15章 集群扩展与缩减

随着业务的发展,可能需要对CDH集群进行扩展或缩减。本章将介绍如何通过Cloudera Manager对集群进行动态扩展和缩减操作。

15.1 集群扩展
15.1.1 添加新节点到集群
  1. 购买并配置新ECS实例

    按照第1章中介绍的步骤,购买新的云ECS实例,并完成网络和安全组配置。

  2. 配置新节点的环境

    • 连接新节点,配置文件,确保新节点能够解析集群中其他节点的域名。

    • 配置SSH免密登录,确保新节点可以与集群中其他节点无密码互联。

  3. 安装必要的软件

    • 安装JDK、MySQL客户端等集群所需的基础软件。

    • 通过和脚本,将JDK和环境变量配置分发到新节点。

15.1.2 将新节点添加到服务组件
  1. 在Cloudera Manager中添加服务

    • 登录Cloudera Manager Web UI。

    • 进入集群管理页面,选择Cluster 1

    • 点击添加服务按钮,选择需要在新节点上运行的服务组件(如DataNode、NodeManager等)。

  2. 分配新节点的角色

    • 根据业务需求,分配新节点的服务角色,例如

      • 添加DataNode角色到新节点,以扩展HDFS的存储容量。

      • 添加NodeManager角色到新节点,以增加YARN的资源池。

  3. 应用配置并启动服务

    Cloudera Manager会自动完成新节点上服务组件的安装和启动。

15.1.3 验证集群扩展
  1. 检查服务状态

    在Cloudera Manager中,确认新节点上的服务组件已成功启动并正常运行。

  2. 验证资源扩展

    • HDFS:检查新的DataNode是否已添加到HDFS集群中。

    • YARN:确认新的NodeManager已加入YARN资源池。

  3. 执行性能测试

    通过提交Spark或Hive作业,验证集群扩展后资源利用率和性能是否提升。

15.2 集群缩减
15.2.1 从集群中移除节点

在业务需求减少或维护需要时,可以将节点从集群中移除。

  1. 在Cloudera Manager中停用服务组件

    • 登录Cloudera Manager Web UI。

    • 进入集群管理页面,选择Cluster 1

    • 选择要移除的节点,停用其上运行的服务组件(如DataNode、NodeManager等)。

  2. 删除服务组件

    • 在Cloudera Manager中,选择要删除的服务组件。

    • 点击删除按钮,按照向导完成删除操作。

15.2.2 移除节点的环境配置
  1. 从其他节点的文件中移除被删除节点的映射

    vim /etc/hosts
  2. 从集群管理脚本中移除节点

    如果使用了自定义脚本进行集群管理,确保从脚本中移除被删除节点的相关配置。

15.2.3 关闭并删除ECS实例
  1. 停止并删除云ECS实例

    • 登录云控制台。

    • 选择要删除的ECS实例,停止实例后选择删除

  2. 清理相关资源

    确保所有相关资源(如安全组规则、磁盘等)已被正确清理,避免不必要的费用。

15.2.4 验证集群缩减
  1. 检查服务状态

    在Cloudera Manager中,确认移除节点后的服务组件运行状态正常。

  2. 验证资源缩减

    • HDFS:确认DataNode已从HDFS集群中移除,数据副本已重新平衡。

    • YARN:确认NodeManager已从YARN资源池中移除,资源分配已重新调整。

  3. 执行性能测试

    通过提交Spark或Hive作业,验证集群缩减后资源利用率和性能是否符合预期。


第16章 故障排查与恢复

在集群运行过程中,可能会遇到各种故障和问题。快速有效地排查和恢复故障,是确保集群稳定运行的关键。本章将介绍常见故障的排查方法及恢复步骤。

16.1 常见故障类型
  1. 服务无法启动:如HDFS NameNode、YARN ResourceManager等关键服务无法启动。

  2. 服务性能异常:服务响应缓慢,资源利用率异常。

  3. 数据丢失或损坏:HDFS中数据丢失或文件损坏。

  4. 网络连接问题:集群节点之间网络不通,导致服务通信失败。

  5. 权限问题:用户无法访问特定数据或服务,权限配置错误。

16.2 故障排查步骤
16.2.1 检查服务状态
  1. 通过Cloudera Manager查看服务状态

    • 登录Cloudera Manager Web UI。

    • 进入集群管理页面,选择Cluster 1

    • 查看各个服务的运行状态,确认是否有服务处于错误或停止状态。

  2. 使用命令行检查服务状态

    systemctl status hdfs-namenode
    systemctl status yarn-resourcemanager
    systemctl status hive-metastore
    systemctl status spark-master
16.2.2 查看日志文件
  1. 定位日志文件

    • Cloudera Manager会将各个服务的日志文件集中存储在目录下。

    • 例如,HDFS NameNode日志位于。

  2. 查看日志内容

    tail -f /var/log/hadoop-hdfs/hadoop-hdfs-namenode-*.log
    tail -f /var/log/yarn/yarn-resourcemanager-*.log
  3. 分析错误信息

    • 查找关键字如、等,定位问题原因。

16.2.3 检查系统资源
  1. 检查CPU和内存使用情况

    top
  2. 检查磁盘使用情况

    df -h
  3. 检查网络连接

    ping bindata01
    ping bindata02
16.2.4 验证配置文件
  1. 检查配置文件是否正确

    • 确认各个服务的配置文件(如、、等)是否配置正确。

  2. 使用Cloudera Manager验证配置

    • Cloudera Manager会检测配置文件的正确性,并提示配置错误。

16.2.5 使用Cloudera Manager工具
  1. 运行健康检查

    • Cloudera Manager提供健康检查工具,自动检测集群中的潜在问题。

  2. 查看服务依赖关系

    • 确认各个服务的依赖关系是否满足,避免因依赖服务异常导致其他服务故障。

16.3 故障恢复步骤
16.3.1 重启服务

对于一些临时性的问题,可以通过重启相关服务进行恢复。

  1. 通过Cloudera Manager重启服务

    • 登录Cloudera Manager Web UI。

    • 选择需要重启的服务,点击重启按钮。

  2. 使用命令行重启服务

    systemctl restart hdfs-namenode
    systemctl restart yarn-resourcemanager
    systemctl restart hive-metastore
    systemctl restart spark-master
16.3.2 修复配置错误
  1. 编辑错误的配置文件

    根据日志中提示的错误信息,修改配置文件中的错误参数。

    vim /etc/hadoop/conf/hdfs-site.xml
  2. 应用配置并重启服务

    systemctl restart hdfs-namenode
16.3.3 恢复数据
  1. 使用备份恢复HDFS数据

    hadoop distcp hdfs://backup-server:8020/user/data_backup_<日期> hdfs://bindata01:8020/user/data
  2. 使用HDFS fsck检查数据健康状况

    hdfs fsck / -files -blocks -locations

    根据检查结果,修复损坏的文件块。

16.3.4 解决网络连接问题
  1. 检查网络配置

    • 确认集群节点的网络配置正确,IP地址和域名解析无误。

  2. 重启网络服务

    systemctl restart network
  3. 验证网络连接

    ping bindata01
    ping bindata02
16.3.5 解决权限问题
  1. 检查HDFS目录权限

    hdfs dfs -ls /user/hive
    hdfs dfs -chmod 755 /user/hive
    hdfs dfs -chown hive:hive /user/hive
  2. 检查Hive权限配置

    SHOW GRANTS FOR USER 'user1';

    根据需要,调整用户权限。


第17章 性能测试与基准评估

在完成CDH集群的搭建和配置后,进行性能测试和基准评估是验证集群性能的重要步骤。本章将介绍如何使用常见工具进行性能测试,并分析测试结果以评估集群性能。

17.1 性能测试工具
17.1.1 Benchmark工具
  1. TPC-DS:用于测试Hive和Spark的查询性能。

  2. Terasort:用于测试HDFS和MapReduce的排序性能。

  3. Yahoo! Cloud Serving Benchmark (YCSB):用于测试Hbase和NoSQL数据库的性能。

17.1.2 监控工具
  1. Cloudera Manager:实时监控集群性能指标。

  2. Ganglia:分布式监控系统,适用于大规模集群的性能监控。

  3. Spark Web UI:监控Spark作业的执行情况。

17.2 运行TPC-DS基准测试

TPC-DS是一种广泛使用的基准测试,用于评估数据仓库系统的查询性能。

17.2.1 下载并安装TPC-DS工具
  1. 下载TPC-DS工具

    wget http://www.tpc.org/tpcds/download/tpcds-tools-2.8.tar.gz
  2. 解压安装包

    tar -zxvf tpcds-tools-2.8.tar.gz
    cd tpcds-tools-2.8
  3. 编译TPC-DS工具

    make
17.2.2 生成TPC-DS数据
  1. 创建数据目录

    mkdir /opt/tpcds/data
  2. 生成数据

    例如,生成1TB的数据集

    https://blog.csdn.net/2301_77890189/article/details/dsdgen -scale 1000 -dir /opt/tpcds/data -force
17.2.3 加载数据到Hive
  1. 创建Hive表

    使用TPC-DS工具生成的DDL文件,在Hive中创建表结构。

    hive -f /opt/tpcds/tools/dsdgen/hive_ddl.sql
  2. 加载数据

    使用Sqoop或其他数据加载工具,将生成的数据加载到Hive表中。

    hive -e "LOAD DATA INPATH '/opt/tpcds/data/' INTO TABLE table_name"
17.2.4 运行TPC-DS查询
  1. 执行TPC-DS查询

    在Hive中运行预定义的TPC-DS查询,记录查询执行时间和资源使用情况。

    hive -f /opt/tpcds/tools/query_templates/sql/q1.sql
  2. 分析查询结果

    通过Cloudera Manager和Spark Web UI,监控查询的资源使用情况,分析性能瓶颈。

17.2.5 评估测试结果
  1. 比较预期性能

    将测试结果与预期性能指标进行比较,评估集群的查询性能是否满足业务需求。

  2. 优化配置

    根据测试结果,调整Hive和Spark的配置参数,优化查询性能。

17.3 运行Terasort基准测试

Terasort是一个用于测试HDFS和MapReduce排序性能的基准测试。

17.3.1 下载并安装Terasort工具
  1. 下载Hadoop测试工具

    Hadoop自带了Terasort测试工具,无需额外下载。

17.3.2 运行Terasort测试
  1. 生成随机数据

    hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teragen 100000000 /user/hadoop/teragen_output
  2. 运行Terasort

    hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar terasort /user/hadoop/teragen_output /user/hadoop/terasort_output
  3. 验证排序结果

    hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teravalidate /user/hadoop/teragen_output /user/hadoop/terasort_output
17.3.3 评估测试结果
  1. 记录执行时间

    根据MapReduce作业的日志,记录数据生成、排序和验证的执行时间。

  2. 分析性能瓶颈

    通过Cloudera Manager监控HDFS和MapReduce的资源使用情况,识别性能瓶颈。

第18章 附录

本章提供了一些辅助信息,包括常用命令参考、配置文件样例及术语解释,帮助读者更好地理解和使用CDH集群。

18.1 常用命令参考
18.1.1 HDFS命令
  • 查看HDFS文件

    hdfs dfs -ls /path/to/directory
  • 上传文件到HDFS

    hdfs dfs -put localfile /path/to/hdfs/directory
  • 下载文件从HDFS

    hdfs dfs -get /path/to/hdfs/file localfile
  • 删除HDFS文件

    hdfs dfs -rm /path/to/hdfs/file
18.1.2 YARN命令
  • 查看YARN应用列表

    yarn application -list
  • 提交YARN应用

    yarn application -submit -appMaster <app_master_url>
  • 杀死YARN应用

    yarn application -kill <application_id>
18.1.3 Hive命令
  • 登录Hive CLI

    hive
  • 创建数据库

    CREATE DATAbase mydatabase;
  • 创建表

    CREATE TABLE mytable (
        id INT,
        name STRING
    )
    STORED AS PARQUET;
  • 查询数据

    SELECT * FROM mytable;
18.1.4 Spark命令
  • 提交Spark作业

    spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster /opt/cloudera/parcels/CDH/lib/spark/examples/jars/spark-examples.jar 10
  • 查看Spark作业状态

    通过Cloudera Manager的Spark Web UI或Spark History Server进行查看。

18.1.5 Kafka命令
  • 创建Topic

    kafka-topics --create --bootstrap-server bindata03:9092 --replication-factor 1 --partitions 1 --topic mytopic
  • 查看Topic列表

    kafka-topics --list --bootstrap-server bindata03:9092
  • 删除Topic

    kafka-topics --delete --bootstrap-server bindata03:9092 --topic mytopic
18.1.6 Flume命令
  • 启动Flume Agent

    flume-ng agent --conf /opt/software/apache-flume-1.9.0-bin/conf --conf-file /opt/software/apache-flume-1.9.0-bin/conf/flume.conf --name agent1 -Dflume.root.logger=INFO,console &
  • 停止Flume Agent

    kill $(pgrep flume-ng)
18.2 配置文件样例
18.2.1 HDFS配置文件 ()
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value> <!-- 128MB -->
    </property>
    <property>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
</configuration>
18.2.2 YARN配置文件 ()
<configuration>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>
    <property>
        <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
        <value>0.6</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>7168</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>4</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-vcores</name>
        <value>4</value>
    </property>
    <property>
        <name>yarn.scheduler.capacity.root.default.capacity</name>
        <value>40</value>
    </property>
    <property>
        <name>yarn.scheduler.capacity.root.spark.capacity</name>
        <value>40</value>
    </property>
    <property>
        <name>yarn.scheduler.capacity.root.hive.capacity</name>
        <value>20</value>
    </property>
    <property>
        <name>yarn.scheduler.capacity.root.flink.capacity</name>
        <value>40</value>
    </property>
</configuration>
18.2.3 Hive配置文件 ()
<configuration>
    <property>
        <name>hive.exec.dynamic.partition.mode</name>
        <value>nonstrict</value>
    </property>
    <property>
        <name>hive.execution.engine</name>
        <value>spark</value>
    </property>
    <property>
        <name>hive.vectorized.execution.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.vectorized.execution.reduce.enabled</name>
        <value>true</value>
    </property>
</configuration>
18.2.4 Spark配置文件 ()
spark.executor.instances=10
spark.executor.memory=4g
spark.executor.cores=2
spark.driver.memory=2g
spark.dynamicAllocation.enabled=false
spark.shuffle.service.enabled=true
spark.dynamicAllocation.shuffleTracking.enabled=true
spark.sql.shuffle.partitions=200
18.3 术语解释