0 说明
本文基于《CDH数仓项目(一) —— CDH安装部署搭建详细流程》《CDH数仓项目(二) —— 用户行为数仓和业务数仓搭建》和《CDH数仓项目(三) —— Kerberos安全认证和Sentry权限管理》章节,本篇介绍些常见的性能测试和资源管理功能,及最后提供详细的卸载和清理CDH集群步骤
1 集群性能测试
1.1 DFSIO测试
在Hadoop中包含很多的基准测试,用来验证集群的HDFS是不是设置合理,性能是不是达到预期,DFSIO是Hadoop的一个基准测试工具,被用来分析集群HDFS的I/O性能。
DFSIO后台执行MapReduce框架,其中Map任务以并行方式读写文件,Reduce任务用来收集和汇总性能数字。可以通过这个基准测试对比吞吐量、IO速率的结果以及整个磁盘的原始速度,来确定你的集群是否得到了期待的性能。另外,可以通过这些测试中指标的严重偏差发现集群中一个或多个问题节点,结合监控系统一起使用能够更好的定位Hadoop集群的瓶颈所在。
1.1.1 写性能测试
执行如下命令进行测试,由于开启了kerberos认证,这里由hive用户进行测试
kinit -kt /var/lib/hive/hive.keytab hive/hive
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.1-tests.jar TestDFSIO -Dtest.build.data=/user/hive/benchmark -write -nrFiles 100 -fileSize 10
1.1.2 读性能测试
性能基准测试针对HDFS的读操作进行,读操作将用到第一步的写操作,因此写操作必须在读操作之前执行。
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.1-tests.jar TestDFSIO -D test.build.data=/user/hive/benchmark -read -nrFiles 100 -fileSize 10
1.1.3 删除测试数据
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.1-tests.jar TestDFSIO -D test.build.data=/user/hive/benchmark -clean
1.2 TeraSort测试
Hadoop的TeraSort是一个常用的测试,目的是利用MapReduce来尽可能快的对数据进行排序。TeraSort使用MapReduce框架通过分区操作将Map过程中的结果输出到Reduce任务,确保整体排序的顺序。TeraSort测试可以很好的对MapReduce框架的每个过程进行压力测试,为调优和配置Hadoop集群提供一个合理的参考。
1.2.1 生成测试数据
time hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teragen 10000000 /user/hive/terasort-input
1.2.2 执行测试
对于TeraSort第一个参数是HDFS上输入文件的路径,第二个参数是HDFS上输出结果的路径。
time hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar terasort /user/hive/terasort-input /user/hive/terasort-ouput
1.2.3 验证
time hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teravalidate /user/hive/terasort-ouput /user/hive/terasort-validate
hadoop fs -cat /user/hive/terasort-validate/part-r-00000
2 集群资源管理
CM提供了众多的资源KPI指标,以及丰富的可视化的资源分配、运维和监控界面。运维人员能在单一管理界面配置、监控和导出实时的系统集群资源状态、管理规则以及分用户、任务的使用状况。
CDH 以及 CM 能同时满足动态以及静态的资源管理。
动态资源池可以提供基于 YARN 的动态资源隔离能力,静态资源池可以提供基于 Linux 容器技术的静态资源隔离能力。
2.1 动态资源池
yarn默认有三种调度器——FIFO、Capacity以及Fair Scheduler,CDH推荐使用Fair Scheduler。通过动态资源池的Web UI,我们可以十分方便的配置Fair Scheduler
2.1.1 动态资源池配置
1)点击群集→动态资源池配置进入动态资源池的配置界面
2)动态资源池配置——资源池
动态资源池采用树形结构,与Fair Scheduler的队列保持一致,任务只能提交到子池。用户可自定义动态资源池,以将不同任务提交到不同的资源池中。
每一个资源池都有一个权重 (weight)的概念,它定义了资源池资源分配的比例。但并不是说每个资源池都只能获得相应比例的资源。
下面创建以三个子池——root.default、root.dev、root.prod,权重均为1
3)动态资源池配置——计划模式
假如规定我们将所有开发测试的job全部提交到root.dev资源池,所有的生产任务全部提交到root.prod资源池。由于我们的离线任务大多放在夜间执行,而开发测试工作主要在白天执行,很显然,root.dev在白天的时候需要更多的资源,root.prod在夜间需要更多的资源。计划模式就能够自动帮助我们在不同的时间段,刷新不同的资源池配置。
① 创建计划规则
白天计划
夜间计划
② 修改资源池
修改root.dev将dev的日间权重适当调大,此处上调到3。按照相同的步骤,将root.prod的夜间权重适当调大,也上调至3。调整完成后如下图:
白天:开发占3,生产占1,默认1
晚上:开发占1,生产占3,默认1
其他实际:开发、生产、默认都占1
4)动态资源池配置——放置规则
动态资源池规划完毕后,需要思考的问题就是,如何确定一个job提交后会被放置到哪一个资源池中。以下是放置规则
放置规则可以设置多个,从上到下依次校验,只要有一个规则校验成功,该任务就会被放置到该资源池中,后续规则不再校验,此处设置规则如下
5)动态资源池配置——用户限制
用户限制可对具体用户设置同时运行任务数的上限。
注意:如需采用最严格的资源权限控制,可以在资源池权限配置中为每个用户组配置相应的资源池,然后此处删除所有放置规则,只添加“已在运行时指定”一条放置规则, 并且不勾选自动创建池,此时用户提交任务时必须指定使用的资源池,方法为指定参数
-Dmapreduce.job.queuename=<pool name>
6)刷新动态资源池
动态资源池刷新之后才可生效
2.2 实操
1)在集群所有节点创建两个用户组prod、dev
groupadd prod
groupadd dev
2)在集群所有节点创建两个用户prod1,dev1,并指定其用户组分别为prod、dev
useradd prod1 -g prod
useradd dev1 -g dev
3)在HDFS上为两个用户创建家目录,并需改权限
kinit hdfs/hdfs
hadoop fs -mkdir /user/prod1
hadoop fs -chown prod1:prod /user/prod1
hadoop fs -mkdir /user/dev1
hadoop fs -chown dev1:dev /user/dev1
4)为两个用户创建Kerberos主体
kadmin.local -q "addprinc prod1/prod"
kadmin.local -q "addprinc dev1/dev"
5)分别用两个用户提交MR,观察集群资源分配情况
① prod用户提交
kinit prod1/prod
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 100 10
② dev用户提交
kinit dev1/dev
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 100 10
③ 资源分配结果
提交任务时间是晚上22:14左右,因此此时应该是夜间生产时间,所以生产用户dev分配资源更多
2.3 静态资源池
静态资源隔离能力基于 Linux 容器技术。Linux 容器工具,即 LXC,可以提供轻量级的虚拟化,以便隔离进程和资源。使用 LXC 的优点就是不需要安装太多的软件包,使用过程也不会占用太多的资源,LXC 是在 Linux 平台上基于容器的虚拟化技术的未来标准,最初的 LXC 技术是由 IBM 研发的,目前已经进入 Linux 内核主线,这意味着 LXC 技术将是目前最有竞争力的轻量级虚拟容器技术。LXC 项目由一个 Linux 内核补丁和一些用户空间(userspace)工具组成。
CDH 支持基于 CGroups 或者 Linux 容器进行静态资源隔离,保证不同应用、不同任务之间的资源使用独立性。
CM 提供了静态服务的监控和运维界面,能方便的查看和管理静态服务池。这里由于集群资源较小,不再演示。
3 数据备份
3.1 NameNode元数据备份
3.1.1 选择活动的NameNode
3.1.2 进入安全模式
3.1.3 选择保存Namespace
3.1.4 进入活动namenode所在服务器备份
mkdir /root/namenode_back
tar -zcvf /root/namenode_back/nn_back.tar.gz /dfs/nn/
3.2 备份MySQL元数据
3.2.1 备份:
mysqldump -u root -p -A > /root/mysql_back.dump
3.2.2 测试
① 删除gmall库
② 恢复
mysql -u root -p -A < /root/mysql_back.dump
③ 验证是否恢复成功
-A :全部数据库
4 清理CDH集群
4.1 停止所有服务
- 停止所有集群服务
2)停止CMservice
4.2 停用并移除Parcels
对我们安装的parcels,依次执行停用、仅限停用状态、从主机删除
4.3 删除集群
点击要删除的Cluster右侧的下拉箭头,点击删除
4.4 卸载Cloudera Manager Server
1)停止Cloudera Manager Server
systemctl stop cloudera-scm-server
2)卸载Cloudera Manager Server
yum remove cloudera-manager-server
4.5 卸载Cloudera Manager Agent(所有Agent节点)
1)停止Cloudera Manager Agent
systemctl stop supervisord
2)卸载Cloudera Manager Server
yum -y remove 'cloudera-manager-*'
3)清理
yum clean all
4.6 移除CM数据(所有节点)
umount cm_processes
rm -Rf /usr/share/cmf /var/lib/cloudera* /var/cache/yum/cloudera* /var/log/cloudera* /var/run/cloudera*
rm /tmp/.scm_prepare_node.lock
4.7 删除用户数据(所有节点)
rm -rf /var/lib/flume-ng /var/lib/hadoop* /var/lib/hue /var/lib/navigator /var/lib/oozie /var/lib/solr /var/lib/sqoop* /var/lib/zookeeper
4.8 停止并移除数据库
#停止服务
systemctl stop mysqld
#卸载数据库
yum -y remove mysql