第1章 数仓之Cloudera Manager
1.1 CM简介
1.1.1 Cloudera Manager简介
Cloudera Manager(简称CM)是一个集群管理工具,具备自动化安装、中心化管理、集群监控及报警等功能。它能够将集群的安装时间从几天缩短至几个小时,并将运维人员从数十人减少到几人以内,极大地提高了集群管理的效率。
1.2 服务器准备
1.2.1 ECS配置及安全组修改
1. 修改实例规格(如有需要)
-
停止实例。
-
更改实例规格(注意:抢占式实例不支持更改规格,需确认使用按量付费或包年包月实例)。
-
启动实例。
2. 修改安全组策略
确保以下端口在安全组中开放,以便Cloudera Manager及相关服务正常通信:
提示:可以使用以下JSON文件直接导入安全组规则。(请根据实际需求调整)
1.3 CM部署前准备
1.3.1 连接云服务器
使用SSH客户端(如PuTTY或CRT)进行远程连接。以下以CRT为例:
-
新建一个Session。
-
填写主机名(公网IP地址)和SSH端口(默认22)。
-
配置用户名和认证方式(密码或密钥)。
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免密登录。
在节点上执行:
-
生成SSH密钥对:
ssh-keygen -t rsa
按回车键接受默认路径和空密码。
-
将公钥复制到目标节点:
ssh-copy-id bindata01 ssh-copy-id bindata02 ssh-copy-id bindata03 ssh-copy-id bindata04 ssh-copy-id bindata05
-
重复以上步骤,在、、、节点上配置对所有节点的免密登录。
1.3.5 集群同步脚本
创建一个脚本用于在集群内同步文件。
-
在目录下创建目录并进入:
mkdir /root/bin cd /root/bin
-
创建脚本:
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
-
赋予执行权限:
chmod +x xsync
1.3.6 集群整体操作脚本
创建一个脚本用于在所有节点上执行命令。
-
在目录下创建:
vi xcall.sh
添加以下内容:
#!/bin/bash for i in bindata01 bindata02 bindata03 bindata04 bindata05; do echo "--------- $i ---------" ssh "$i" "$*" done
-
赋予执行权限:
chmod +x xcall.sh
1.3.7 安装JDK(所有节点)
-
在节点上创建目录:
mkdir -p /opt/module /opt/software
-
上传JDK安装包 到 目录,并安装:
rpm -ivh /opt/software/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
-
配置环境变量:
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
-
使环境变量生效:
source /etc/profile.d/my_env.sh java -version
-
分发JDK到其他节点并加载环境变量:
xsync /usr/java/ xsync /etc/profile.d/my_env.sh
在每个节点上执行:
source /etc/profile.d/my_env.sh
-
验证Java安装:
xcall.sh java -version
1.3.8 安装MySQL
注意:请确保以root用户执行以下步骤。
-
卸载已有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
-
安装MySQL依赖
yum install libaio autoconf unzip -y
-
下载并安装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
-
上传并安装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
-
启动MySQL服务
service mysql start
-
配置MySQL
mysql -uroot -p$(cat /root/.mysql_secret)
在MySQL命令行中:
SET PASSWORD=PASSWORd('000000'); EXIT;
-
配置允许远程访问
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
-
准备安装包
在节点上:
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/
-
安装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
-
安装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
-
配置Cloudera Manager Agent
编辑,将设置为:
server_host=bindata01
在所有节点上重复此操作。
-
安装Cloudera Manager Server
在节点上执行:
rpm -ivh cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
-
上传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
-
配置数据库
编辑:
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
-
初始化数据库并启动服务
/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
-
启动Cloudera Manager Agent
在所有节点上执行:
systemctl start cloudera-scm-agent
1.3.10 Cloudera Manager的集群部署
-
访问Cloudera Manager Web UI
在浏览器中访问 ,使用默认用户名和密码(通常为admin/admin)登录。
-
接受条款和协议
在首次登录时,接受相关的条款和协议。
-
集群安装向导
按照向导步骤进行:
-
选择安装类型:选择 自定义安装 以便更灵活地配置各组件。
-
选择安装服务:选择需要安装的服务(如HDFS、YARN、Hive等)。
-
分配节点:指定各服务运行的节点。
-
集群设置:大部分设置可保持默认,必要时根据需求调整。
-
启动进程:选择自动启动相关进程。
-
-
配置HDFS权限检查
在Cloudera Manager中,导航到HDFS配置,关闭权限检查:
dfs.permissions=false
-
配置NameNode HA
-
进入HDFS页面,点击 启用High Availability。
-
设置命名服务名称(如 )。
-
分配Active和Standby NameNode角色。
-
审核更改并应用配置。
-
等待服务启动完成。
-
-
配置YARN HA
按照类似NameNode HA的步骤,配置YARN ResourceManager的高可用性。
-
优化系统参数
在所有节点上执行以下命令,关闭Transparent Huge Pages(THP):
echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled
可将这些命令添加到 以确保重启后依然有效。
1.3.11 安全性与优化
-
设置防火墙规则:根据实际需求,进一步细化安全组规则,限制不必要的端口开放。
-
定期备份配置和数据库:确保在发生故障时能够快速恢复。
-
监控集群健康状态:使用Cloudera Manager的监控功能,及时发现和处理潜在问题。
1.4 常见问题与解决方案
1.4.1 SSH连接频繁断开
问题:云服务器SSH连接经常在一段时间后断开。
解决方案:
-
编辑文件,修改以下参数:
ClientAliveInterval 30 ClientAliveCountMax 1800
-
重启SSH服务:
service sshd restart
1.4.2 防火墙阻止必要端口
问题:部分服务无法访问,可能是防火墙阻止了必要端口。
解决方案:
-
检查防火墙状态:
systemctl status firewalld
-
开放必要端口:
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无法启动。
解决方案:
-
检查日志文件:
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
-
确认数据库连接配置正确。
-
确保所有依赖包已正确安装。
第2章 数仓之数据采集模块
本章将介绍如何安装和配置HDFS、YARN、Zookeeper、Kafka及Flume等数据采集相关组件。这些组件是构建大数据生态系统的基础,负责数据的存储、资源管理以及实时数据流处理。
2.1 HDFS、YARN、Zookeeper安装
2.1.1 选择自定义安装
在Cloudera Manager的集群安装向导中,建议选择自定义安装,以便根据实际需求灵活配置各个组件。
-
登录Cloudera Manager Web UI。
-
进入集群安装向导。
-
在选择安装类型步骤,选择自定义安装,然后点击继续。
2.1.2 选择安装服务
在自定义安装模式下,选择需要安装的服务组件。
-
在
选择安装服务
页面,勾选以下服务:
-
HDFS:负责分布式文件存储。
-
YARN:资源管理与任务调度。
-
Zookeeper:分布式协调服务。
-
-
确认选择后,点击继续。
2.1.3 分配节点
为各个服务分配集群中的节点。
-
HDFS:
-
NameNode:选择作为主NameNode。
-
Secondary NameNode:选择作为Secondary NameNode。
-
-
YARN:
-
ResourceManager:选择作为主ResourceManager。
-
NodeManager:选择所有节点(至)作为NodeManager。
-
-
Zookeeper:
-
Zookeeper Server:选择和作为Zookeeper的服务器节点。
-
完成分配后,点击继续。
2.1.4 集群设置全部选默认即可
在集群设置页面,建议大部分设置保持默认,除非有特定需求需要调整。
-
确认各项参数设置正确。
-
点击继续进入下一步。
2.1.5 自动启动进程
配置集群服务的启动方式。
-
在启动进程页面,选择自动启动所有服务。
-
确认设置后,点击继续。
2.1.6 修改HDFS的权限检查配置
为了简化权限管理,可以关闭HDFS中的权限检查。
-
在Cloudera Manager中,导航到HDFS服务。
-
点击配置选项卡。
-
搜索。
-
将设置为。
-
保存更改并重新启动HDFS服务以应用配置。
2.1.7 配置NameNode HA
高可用的NameNode配置可以避免单点故障,提高集群的可靠性。
-
在Cloudera Manager中,导航到HDFS服务。
-
点击配置,搜索并启用High Availability选项。
-
设置命名服务名称,例如。
-
分配两个NameNode角色:
-
Active NameNode:
-
Standby NameNode:
-
-
配置Zookeeper用于HA管理。
-
审核更改并应用配置,等待NameNode HA服务启动完成。
2.1.8 配置YARN HA
类似于NameNode HA,配置YARN ResourceManager的高可用性。
-
在Cloudera Manager中,导航到YARN服务。
-
点击配置,搜索并启用ResourceManager High Availability选项。
-
分配两个ResourceManager角色:
-
Active ResourceManager:
-
Standby ResourceManager:
-
-
配置Zookeeper用于YARN HA管理。
-
审核更改并应用配置,等待YARN HA服务启动完成。
2.2 Kafka安装
Kafka是一个分布式流处理平台,常用于实时数据的采集和处理。本节将介绍如何在集群中安装和配置Kafka。
2.2.1 Kafka安装
为了节省时间,推荐使用离线包进行Kafka的安装。
-
下载Kafka离线安装包:
在Cloudera Manager的下载页面或Kafka官方网站下载适用于CDH的Kafka离线包。例如:。
-
上传安装包到集群:
使用脚本将Kafka安装包上传到所有节点的指定目录。
xsync /opt/software/kafka-2.8.0.tgz
-
解压安装包:
在每个节点上执行以下命令解压Kafka安装包:
cd /opt/software/ tar -zxvf kafka-2.8.0.tgz
-
创建Kafka数据目录:
为Kafka创建数据存储目录:
mkdir -p /var/lib/kafka/data
-
配置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应有唯一的。
-
启动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,用于存储不同类型的日志数据。
-
创建测试Topic:
/opt/cloudera/parcels/CDH/bin/kafka-topics --create --bootstrap-server bindata03:9092,bindata04:9092,bindata05:9092 --replication-factor 1 --partitions 1 --topic test
-
验证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。
-
删除测试Topic:
/opt/cloudera/parcels/CDH/bin/kafka-topics --delete --bootstrap-server bindata03:9092,bindata04:9092,bindata05:9092 --topic test
-
验证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安装包
-
下载Flume离线安装包:
在Cloudera Manager的下载页面或Apache Flume官方网站下载适用于CDH的Flume安装包。例如:。
-
上传安装包到集群:
使用脚本将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
-
创建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路径。
-
-
启动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 &
-
验证Flume运行状态:
使用以下命令查看Flume进程是否在运行:
ps -ef | grep flume
应看到Flume Agent的相关进程正在运行。
2.3.4 配置Flume自动启动
为了确保Flume在系统重启后自动启动,可以创建系统服务。
-
创建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
-
重新加载Systemd配置:
systemctl daemon-reload
-
启动并设置Flume服务自启动:
systemctl start flume systemctl enable flume
-
验证Flume服务状态:
systemctl status flume
确认服务已成功启动并处于运行状态。
2.3.5 配置Flume与Kafka集成(可选)
如果需要将Flume与Kafka集成,以实现更复杂的数据流处理,可以按照以下步骤进行配置。
-
编辑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
-
重启Flume服务:
systemctl restart flume
-
验证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
-
下载Zookeeper安装包:
在Cloudera Manager的下载页面或Apache Zookeeper官方网站下载Zookeeper安装包。例如:。
-
上传安装包到集群:
使用脚本将Zookeeper安装包上传到所有节点的指定目录。
xsync /opt/software/zookeeper-3.6.3.tar.gz
-
解压安装包:
在每个Zookeeper节点上执行以下命令解压Zookeeper安装包:
cd /opt/software/ tar -zxvf zookeeper-3.6.3.tar.gz
2.4.2 配置Zookeeper
-
创建Zookeeper数据目录:
mkdir -p /var/lib/zookeeper
-
配置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的服务器节点。
-
-
配置Zookeeper ID:
在每个Zookeeper服务器节点上,编辑文件:
echo "1" > /var/lib/zookeeper/myid # bindata04 echo "2" > /var/lib/zookeeper/myid # bindata05
-
启动Zookeeper服务:
在每个Zookeeper服务器节点上启动Zookeeper:
/opt/software/zookeeper-3.6.3/bin/zkServer.sh start
-
验证Zookeeper状态:
使用以下命令检查Zookeeper是否正常运行:
/opt/software/zookeeper-3.6.3/bin/zkServer.sh status
应显示或。
2.4.3 配置Zookeeper自动启动
-
创建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
-
重新加载Systemd配置:
systemctl daemon-reload
-
启动并设置Zookeeper服务自启动:
systemctl start zookeeper systemctl enable zookeeper
-
验证Zookeeper服务状态:
systemctl status zookeeper
确认服务已成功启动并处于运行状态。
2.4.4 配置Zookeeper监控与管理
-
安装Zookeeper监控工具(如):
Zookeeper自带了命令行监控工具,可以用于检查集群状态。
/opt/software/zookeeper-3.6.3/bin/zkCli.sh -server bindata04:2181
-
常用命令:
-
查看Zookeeper节点列表:
ls /
-
查看特定节点的数据:
get /zookeeper/quota
-
退出Zookeeper CLI:
quit
-
第3章 数仓之数仓搭建环境准备
本章将详细讲解Hive的安装与配置。Hive作为数据仓库系统,提供了SQL-like的查询语言,方便对存储在HDFS中的大规模数据进行分析和处理。
3.1 Hive安装
3.1.1 添加服务
-
登录Cloudera Manager Web UI。
-
进入集群管理页面:
-
点击集群,选择Cluster 1。
-
-
添加Hive服务:
-
点击添加服务按钮。
-
在服务列表中选择Hive,然后点击继续。
-
3.1.2 添加Hive服务
-
选择安装位置:
-
选择要安装Hive服务的节点,通常选择一个专用的Hive Server节点,例如。
-
-
确认依赖项:
-
Cloudera Manager会自动检测并安装Hive所需的依赖组件,如HDFS和YARN。
-
-
点击 继续 以进入下一步。
3.1.3 将 Hive 服务添加到 Cluster 1
-
配置Hive服务:
-
在Hive服务的配置页面,确认各项参数设置正确。
-
特别注意Hive metastore的数据库配置,确保其指向之前在MySQL中创建的Hive数据库。
-
-
点击 继续 以进入下一步。
3.1.4 配置Hive元数据
Hive依赖于metastore来存储元数据,因此需要正确配置Hive metastore。
-
配置数据库连接:
-
在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
-
-
初始化Hive metastore数据库:
Cloudera Manager会自动执行初始化脚本,将Hive metastore所需的表结构创建到MySQL数据库中。
-
确认配置并应用:
-
点击继续,Cloudera Manager将自动完成Hive服务的安装和配置。
-
3.1.5 测试通过后继续
在Cloudera Manager完成Hive服务的安装后,进行基本测试以确保服务正常运行。
-
访问Hive Web UI:
-
Hive Server通常在端口上提供服务。
-
可以通过Hive CLI或Beeline连接到Hive。
beeline -u jdbc:hive2://bindata01:10000 -n hive -p hive
-
-
执行简单查询:
SHOW DATAbaseS;
应显示已创建的数据库列表。
3.1.6 自动启动Hive进程
确保Hive服务在系统启动时自动启动。
-
在Cloudera Manager中:
-
导航到Hive服务。
-
点击配置选项卡。
-
搜索自动启动相关设置,确保其启用。
-
-
验证自动启动:
-
重启集群节点,确认Hive服务是否随系统自动启动。
-
3.2 Hive metastore配置(补充)
Hive metastore是Hive的核心组件,负责存储数据库、表、分区等元数据信息。以下是进一步优化Hive metastore的配置步骤。
3.2.1 配置Hive metastore连接池
-
编辑Hive metastore配置文件:
vim /etc/hive/conf/hive-site.xml
-
添加或修改连接池参数:
<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服务
-
启动Hive metastore Thrift服务:
hive --service metastore &
-
配置服务端口:
在中设置Thrift服务的端口(默认)。
<property> <name>hive.metastore.uris</name> <value>thrift://bindata01:9083</value> <description>Hive metastore Thrift URI</description> </property>
-
配置防火墙规则:
确保端口在安全组中开放,允许客户端连接。
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服务
-
登录Cloudera Manager Web UI。
-
进入集群管理页面:
-
点击集群,选择Cluster 1。
-
-
添加Spark服务:
-
点击添加服务按钮。
-
在服务列表中选择Spark,然后点击继续。
-
4.1.3 分配Spark组件
-
选择Spark Master和Worker节点:
-
Spark Master:选择一台节点(如)作为Spark Master。
-
Spark Worker:选择集群中所有需要运行Spark Worker的节点(至)。
-
-
确认组件分配:
-
确认所有组件分配正确后,点击继续。
-
4.1.4 配置Spark参数
-
调整Spark配置:
-
在Spark服务的配置页面,根据集群资源情况调整Spark参数。
-
例如,设置、等参数,以优化Spark的性能。
-
-
设置Spark与YARN的集成:
-
确保Spark使用YARN作为资源管理器,在中配置相关参数。
-
4.1.5 启动Spark服务
-
应用配置并启动服务:
-
Cloudera Manager会根据配置自动启动Spark Master和Worker。
-
-
验证Spark服务状态:
-
在Cloudera Manager中,检查Spark服务的运行状态,确保所有组件均处于运行状态。
-
4.1.6 测试Spark安装
-
提交一个简单的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
-
查看作业运行状态:
在Cloudera Manager的Spark Web UI中,查看提交的作业是否成功完成。
4.1.7 配置Spark自动启动
确保Spark服务在系统启动时自动启动。
-
在Cloudera Manager中:
-
导航到Spark服务。
-
点击配置选项卡。
-
搜索自动启动相关设置,确保其启用。
-
-
验证自动启动:
-
重启集群节点,确认Spark服务是否随系统自动启动。
-
4.2 Spark优化(可选)
根据集群的具体使用场景,可以对Spark进行进一步的优化配置,以提升其性能和资源利用率。
4.2.1 调整Spark内存设置
-
编辑Spark配置文件:
在Cloudera Manager中,导航到Spark服务的配置选项卡。
-
设置Executor和Driver内存:
-
:设置每个Executor的内存大小,例如。
-
:设置Driver的内存大小,例如。
-
4.2.2 配置动态资源分配
-
启用动态资源分配:
spark.dynamicAllocation.enabled=true spark.dynamicAllocation.minExecutors=2 spark.dynamicAllocation.maxExecutors=10 spark.dynamicAllocation.initialExecutors=2
-
配置Shuffle服务:
确保YARN的Shuffle服务已启用,以支持动态资源分配。
4.2.3 配置Spark缓存策略
根据数据访问模式,配置Spark的缓存策略以优化性能。
-
设置RDD持久化级别:
在Spark应用程序中,根据需要选择合适的持久化级别(如、等)。
-
优化数据分区:
根据数据量和节点资源,调整数据分区数,以平衡负载和资源利用。
第5章 配置OOZIE
Oozie是一个工作流调度系统,用于管理Hadoop作业的依赖关系和执行顺序。本章将介绍如何在CDH集群中添加和配置Oozie服务。
5.1 添加服务
5.1.1 登录Cloudera Manager
-
打开Cloudera Manager Web UI。
-
进入集群管理页面,选择Cluster 1。
5.1.2 添加Oozie服务
-
点击添加服务按钮。
-
在服务列表中选择Oozie,然后点击继续。
5.2 分配节点
5.2.1 选择Oozie服务器节点
-
Oozie Server:
-
选择一台专用节点(如)作为Oozie Server。
-
-
Oozie Client:
-
选择所有需要运行Oozie客户端的节点。
-
5.2.2 确认组件分配
确认Oozie的各个组件(如Oozie Server、Oozie Client)已正确分配到指定节点后,点击继续。
5.3 配置Oozie元数据
Oozie需要一个数据库来存储其元数据信息。以下是配置Oozie元数据的步骤。
5.3.1 在MySQL中创建Oozie数据库
-
登录MySQL:
mysql -uroot -p000000
-
创建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数据库连接
-
编辑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
-
初始化Oozie数据库:
Cloudera Manager会自动运行初始化脚本,将Oozie的表结构创建到MySQL数据库中。
5.3.3 配置Oozie服务
-
设置Oozie Web端口:
默认情况下,Oozie Web UI运行在端口上。可以根据需要调整该端口。
-
配置Oozie的内存设置:
根据集群资源情况,调整Oozie的JVM内存参数,以优化性能。
5.3.4 启动Oozie服务
-
应用配置并启动服务:
Cloudera Manager会根据配置自动启动Oozie Server和Oozie Client。
-
验证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服务在系统启动时自动启动。
-
在Cloudera Manager中:
-
导航到Oozie服务。
-
点击配置选项卡。
-
搜索自动启动相关设置,确保其启用。
-
-
验证自动启动:
-
重启集群节点,确认Oozie服务是否随系统自动启动。
-
第6章 配置HUE
HUE(Hadoop User Experience)是一个基于Web的用户界面,提供对Hadoop生态系统各组件的访问和管理功能。本章将介绍如何在CDH集群中添加和配置HUE服务。
6.1 添加服务
6.1.1 登录Cloudera Manager
-
打开Cloudera Manager Web UI。
-
进入集群管理页面,选择Cluster 1。
6.1.2 添加HUE服务
-
点击添加服务按钮。
-
在服务列表中选择HUE,然后点击继续。
6.2 添加Hue服务
6.2.1 选择安装位置
-
HUE Server:
-
选择一台专用节点(如)作为HUE Server。
-
-
HUE Client:
-
选择所有需要运行HUE客户端的节点。
-
6.2.2 配置HUE服务
-
配置数据库连接:
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
-
设置HUE Web端口:
默认情况下,HUE Web UI运行在端口上。可以根据需要调整该端口。
-
配置HUE的内存和并发设置:
根据集群资源情况,调整HUE的JVM内存参数和并发连接数,以优化性能。
6.2.3 启动HUE服务
-
应用配置并启动服务:
Cloudera Manager会根据配置自动启动HUE Server和HUE Client。
-
验证HUE服务状态:
-
在Cloudera Manager中,检查HUE服务的运行状态,确保所有组件均处于运行状态。
-
访问HUE Web UI:
-
6.2.4 配置HUE服务的权限
-
创建HUE用户:
在HUE Web UI中,创建用于访问Hadoop生态系统的用户账户。
-
配置用户权限:
根据业务需求,配置各用户在HDFS、Hive、Spark等组件中的访问权限。
6.3 分配节点
6.3.1 选择HUE服务器节点
-
HUE Server:
-
通常选择作为HUE Server,以集中管理和访问。
-
-
HUE Client:
-
选择所有需要运行HUE客户端的节点(如至)。
-
6.3.2 确认组件分配
确认HUE的各个组件(如HUE Server、HUE Client)已正确分配到指定节点后,点击继续。
6.4 配置Hue元数据
HUE依赖于其数据库来存储用户信息和配置参数,因此需要正确配置HUE的数据库连接。
6.4.1 配置HUE数据库连接
-
编辑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
-
初始化HUE数据库:
Cloudera Manager会自动运行初始化脚本,将HUE的表结构创建到MySQL数据库中。
6.4.2 配置HUE与Hive的集成
-
编辑HUE配置文件:
vim /etc/hue/conf/hue.ini
-
配置Hive服务:
[beeswax] hive_server_host=bindata01 hive_server_port=10000
-
重启HUE服务:
systemctl restart hue
6.4.3 配置HUE与Spark的集成
-
编辑HUE配置文件:
vim /etc/hue/conf/hue.ini
-
配置Spark服务:
[spark] spark_server_host=bindata01 spark_server_port=8088
-
重启HUE服务:
systemctl restart hue
6.4.4 配置HUE与Oozie的集成
-
编辑HUE配置文件:
vim /etc/hue/conf/hue.ini
-
配置Oozie服务:
[oozie] oozie_url=http://bindata01:11000/oozie
-
重启HUE服务:
systemctl restart hue
6.5 自动启动Hue进程
确保HUE服务在系统启动时自动启动。
-
在Cloudera Manager中:
-
导航到HUE服务。
-
点击配置选项卡。
-
搜索自动启动相关设置,确保其启用。
-
-
验证自动启动:
-
重启集群节点,确认HUE服务是否随系统自动启动。
-
第7章 其它配置
本章涵盖了一些高级配置和优化设置,包括HDFS域名访问、资源管理优化、调度器配置等。这些配置旨在提升集群的性能、稳定性和安全性。
7.1 HDFS配置域名访问
在云环境下,Hadoop集群必须使用域名访问,不能直接使用IP地址。为此,需要启用参数。
-
编辑HDFS配置文件:
在Cloudera Manager中,导航到HDFS服务的配置选项卡。
-
启用域名访问:
搜索并设置以下参数:
dfs.client.use.datanode.hostname=true
-
应用配置并重新启动HDFS服务:
Cloudera Manager会提示需要重新启动HDFS相关服务,确认后进行重启。
-
验证配置:
使用域名而非IP地址访问HDFS,确保配置生效。
7.2 设置物理核和虚拟核占比
为了优化资源利用,可以根据实际需求调整YARN的物理核和虚拟核的占比。
-
编辑YARN配置:
在Cloudera Manager中,导航到YARN服务的配置选项卡。
-
设置物理核和虚拟核数:
-
yarn.nodemanager.resource.cpu-vcores:设置每个NodeManager可用的虚拟核数。
例如,每台机器物理核2核,虚拟核设置为4核:
yarn.nodemanager.resource.cpu-vcores=4
-
-
应用配置并重新启动YARN服务。
7.3 修改单个容器下最大CPU申请资源
调整YARN的调度器参数,以控制单个容器下的最大CPU资源申请。
-
编辑YARN配置:
在Cloudera Manager中,导航到YARN服务的配置选项卡。
-
设置最大CPU申请资源:
yarn.scheduler.maximum-allocation-vcores=4
-
应用配置并重新启动YARN服务。
7.4 设置每个任务容器内存大小和单节点大小
调整YARN的内存分配参数,以优化集群的资源利用率。
-
编辑YARN配置:
在Cloudera Manager中,导航到YARN服务的配置选项卡。
-
设置每个任务容器内存大小:
yarn.scheduler.maximum-allocation-mb=4096
-
设置每个节点的可用内存:
yarn.nodemanager.resource.memory-mb=7168
-
应用配置并重新启动YARN服务。
7.5 关闭Spark动态分配资源参数
为了控制Spark的资源分配,建议关闭动态分配资源参数。
-
编辑Spark配置:
在Cloudera Manager中,导航到Spark服务的配置选项卡。
-
关闭动态分配:
spark.dynamicAllocation.enabled=false
-
应用配置并重新启动Spark服务。
7.6 修改HDFS副本数
根据数据的重要性和集群资源,调整HDFS的副本数。
-
编辑HDFS配置:
在Cloudera Manager中,导航到HDFS服务的配置选项卡。
-
设置副本数:
dfs.replication=1
-
应用配置并重新启动HDFS服务。
7.7 设置动态分区模式
Hive默认是严格模式,要求动态分区至少有一个静态分区字段。为了简化操作,可以将其设置为非严格模式。
-
编辑Hive配置:
在Cloudera Manager中,导航到Hive服务的配置选项卡。
-
设置动态分区模式:
hive.exec.dynamic.partition.mode=nonstrict
-
应用配置并重新启动Hive服务。
7.8 Hive on Spark配置
将Hive的执行引擎设置为Spark,以提升查询性能。
-
编辑Hive配置:
在Cloudera Manager中,导航到Hive服务的配置选项卡。
-
设置执行引擎为Spark:
hive.execution.engine=spark
-
配置Spark相关参数:
根据集群资源,调整Spark的内存和并发设置。
-
应用配置并重新启动Hive服务。
7.9 设置容量调度器
默认情况下,CDH使用公平调度器。为了更好地管理资源,可以将其修改为容量调度器。
-
编辑YARN调度器配置:
在Cloudera Manager中,导航到YARN服务的配置选项卡。
-
设置调度器为容量调度器:
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
-
配置容量调度器队列:
-
根队列:默认root队列,可以创建子队列。
-
创建子队列:例如、、。
-
设置资源占比
:
-
队列占YARN集群资源的40%。
-
队列占YARN集群资源的20%。
-
队列占YARN集群资源的40%。
-
-
-
应用配置并重新启动YARN服务。
-
验证调度器配置:
-
访问YARN ResourceManager Web UI,确认调度器已切换为容量调度器,并显示已创建的队列。
-
7.10 配置Yarn环境变量
为了确保HUE在执行调度任务时能够正确识别环境变量,需要配置YARN的环境变量。
-
编辑YARN环境变量配置:
vim /etc/hadoop/conf/yarn-env.sh
-
添加JAVA_HOME路径:
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
-
应用配置并重新启动YARN服务。
7.11 Oozie和HDFS HA配置
由于HDFS已启用高可用性,HUE需要正确配置以识别Active和Standby节点。
-
配置HTTPFS角色:
在Cloudera Manager中,导航到HDFS服务,添加HTTPFS角色到集群中。
-
配置HUE连接HTTPFS:
编辑HUE的配置文件,设置HDFS的HTTPFS地址。
[hdfs] dfs_namenode_http_address=bindata01:50070,bindata02:50070
-
重启HUE服务:
systemctl restart hue
-
验证配置:
在HUE Web UI中,访问HDFS浏览器,确保能够正确访问Active NameNode。
7.12 取消向量化执行
Hive的向量化执行可以提升查询性能,但在某些情况下可能需要关闭。
-
编辑Hive配置:
在Cloudera Manager中,导航到Hive服务的配置选项卡。
-
关闭向量化执行:
hive.vectorized.execution.enabled=false
-
应用配置并重新启动Hive服务。
7.13 设置Yarn AppMaster资源限制
控制YARN的AppMaster资源使用,以防止单个应用占用过多资源。
-
编辑YARN配置:
在Cloudera Manager中,导航到YARN服务的配置选项卡。
-
设置AppMaster资源限制:
yarn.scheduler.capacity.maximum-am-resource-percent=0.6
说明:设置最多60%的资源可用于运行AppMaster。
-
应用配置并重新启动YARN服务。
7.14 关闭Transparent Huge Pages (THP)
关闭THP可以提高Hadoop组件的性能和稳定性。
-
执行以下命令:
echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled
-
确保重启后依然有效:
将上述命令添加到文件中。
vim /etc/rc.local
添加以下内容:
echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled
-
保存并退出。
第8章 常见问题与解决方案
在搭建和配置CDH集群的过程中,可能会遇到各种问题。以下是一些常见问题及其解决方案,供参考。
8.1 SSH连接频繁断开
问题:云服务器SSH连接经常在一段时间后断开。
解决方案:
-
编辑文件,修改以下参数:
ClientAliveInterval 30 ClientAliveCountMax 1800
-
重启SSH服务:
service sshd restart
8.2 防火墙阻止必要端口
问题:部分服务无法访问,可能是防火墙阻止了必要端口。
解决方案:
-
检查防火墙状态:
systemctl status firewalld
-
开放必要端口:
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无法启动。
解决方案:
-
检查日志文件:
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
-
确认数据库连接配置正确,确保MySQL服务正常运行。
-
确保所有依赖包已正确安装:
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
-
如果问题仍然存在,尝试重新安装Cloudera Manager服务组件。
8.4 Hive metastore连接失败
问题:Hive无法连接到metastore数据库。
解决方案:
-
检查MySQL服务是否正常运行:
systemctl status mysql
-
确认Hive metastore的数据库连接配置正确,特别是数据库主机、端口、用户名和密码。
-
检查防火墙是否开放了MySQL的端口。
-
确认数据库用户具有足够的权限访问Hive metastore数据库。
8.5 Kafka Topic无法创建或删除
问题:尝试创建或删除Kafka Topic时失败。
解决方案:
-
检查Kafka服务是否正常运行:
systemctl status kafka
-
确认Zookeeper连接配置正确,确保Kafka能够连接到Zookeeper。
-
查看Kafka日志文件,查找具体错误信息:
tail -f /var/log/kafka/server.log
-
确认所使用的Kafka命令参数正确,尤其是和的地址和端口。
8.6 HUE无法访问Hive或Spark
问题:通过HUE Web UI无法访问Hive或Spark服务。
解决方案:
-
检查HUE服务是否正常运行:
systemctl status hue
-
确认HUE配置文件中Hive和Spark的连接参数正确。
-
检查HDFS和YARN服务是否正常运行,确保HUE能够通过网络访问这些服务。
-
查看HUE日志文件,查找具体错误信息:
tail -f /var/log/hue/hue.log
8.7 Flume数据未写入HDFS
问题:Flume无法将数据写入HDFS。
解决方案:
-
检查Flume Agent是否正常运行:
ps -ef | grep flume
-
确认Flume配置文件中的HDFS路径正确,并且HDFS服务正常运行。
-
查看Flume日志文件,查找具体错误信息:
tail -f /var/log/flume/flume.log
-
确认HDFS目录权限设置正确,Flume用户有写入权限。
8.8 Spark作业执行缓慢
问题:提交的Spark作业执行速度较慢,影响数据处理效率。
解决方案:
-
优化Spark配置:
-
增加数量和内存。
-
调整的内存和CPU核心数。
-
-
优化数据分区:
-
根据数据量和集群资源,调整数据分区数,避免数据倾斜。
-
-
使用Spark缓存:
-
对频繁访问的数据集进行缓存,提高查询速度。
-
-
监控Spark作业:
-
使用Cloudera Manager的Spark Web UI,监控作业的执行情况,识别性能瓶颈。
-
-
调整YARN资源分配:
-
确保Spark作业有足够的资源分配,避免资源竞争。
-
8.9 HDFS存储空间不足
问题:HDFS存储空间不足,导致数据写入失败。
解决方案:
-
增加HDFS存储容量:
-
为HDFS添加更多的数据节点或增加现有节点的存储容量。
-
-
调整HDFS副本数:
-
减少HDFS的副本数(如从3降为2或1),以节省存储空间。
-
-
清理不必要的数据:
-
删除过时或不再需要的数据文件,释放存储空间。
-
-
压缩数据:
-
使用压缩格式存储数据,如Parquet或ORC,减少存储占用。
-
第9章 集群监控与维护
本章将介绍如何利用Cloudera Manager进行集群监控与维护,确保CDH集群的高可用性和性能。
9.1 集群监控
9.1.1 使用Cloudera Manager监控集群状态
Cloudera Manager提供了全面的集群监控功能,可以实时查看各服务的运行状态和性能指标。
-
登录Cloudera Manager Web UI。
-
导航到 集群管理页面,选择Cluster 1。
-
查看服务状态:
-
每个服务的运行状态(启动、停止、警告、错误)在服务列表中一目了然。
-
点击任意服务,可查看详细的性能指标和历史数据。
-
-
监控关键指标:
-
HDFS:NameNode内存使用、磁盘空间、文件数等。
-
YARN:资源使用率、应用数、队列状态等。
-
Spark:作业执行时间、资源利用率等。
-
Kafka:Topic数量、消息速率、延迟等。
-
Hive:查询执行时间、metastore性能等。
-
9.1.2 设置告警规则
配置告警规则,以便在集群出现异常时及时通知运维人员。
-
在Cloudera Manager中:
-
导航到集群管理页面,选择Cluster 1。
-
点击告警选项卡。
-
-
创建新的告警规则:
-
点击添加告警规则按钮。
-
选择需要监控的指标和阈值,例如:
-
HDFS NameNode内存使用超过80%。
-
YARN ResourceManager CPU使用率超过90%。
-
-
-
配置告警通知:
-
设置告警触发时的通知方式,如邮件、短信或集成第三方监控工具。
-
-
保存并应用告警规则。
9.2 集群维护
9.2.1 定期备份配置和数据库
为了防止配置丢失或数据库损坏,建议定期备份集群的配置文件和数据库。
-
备份Cloudera Manager配置:
cp -r /etc/cloudera-scm-server /backup/cloudera-scm-server_backup_$(date +%F)
-
备份Hive metastore数据库:
mysqldump -u hive -phive hive > /backup/hive_metastore_backup_$(date +%F).sql
-
备份Oozie数据库:
mysqldump -u oozie -poozie oozie > /backup/oozie_backup_$(date +%F).sql
-
备份HUE数据库:
mysqldump -u hue -phue hue > /backup/hue_backup_$(date +%F).sql
9.2.2 定期更新和打补丁
保持集群组件的更新和打补丁,以修复已知漏洞和提升性能。
-
使用Cloudera Manager进行更新:
-
Cloudera Manager会提示可用的更新和补丁。
-
按照向导步骤应用更新,确保在非高峰期进行,以减少对业务的影响。
-
-
验证更新后服务状态:
-
更新完成后,检查所有服务是否正常运行。
-
通过Cloudera Manager的监控功能,确认关键指标无异常。
-
9.2.3 优化集群性能
根据集群的使用情况,定期进行性能优化,以确保资源的高效利用。
-
调整资源分配:
-
根据业务需求,动态调整YARN的资源分配策略。
-
监控Spark和Hive的资源使用情况,避免资源浪费。
-
-
清理临时文件:
-
定期清理HDFS中的临时文件和不再使用的数据,释放存储空间。
hdfs dfs -rm -r /tmp/*
-
-
监控磁盘使用情况:
-
通过Cloudera Manager监控各节点的磁盘使用情况,及时扩展存储资源。
-
9.2.4 管理用户权限
确保集群的安全性,合理管理用户权限。
-
使用Cloudera Manager配置用户角色:
-
在Cloudera Manager中,导航到安全性设置。
-
创建用户组,并分配相应的访问权限。
-
-
配置HDFS和Hive的访问控制:
-
使用HDFS的权限机制,控制用户对文件和目录的访问权限。
-
使用Hive的角色和权限管理,控制用户对数据库和表的访问权限。
-
第10章 性能优化与调优
为了提升CDH集群的整体性能,本章将介绍一些常见的性能优化和调优方法,涵盖HDFS、YARN、Hive、Spark等关键组件。
10.1 HDFS性能优化
10.1.1 调整块大小
HDFS的块大小影响数据的读写性能和存储效率。根据数据类型和访问模式,适当调整块大小。
-
编辑HDFS配置:
在Cloudera Manager中,导航到HDFS服务的配置选项卡。
-
设置块大小:
dfs.blocksize=134217728 # 128MB
说明:将块大小设置为128MB,可以减少NameNode的内存消耗,提高大文件的读写性能。
-
应用配置并重新启动HDFS服务。
10.1.2 优化NameNode内存设置
NameNode的内存设置直接影响HDFS的性能和稳定性。
-
编辑NameNode的JVM参数:
在Cloudera Manager中,导航到HDFS服务的配置选项卡,搜索NameNode JVM Heap Size。
-
调整内存大小:
根据集群规模和数据量,适当增加NameNode的内存。例如,将堆内存设置为8GB:
HDFS NameNode Heap Size = 8192
-
应用配置并重新启动NameNode服务。
10.1.3 配置HDFS缓存
启用HDFS的缓存功能,可以加速对热点数据的访问。
-
编辑HDFS配置:
在Cloudera Manager中,导航到HDFS服务的配置选项卡。
-
设置缓存目录:
dfs.namenode.cache.pool.default.capacity=100 dfs.namenode.cache.pool.default.type=MEMORY
-
应用配置并重新启动HDFS服务。
10.2 YARN性能优化
10.2.1 调整YARN调度器参数
根据集群资源和业务需求,调整YARN调度器的参数,以优化资源分配和任务调度。
-
编辑YARN配置:
在Cloudera Manager中,导航到YARN服务的配置选项卡。
-
设置调度器参数:
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
-
应用配置并重新启动YARN服务。
10.2.2 优化NodeManager资源设置
确保每个NodeManager合理分配资源,避免资源浪费或过载。
-
编辑NodeManager配置:
在Cloudera Manager中,导航到YARN服务的配置选项卡,找到NodeManager相关配置。
-
设置资源参数:
yarn.nodemanager.resource.memory-mb=7168 yarn.nodemanager.resource.cpu-vcores=4
-
应用配置并重新启动NodeManager服务。
10.2.3 配置YARN队列
根据业务需求,创建和配置不同的YARN队列,确保资源合理分配。
-
创建队列:
在YARN调度器配置中,创建、、等队列。
-
设置队列资源占比:
yarn.scheduler.capacity.root.spark.capacity=40 yarn.scheduler.capacity.root.hive.capacity=20 yarn.scheduler.capacity.root.flink.capacity=40
-
应用配置并重新启动YARN服务。
10.3 Hive性能优化
10.3.1 使用合适的文件格式
选择高效的文件格式,如Parquet或ORC,可以显著提升查询性能。
-
创建表时指定文件格式:
CREATE TABLE example_table ( id INT, name STRING, value DOUBLE ) STORED AS PARQUET;
10.3.2 启用Hive向量化执行
向量化执行可以提升查询性能,但需要确保执行引擎为Spark,并使用支持的文件格式。
-
编辑Hive配置:
在Cloudera Manager中,导航到Hive服务的配置选项卡。
-
启用向量化执行:
hive.vectorized.execution.enabled=true hive.vectorized.execution.reduce.enabled=true
-
应用配置并重新启动Hive服务。
10.3.3 优化Hive查询
-
使用分区表:
对大表进行分区,可以显著提升查询效率。
CREATE TABLE partitioned_table ( id INT, name STRING, value DOUBLE ) PARTITIonED BY (dt STRING) STORED AS PARQUET;
-
使用桶表:
对表进行桶划分,可以提高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的缓存机制,可以加速频繁访问的数据查询。
-
编辑Hive配置:
在Cloudera Manager中,导航到Hive服务的配置选项卡。
-
设置缓存参数:
hive.llap.io.enabled=true hive.llap.execution.mode=native
-
应用配置并重新启动Hive服务。
10.4 Spark性能优化
10.4.1 调整Executor数量和内存
根据集群资源和作业需求,合理配置Spark的Executor数量和内存。
-
编辑Spark配置:
在Cloudera Manager中,导航到Spark服务的配置选项卡。
-
设置Executor参数:
spark.executor.instances=10 spark.executor.memory=4g spark.executor.cores=2 spark.driver.memory=2g
-
应用配置并重新启动Spark服务。
10.4.2 优化Spark应用程序
-
使用缓存和持久化:
对频繁使用的数据集进行缓存,提高查询速度。
val df = spark.read.parquet("hdfs://bindata01:8020/user/data.parquet") df.cache()
-
优化数据分区:
根据数据量和集群资源,调整数据分区数,避免数据倾斜。
df.repartition(100)
-
使用合适的Shuffle分区数:
spark.sql.shuffle.partitions=200
10.4.3 配置Spark Shuffle服务
-
编辑Spark配置:
在Cloudera Manager中,导航到Spark服务的配置选项卡。
-
启用Shuffle服务:
spark.shuffle.service.enabled=true spark.dynamicAllocation.shuffleTracking.enabled=true
-
应用配置并重新启动Spark服务。
第11章 安全配置
为了保护数据安全和集群的稳定运行,本章将介绍如何配置CDH集群的安全性,包括用户认证、权限管理和数据加密等。
11.1 配置Kerberos认证
Kerberos是一种网络认证协议,用于确保集群中的用户和服务的身份验证。
11.1.1 安装Kerberos服务
-
在Kerberos服务器节点上安装Kerberos:
yum install krb5-server krb5-libs krb5-workstation -y
-
配置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
-
初始化Kerberos数据库:
kdb5_util create -r EXAMPLE.COM -s
-
启动Kerberos服务:
systemctl start krb5kdc systemctl start kadmin systemctl enable krb5kdc systemctl enable kadmin
11.1.2 配置Cloudera Manager使用Kerberos
-
在Cloudera Manager中启用Kerberos:
-
导航到安全性设置。
-
启用Kerberos认证,并配置Kerberos Realm和KDC地址。
-
-
为各个服务创建Kerberos Principal:
Cloudera Manager会自动为集群中的各个服务创建必要的Kerberos Principal。
-
生成和分发Keytab文件:
Cloudera Manager会生成Keytab文件,并将其分发到相应的节点。
-
应用配置并重新启动所有服务。
11.1.3 验证Kerberos认证
-
测试用户认证:
使用Kerberos用户登录集群,确保认证正常。
kinit user@EXAMPLE.COM
-
验证服务认证:
确认集群中的各个服务(如HDFS、YARN、Hive等)能够通过Kerberos进行认证。
11.2 配置权限管理
合理配置权限管理,确保用户只能访问其被授权的数据和服务。
11.2.1 使用HDFS权限机制
-
设置HDFS目录权限:
hdfs dfs -chmod 755 /user/hive hdfs dfs -chown hive:hive /user/hive
-
创建用户组并分配权限:
groupadd analytics usermod -aG analytics user1 hdfs dfs -chgrp analytics /user/analytics hdfs dfs -chmod 770 /user/analytics
11.2.2 使用Hive权限管理
-
启用Hive的授权机制:
在Hive配置文件中启用授权插件。
hive.security.authorization.enabled=true hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider
-
配置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提供了更加细粒度的权限管理和审计功能。
-
安装和配置Ranger:
-
在Cloudera Manager中,导航到添加服务,选择Ranger,并按照向导完成安装。
-
-
配置Ranger策略:
-
登录Ranger Web UI,创建策略,定义用户和组对各个服务的访问权限。
-
-
集成Ranger与Hive、HDFS等服务:
-
在Cloudera Manager中,为Hive、HDFS等服务启用Ranger的集成。
-
11.3 数据加密配置
为了保护数据在传输和存储过程中的安全,可以配置数据加密。
11.3.1 启用HDFS数据加密
-
生成加密密钥:
hdfs key create mycluster.key
-
编辑HDFS配置:
在Cloudera Manager中,导航到HDFS服务的配置选项卡,启用数据加密。
dfs.encrypt.data.transfer=true dfs.encrypt.data.transfer.protocol=RC4
-
应用配置并重新启动HDFS服务。
11.3.2 启用Hive数据加密
-
编辑Hive配置:
在Cloudera Manager中,导航到Hive服务的配置选项卡,启用加密选项。
hive.encryption.enabled=true hive.encryption.keystore.path=/path/to/keystore.jceks hive.encryption.keystore.password=yourpassword
-
创建加密表:
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数据加密
-
编辑Kafka配置文件:
vim /opt/software/kafka-2.8.0/config/server.properties
-
启用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
-
重启Kafka服务。
第12章 高可用性配置
为了确保CDH集群的高可用性,避免单点故障导致服务中断,本章将介绍如何配置各个组件的高可用性设置。
12.1 HDFS NameNode HA配置
12.1.1 配置Active和Standby NameNode
-
在Cloudera Manager中:
-
导航到HDFS服务。
-
点击配置选项卡,启用High Availability选项。
-
-
分配NameNode角色:
-
Active NameNode:
-
Standby NameNode:
-
-
配置Zookeeper Failover Controller:
确保Zookeeper已正确配置,用于管理NameNode的故障转移。
-
应用配置并重新启动HDFS服务。
12.1.2 验证NameNode HA配置
-
检查NameNode状态:
在Cloudera Manager的HDFS Web UI中,确认Active和Standby NameNode的状态。
-
测试故障转移:
-
停止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
-
在Cloudera Manager中:
-
导航到YARN服务。
-
点击配置选项卡,启用ResourceManager High Availability选项。
-
-
分配ResourceManager角色:
-
Active ResourceManager:
-
Standby ResourceManager:
-
-
配置Zookeeper用于YARN HA管理。
-
应用配置并重新启动YARN服务。
12.2.2 验证ResourceManager HA配置
-
检查ResourceManager状态:
在Cloudera Manager的YARN Web UI中,确认Active和Standby ResourceManager的状态。
-
测试故障转移:
-
停止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的高可用性
-
在Cloudera Manager中:
-
导航到Hive服务。
-
点击配置选项卡,启用Hive metastore High Availability选项。
-
-
分配metastore角色:
-
Active metastore:
-
Standby metastore:(需预先配置节点)
-
-
配置数据库高可用性:
使用MySQL的主从复制或其他高可用性方案,确保Hive metastore数据库的高可用性。
-
应用配置并重新启动Hive服务。
12.3.2 验证Hive metastore HA配置
-
检查metastore状态:
在Cloudera Manager的Hive Web UI中,确认Active和Standby metastore的状态。
-
测试故障转移:
-
停止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的高可用性
-
在Cloudera Manager中:
-
导航到Spark服务。
-
点击配置选项卡,启用Spark Master High Availability选项。
-
-
分配Spark Master角色:
-
Primary Spark Master:
-
Standby Spark Master:
-
-
配置Zookeeper用于Spark Master HA管理。
-
应用配置并重新启动Spark服务。
12.4.2 验证Spark Master HA配置
-
检查Spark Master状态:
在Cloudera Manager的Spark Web UI中,确认Primary和Standby Spark Master的状态。
-
测试故障转移:
-
停止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和各个服务的配置文件,确保在配置丢失或损坏时能够快速恢复。
-
备份Cloudera Manager配置:
cp -r /etc/cloudera-scm-server /backup/cloudera-scm-server_backup_$(date +%F)
-
备份各服务的配置文件:
例如,备份Hive配置文件:
cp /etc/hive/conf/hive-site.xml /backup/hive-site.xml_backup_$(date +%F)
13.1.2 定期备份数据库
定期备份Hive metastore、Oozie、HUE等服务的数据库,确保在数据库故障时能够恢复元数据信息。
-
备份Hive metastore数据库:
mysqldump -u hive -phive hive > /backup/hive_metastore_backup_$(date +%F).sql
-
备份Oozie数据库:
mysqldump -u oozie -poozie oozie > /backup/oozie_backup_$(date +%F).sql
-
备份HUE数据库:
mysqldump -u hue -phue hue > /backup/hue_backup_$(date +%F).sql
13.1.3 备份HDFS数据
定期备份HDFS中的重要数据,以防止数据丢失。
-
使用DistCp进行HDFS数据备份:
hadoop distcp hdfs://bindata01:8020/user/data hdfs://backup-server:8020/user/data_backup_$(date +%F)
-
验证备份结果:
hdfs dfs -ls hdfs://backup-server:8020/user/data_backup_$(date +%F)
13.2 执行恢复操作
13.2.1 恢复配置文件
在配置文件丢失或损坏时,使用备份文件进行恢复。
-
恢复Cloudera Manager配置:
cp -r /backup/cloudera-scm-server_backup_<日期> /etc/cloudera-scm-server
-
恢复各服务的配置文件:
cp /backup/hive-site.xml_backup_<日期> /etc/hive/conf/hive-site.xml
13.2.2 恢复数据库
在数据库故障时,使用备份文件进行恢复。
-
恢复Hive metastore数据库:
mysql -u hive -phive hive < /backup/hive_metastore_backup_<日期>.sql
-
恢复Oozie数据库:
mysql -u oozie -poozie oozie < /backup/oozie_backup_<日期>.sql
-
恢复HUE数据库:
mysql -u hue -phue hue < /backup/hue_backup_<日期>.sql
13.2.3 恢复HDFS数据
在HDFS数据丢失时,使用备份数据进行恢复。
-
使用DistCp进行HDFS数据恢复:
hadoop distcp hdfs://backup-server:8020/user/data_backup_<日期> hdfs://bindata01:8020/user/data
-
验证恢复结果:
hdfs dfs -ls hdfs://bindata01:8020/user/data
第14章 性能监控与日志管理
为了确保CDH集群的高效运行,持续的性能监控和日志管理是必不可少的。本章将介绍如何利用Cloudera Manager进行性能监控以及如何管理和分析集群日志。
14.1 性能监控
14.1.1 使用Cloudera Manager监控关键指标
Cloudera Manager提供了丰富的监控指标,帮助运维人员实时了解集群的运行状态。
-
登录Cloudera Manager Web UI。
-
导航到 集群管理页面,选择Cluster 1。
-
查看服务指标:
-
HDFS:NameNode内存使用、磁盘利用率、文件系统操作速率等。
-
YARN:资源使用率、应用提交数、队列状态等。
-
Spark:作业执行时间、资源分配情况、内存使用等。
-
Hive:查询执行时间、metastore响应时间等。
-
Kafka:Topic消息速率、延迟、分区状态等。
-
-
自定义监控仪表盘:
-
根据业务需求,自定义Cloudera Manager的监控仪表盘,展示关键性能指标。
-
14.1.2 设置告警规则
配置告警规则,以便在集群出现异常时及时通知运维人员。
-
在Cloudera Manager中:
-
导航到集群管理页面,选择Cluster 1。
-
点击告警选项卡。
-
-
创建新的告警规则:
-
点击添加告警规则按钮。
-
选择需要监控的指标和阈值,例如:
-
HDFS NameNode内存使用超过80%。
-
YARN ResourceManager CPU使用率超过90%。
-
-
-
配置告警通知:
-
设置告警触发时的通知方式,如邮件、短信或集成第三方监控工具。
-
-
保存并应用告警规则。
14.1.3 使用Ganglia进行集群监控
Ganglia是一个分布式监控系统,适用于大规模集群的性能监控。
-
安装Ganglia:
在Cloudera Manager中,导航到添加服务,选择Ganglia,并按照向导完成安装。
-
配置Ganglia:
-
配置Ganglia的Master和Monitor节点。
-
设置监控指标和报警阈值。
-
-
访问Ganglia Web UI:
-
通过浏览器访问,查看集群的实时性能数据。
-
14.2 日志管理
14.2.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
-
-
启动Flume Agent:
systemctl start flume systemctl enable flume
14.2.2 使用Logstash进行日志处理
Logstash是一个强大的日志处理工具,可以用于收集、过滤和转发日志数据。
-
安装Logstash:
在指定节点上安装Logstash。
yum install logstash -y
-
配置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 } }
-
启动Logstash服务:
systemctl start logstash systemctl enable logstash
-
验证日志收集:
检查Elasticsearch中的索引,确认日志数据已成功收集。
14.2.3 使用Kibana进行日志分析
Kibana是一个开源的数据可视化和分析工具,常与Elasticsearch配合使用。
-
安装Kibana:
在指定节点上安装Kibana。
yum install kibana -y
-
配置Kibana:
编辑文件,设置Elasticsearch的地址。
server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://elasticsearch:9200"]
-
启动Kibana服务:
systemctl start kibana systemctl enable kibana
-
访问Kibana Web UI:
-
通过浏览器访问。
-
配置索引模式,创建可视化仪表盘,分析Hadoop集群的日志数据。
-
14.3 总结
本章介绍了如何利用Cloudera Manager进行集群的性能监控和日志管理。通过实时监控关键性能指标和集中化的日志收集与分析,可以及时发现和解决集群中的问题,确保CDH集群的高效和稳定运行。
第15章 集群扩展与缩减
随着业务的发展,可能需要对CDH集群进行扩展或缩减。本章将介绍如何通过Cloudera Manager对集群进行动态扩展和缩减操作。
15.1 集群扩展
15.1.1 添加新节点到集群
-
购买并配置新ECS实例:
按照第1章中介绍的步骤,购买新的云ECS实例,并完成网络和安全组配置。
-
配置新节点的环境:
-
连接新节点,配置文件,确保新节点能够解析集群中其他节点的域名。
-
配置SSH免密登录,确保新节点可以与集群中其他节点无密码互联。
-
-
安装必要的软件:
-
安装JDK、MySQL客户端等集群所需的基础软件。
-
通过和脚本,将JDK和环境变量配置分发到新节点。
-
15.1.2 将新节点添加到服务组件
-
在Cloudera Manager中添加服务:
-
登录Cloudera Manager Web UI。
-
进入集群管理页面,选择Cluster 1。
-
点击添加服务按钮,选择需要在新节点上运行的服务组件(如DataNode、NodeManager等)。
-
-
分配新节点的角色:
-
根据业务需求,分配新节点的服务角色,例如:
-
添加DataNode角色到新节点,以扩展HDFS的存储容量。
-
添加NodeManager角色到新节点,以增加YARN的资源池。
-
-
-
应用配置并启动服务:
Cloudera Manager会自动完成新节点上服务组件的安装和启动。
15.1.3 验证集群扩展
-
检查服务状态:
在Cloudera Manager中,确认新节点上的服务组件已成功启动并正常运行。
-
验证资源扩展:
-
HDFS:检查新的DataNode是否已添加到HDFS集群中。
-
YARN:确认新的NodeManager已加入YARN资源池。
-
-
执行性能测试:
通过提交Spark或Hive作业,验证集群扩展后资源利用率和性能是否提升。
15.2 集群缩减
15.2.1 从集群中移除节点
在业务需求减少或维护需要时,可以将节点从集群中移除。
-
在Cloudera Manager中停用服务组件:
-
登录Cloudera Manager Web UI。
-
进入集群管理页面,选择Cluster 1。
-
选择要移除的节点,停用其上运行的服务组件(如DataNode、NodeManager等)。
-
-
删除服务组件:
-
在Cloudera Manager中,选择要删除的服务组件。
-
点击删除按钮,按照向导完成删除操作。
-
15.2.2 移除节点的环境配置
-
从其他节点的文件中移除被删除节点的映射。
vim /etc/hosts
-
从集群管理脚本中移除节点:
如果使用了自定义脚本进行集群管理,确保从脚本中移除被删除节点的相关配置。
15.2.3 关闭并删除ECS实例
-
停止并删除云ECS实例:
-
登录云控制台。
-
选择要删除的ECS实例,停止实例后选择删除。
-
-
清理相关资源:
确保所有相关资源(如安全组规则、磁盘等)已被正确清理,避免不必要的费用。
15.2.4 验证集群缩减
-
检查服务状态:
在Cloudera Manager中,确认移除节点后的服务组件运行状态正常。
-
验证资源缩减:
-
HDFS:确认DataNode已从HDFS集群中移除,数据副本已重新平衡。
-
YARN:确认NodeManager已从YARN资源池中移除,资源分配已重新调整。
-
-
执行性能测试:
通过提交Spark或Hive作业,验证集群缩减后资源利用率和性能是否符合预期。
第16章 故障排查与恢复
在集群运行过程中,可能会遇到各种故障和问题。快速有效地排查和恢复故障,是确保集群稳定运行的关键。本章将介绍常见故障的排查方法及恢复步骤。
16.1 常见故障类型
-
服务无法启动:如HDFS NameNode、YARN ResourceManager等关键服务无法启动。
-
服务性能异常:服务响应缓慢,资源利用率异常。
-
数据丢失或损坏:HDFS中数据丢失或文件损坏。
-
网络连接问题:集群节点之间网络不通,导致服务通信失败。
-
权限问题:用户无法访问特定数据或服务,权限配置错误。
16.2 故障排查步骤
16.2.1 检查服务状态
-
通过Cloudera Manager查看服务状态:
-
登录Cloudera Manager Web UI。
-
进入集群管理页面,选择Cluster 1。
-
查看各个服务的运行状态,确认是否有服务处于错误或停止状态。
-
-
使用命令行检查服务状态:
systemctl status hdfs-namenode systemctl status yarn-resourcemanager systemctl status hive-metastore systemctl status spark-master
16.2.2 查看日志文件
-
定位日志文件:
-
Cloudera Manager会将各个服务的日志文件集中存储在目录下。
-
例如,HDFS NameNode日志位于。
-
-
查看日志内容:
tail -f /var/log/hadoop-hdfs/hadoop-hdfs-namenode-*.log tail -f /var/log/yarn/yarn-resourcemanager-*.log
-
分析错误信息:
-
查找关键字如、等,定位问题原因。
-
16.2.3 检查系统资源
-
检查CPU和内存使用情况:
top
-
检查磁盘使用情况:
df -h
-
检查网络连接:
ping bindata01 ping bindata02
16.2.4 验证配置文件
-
检查配置文件是否正确:
-
确认各个服务的配置文件(如、、等)是否配置正确。
-
-
使用Cloudera Manager验证配置:
-
Cloudera Manager会检测配置文件的正确性,并提示配置错误。
-
16.2.5 使用Cloudera Manager工具
-
运行健康检查:
-
Cloudera Manager提供健康检查工具,自动检测集群中的潜在问题。
-
-
查看服务依赖关系:
-
确认各个服务的依赖关系是否满足,避免因依赖服务异常导致其他服务故障。
-
16.3 故障恢复步骤
16.3.1 重启服务
对于一些临时性的问题,可以通过重启相关服务进行恢复。
-
通过Cloudera Manager重启服务:
-
登录Cloudera Manager Web UI。
-
选择需要重启的服务,点击重启按钮。
-
-
使用命令行重启服务:
systemctl restart hdfs-namenode systemctl restart yarn-resourcemanager systemctl restart hive-metastore systemctl restart spark-master
16.3.2 修复配置错误
-
编辑错误的配置文件:
根据日志中提示的错误信息,修改配置文件中的错误参数。
vim /etc/hadoop/conf/hdfs-site.xml
-
应用配置并重启服务:
systemctl restart hdfs-namenode
16.3.3 恢复数据
-
使用备份恢复HDFS数据:
hadoop distcp hdfs://backup-server:8020/user/data_backup_<日期> hdfs://bindata01:8020/user/data
-
使用HDFS fsck检查数据健康状况:
hdfs fsck / -files -blocks -locations
根据检查结果,修复损坏的文件块。
16.3.4 解决网络连接问题
-
检查网络配置:
-
确认集群节点的网络配置正确,IP地址和域名解析无误。
-
-
重启网络服务:
systemctl restart network
-
验证网络连接:
ping bindata01 ping bindata02
16.3.5 解决权限问题
-
检查HDFS目录权限:
hdfs dfs -ls /user/hive hdfs dfs -chmod 755 /user/hive hdfs dfs -chown hive:hive /user/hive
-
检查Hive权限配置:
SHOW GRANTS FOR USER 'user1';
根据需要,调整用户权限。
第17章 性能测试与基准评估
在完成CDH集群的搭建和配置后,进行性能测试和基准评估是验证集群性能的重要步骤。本章将介绍如何使用常见工具进行性能测试,并分析测试结果以评估集群性能。
17.1 性能测试工具
17.1.1 Benchmark工具
-
TPC-DS:用于测试Hive和Spark的查询性能。
-
Terasort:用于测试HDFS和MapReduce的排序性能。
-
Yahoo! Cloud Serving Benchmark (YCSB):用于测试Hbase和NoSQL数据库的性能。
17.1.2 监控工具
-
Cloudera Manager:实时监控集群性能指标。
-
Ganglia:分布式监控系统,适用于大规模集群的性能监控。
-
Spark Web UI:监控Spark作业的执行情况。
17.2 运行TPC-DS基准测试
TPC-DS是一种广泛使用的基准测试,用于评估数据仓库系统的查询性能。
17.2.1 下载并安装TPC-DS工具
-
下载TPC-DS工具:
wget http://www.tpc.org/tpcds/download/tpcds-tools-2.8.tar.gz
-
解压安装包:
tar -zxvf tpcds-tools-2.8.tar.gz cd tpcds-tools-2.8
-
编译TPC-DS工具:
make
17.2.2 生成TPC-DS数据
-
创建数据目录:
mkdir /opt/tpcds/data
-
生成数据:
例如,生成1TB的数据集:
https://blog.csdn.net/2301_77890189/article/details/dsdgen -scale 1000 -dir /opt/tpcds/data -force
17.2.3 加载数据到Hive
-
创建Hive表:
使用TPC-DS工具生成的DDL文件,在Hive中创建表结构。
hive -f /opt/tpcds/tools/dsdgen/hive_ddl.sql
-
加载数据:
使用Sqoop或其他数据加载工具,将生成的数据加载到Hive表中。
hive -e "LOAD DATA INPATH '/opt/tpcds/data/' INTO TABLE table_name"
17.2.4 运行TPC-DS查询
-
执行TPC-DS查询:
在Hive中运行预定义的TPC-DS查询,记录查询执行时间和资源使用情况。
hive -f /opt/tpcds/tools/query_templates/sql/q1.sql
-
分析查询结果:
通过Cloudera Manager和Spark Web UI,监控查询的资源使用情况,分析性能瓶颈。
17.2.5 评估测试结果
-
比较预期性能:
将测试结果与预期性能指标进行比较,评估集群的查询性能是否满足业务需求。
-
优化配置:
根据测试结果,调整Hive和Spark的配置参数,优化查询性能。
17.3 运行Terasort基准测试
Terasort是一个用于测试HDFS和MapReduce排序性能的基准测试。
17.3.1 下载并安装Terasort工具
-
下载Hadoop测试工具:
Hadoop自带了Terasort测试工具,无需额外下载。
17.3.2 运行Terasort测试
-
生成随机数据:
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teragen 100000000 /user/hadoop/teragen_output
-
运行Terasort:
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar terasort /user/hadoop/teragen_output /user/hadoop/terasort_output
-
验证排序结果:
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teravalidate /user/hadoop/teragen_output /user/hadoop/terasort_output
17.3.3 评估测试结果
-
记录执行时间:
根据MapReduce作业的日志,记录数据生成、排序和验证的执行时间。
-
分析性能瓶颈:
通过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 术语解释
-
NameNode:HDFS的主节点,负责管理文件系统的元数据。
-
DataNode:HDFS的存储节点,负责存储实际的数据块。
-
ResourceManager:YARN的主节点,负责资源管理和任务调度。
-
NodeManager:YARN的工作节点,负责管理单个节点的资源。
-
Hive metastore:Hive的元数据存储,记录数据库、表、分区等信息。
-
Executor:Spark作业中的工作进程,负责执行任务。
-
Zookeeper:分布式协调服务,支持高可用性和服务发现。
-
以上就是本篇文章【Cloudera Manager搭建】的全部内容了,欢迎阅览 ! 文章地址:http://keair.bhha.com.cn/quote/7685.html 动态 相关文章 文章 同类文章 热门文章 栏目首页 网站地图 返回首页 康宝晨移动站 http://keair.bhha.com.cn/mobile/ , 查看更多