第一章:上次课回顾
大数据实战第十八课 - CDH5.16.1离线部署
- https://blog.csdn.net/zhikanjiani/article/details/92794708
回顾:
- 阿里云三台机器,hadoop001、hadoop002、hadoop003,hadoop001部署了MySQL、Parcel文件离线源。
场景:生产上有旧环境和新环境,CDH6是有节点限制100个,超过节点限制是付费的;尽量生产上保持一致。
本次课程主要涉及以下几点:
一、正常的启动停止顺序
二、架构图
三、日志查看
四、web界面解读
五、添加删除服务
六、生产上的监控如何做
第二章:CDH的正常启动停止顺序
2.1 CDH的正常启动顺序
第一步:首先需要启动MySQL(元数据库启动):service mysql start,
启动MySQL所犯的低级错误:
1、 cdh集群停止后重新启动,首先启动mysql,查看mysql服务,提示not running,service start mysql,提示报错:
[root@hadoop001 ~]# service mysql status
MySQL is not running, but lock file (/var/lock/subsys/mysql[FAILED]
2、需要切换到mysqladmin用户下启动mysql服务:
[root@hadoop001 ~]# su - mysqladmin
Last login: Tue Sep 24 15:32:51 CST 2019 on pts/1
hadoop001:mysqladmin:/usr/local/mysql:>service mysql status
MySQL is not running, but lock file (/var/lock/subsys/mysql) exists[FAILED]
hadoop001:mysqladmin:/usr/local/mysql:>service mysql start
Starting MySQL..[ OK ]
hadoop001:mysqladmin:/usr/local/mysql:>service mysql status
MySQL running (5016)[ OK ]
未先启动MySQL元数据库,而去直接启动Hadoop001节点的server服务会出现报错:
- 首先是haodoop001节点的server进程启动后会死亡:cloudera-scm-server dead but pid file exists
- 进入到这个目录:/opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server,然后tail -f 查看近200行日志:tail -200f cloudera-scm-server.log
就开始出现一大段报错:
- 提示无法连接元数据库信息
Caused by: java.net.ConnectException: Connection refused
Could not obtain connection to query metadata : Connections could not be acquired from the underlying database!
所以:
- 我们需要先切换到mysqladmin用户中,开启mysql服务:
- 接着开始第二步的操作:
第二步:首先启动hadoop001节点的server服务,然后hadoop001~hadoop003这三台机器的agent服务都需要启动。
1、 首先启动hadoop001节点的server服务:
- 进入到如下目录: cd /opt/cloudera-manager/cm-5.16.1/etc/init.d/
- 启动server服务,./cloudera-scm-server start,这个服务启动好后等待两三分钟。
2、接着启动hadoop001~hadoop003这三台机器的agent服务:
- 进入到如下目录:cd /opt/cloudera-manager/cm-5.16.1/etc/init.d/
- 启动agent服务,./cloudera-scm-agent start,等待启动完成。
3、进入到如下目录:/opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server,查看日志文件,看7180端口有没有被成功创建。
注意:是agent服务一启动就去查看;经验值:等待一两分钟。
[root@hadoop001 cloudera-scm-server]# pwd
/opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server
[root@hadoop001 cloudera-scm-server]# ll
total 2452
-rw-r----- 1 root root 2330038 Sep 24 16:04 cloudera-scm-server.log
-rw-r--r-- 1 root root 4264 Sep 24 15:44 cloudera-scm-server.out
-rw-r----- 1 root root 164416 Sep 24 15:44 cmf-server-perf.log
[root@hadoop001 cloudera-scm-server]# tail -F cloudera-scm-server.log
4、web界面的cms服务(5个进程)
5、web界面的大数据集群服务
- 遇到Canary(金丝雀)的错误直接抑制即可
2.2 CDH的正常停止顺序
对应的停止顺序,和启动顺序相反。
- J总公司环境升级,机房断电,大数据生产有两套环境;生产在IDC机房中心,J总公司集群环境就要提前关闭,否则集群会产生损坏。
1、可以重命名为自己的集群,也可以看见CDH5.16.1这个版本、包裹文件,例如:kafka需要自己安装
2、在重命名页面上单机stop,集群组件会自己停止
3、关闭,先关闭agent端,hadoop001~hadoop003下执行命令:./cloudera-scm-agent stop
4、关闭Hadoop001机器上的server,执行命令:./cloudera-scm-server stop
5、service mysql stop
停止启动顺序相反即可。
如果报错server、agent报错,可以去到如下目录:/opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server 使用tail -200f cloudera-scm-server.log查看日志分析。
注意:在cdh启动过程中,某一步出现error飘红。该怎么去定位?
在CDH中看到Canary(金丝雀)二话不说直接抑制。
CDH启动和停止要熟悉。
2.3 CDH的CM架构图
1、首先我们部署的是一个server,server我们就部署了一个节点,而hdfs、zookeeper、yarn都是在server的基础上部署的,我们的server服务挂了的话会不会对hdfs有影响,答案是不会有影响;
2、每个节点部署了agent,agent我们是通过web端来做的,cdh官方也可以做HA,但是没有必要;我们部署了每个节点的agent进程,我们通过外部界面Admin Console来做的
3、server中的一些配置是存储在MySQL中;我们配置的是parcel-repo的离线仓库,一共有5个进程(Managemet Service),那我们的server和agent是如何进行通信的(根据RPC协议通信)。
4、server分发配置给对应的agent,agent会对父进程(supervisor)更新,父进程会对hdfs、yarn进行启动生效。
- 数据库、server进程、agent进程、cms的五个进程服务(收集机器的一些指标CPU、Memory、进程是否异常的状态指标来制成图标)、大数据的一些集群服务
注意:
- 集群中有多少台机器就部署多少个agent。
- CDH配置,必须通过web界面去修改,不要直接修改参数配置文件。
jps命令的真真假假,参考博客:
- 这个pid也有可能是假死状态
- https://mp.csdn.net/mdeditor/89052847#
[root@hadoop001 cloudera-scm-server]# ps -ef|grep 4967
[root@hadoop001 home]# ps -ef|grep 10303
hdfs 10303 5217 0 15:54 ? 00:00:16 /usr/java/jdk1.8.0_45/bin/java
-Dproc_datanode -Xmx1000m
-Dhdfs.audit.logger=INFO,RFAAUDIT
-Dsecurity.audit.logger=INFO,RFAS
-Djava.net.preferIPv4Stack=true
-Dhadoop.log.dir=/var/log/hadoop-hdfs
-Dhadoop.log.file=hadoop-cmf-hdfs-DATANODE-hadoop001.log.out
-Dhadoop.home.dir=/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hadoop
-Dhadoop.id.str=hdfs -Dhadoop.root.logger=INFO,RFA
-Djava.library.path=/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hadoop/lib/native
-Dhadoop.policy.file=hadoop-policy.xml
-Djava.net.preferIPv4Stack=true -server -Xms809500672 -Xmx809500672 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/hdfs_hdfs-DATANODE-21c7cba8c358ddc7ebabf2c2ad010e52_pid10303.hprof -XX:OnOutOfMemoryError=/opt/cloudera-manager/cm-5.16.1/lib64/cmf/service/common/killparent.sh
-Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.datanode.DataNode
hdfs 10309 10303 0 15:54 ? 00:00:00 python2.7 /opt/cloudera-manager/cm-5.16.1/lib64/cmf/agent/build/env/bin/cmf-redactor /opt/cloudera-manager/cm-5.16.1/lib64/cmf/service/hdfs/hdfs.sh datanode
root 16898 2120 0 17:28 pts/0 00:00:00 grep --color=auto 10303
2.4 进程所属的配置
- 进程所属的配置必须通过web界面修改,在生产上,我们对一个组件服务不了解的话,ps -ef|grep 4967去监听这个端口,去查看输出信息,多少内存,它的日志、library。
1、我们进入到这个目录:
- cd /opt/cloudera-manager/cm-5.16.1/run/cloudera-scm-agent/process,
- ls -lrt 根据时间从小到大排序。
注意:44-hdfs-DATANODE这个文件夹
我们进入到CDH中的hdfs界面,尝试修改参数,保存
单机左上角回到主页,点击hdfs上的电源按钮进行重启:
我们修改的参数如下显现,然后重启过时服务
重新部署的时候选中重新部署客户端配置:
此时重新回到process目录下,ll -lrt进行查看,发现生成了新的56-hdfs-DATANODE:
小结:
- web界面修改每一次重启会生效成一个新的文件夹,我们在旧的文件夹中修改所以是没有用的。
2.5 客户端所属的配置
1、我们进入另外一个目录ll /etc/hadoop/conf,我们在这两个目录下直接修改是生效不了的。
图解:
- 未来我们集群肯定是这样的一种状况:比如集群下有三个节点都是DN进程;此时我们有一个新的节点,client想要提交我们的jar包;客户端机器需要有hdfs、yarn的配置文件、Hbase配置文件。
情况一:client是独立的非集群的节点
解决办法:添加一个gateway,gateway就是一个客户端,将hdfs的这些配置部署到我们选中的节点上面;旧的会覆盖,
操作:
- 点击主界面下的hdfs,点击实例,Add Role Instance,添加一个gateway.
情况二:Client正好是集群的hdfs进程的节点
- 这种情况是无需部署gateway的。
我们要说到cdh详细某一块的配置,不单单是会搭建环境。
- gateway是客户端的进程,它只是一个配置文件并且是没有状态的。
小结:
- 假如节点没有这个目录/etc/hadoop/conf,直接添加gateway,任何进程修改配置重启生效,其中一步就是要勾选客户端同时生效。
2.6 使用Dbeaver连接MySQL修改元数据信息
- 此处我们直接使用Dbeaver去连接mysql,服务器地址为阿里云外网ip,记住在安全组规则中放开3306端口。
我们观察到数据库中的这个参数和CDH配置页面的参数是保持一致的。
测试直接在cmf.configs中修改参数mapred_reduce_tasks = 3;修改完后,重启yarn服务,等待重启完成后:
- 所以如上所示:我们直接操作数据库,保存,也是可以生效的(慎用)。
直接操作数据库的使用场景:
- 生产上有一套CDH集群环境,公司搬家或者机器搬家,IP网段必须发生变化:
1、修改我们的agent端 对server端的配置文件 hadoop001来指向
2、server连接mysql的配置文件 hadoop001 换言之,配置好etc/hosts后,所有都是用hostname.
3、修改hosts文件为最新 dbeaver查看也能看到
4、hosts表修改(ip这个字段)
- select * from cmf.hosts;
阶段小结:
1、讲了架构图,抛出配置要通过网页界面修改,jps进程的真真假假。
2、ps -ef|grep pid可以获取到一些信息;进程配置:直接修改文件夹,重启生效会产生新的文件夹。
3、通过修改数据库,重启CDH界面的方式使其生效。
第三章:查看日志案例
- J总博客:http://blog.itpub.net/30089851/viewspace-2136372/
3.1 CDH中的角色日志
进入到CDH集群环境下:如何查看yarn的角色日志:
1、回到集群主界面,点击yarn服务,进入yarn后单击instance,单击NodeManager,选中Log Files,选中Role Log File,可以直接Download full log。
- 通过命令行定位问题可以查看文件大小;这个情况文件可能比较大,日志最多是1个G才会切到下一个日志文件;不建议使用web界面下载日志。
2、日志查看:
-
server:tail -200f /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server/cloudera-scm-server.log
-
agent:tail -200f /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-agent/cloudera-scm-agent.log
遇到error如何去搜索定位:
1、日志量比较大,下载到windows上,editplus中查看
2、cat cloudera-scm-agent.log|grep -C 10 ERROR
- 出现error关键字的地方,error的上面5行和下面5行。
3、搜索日志定位:编辑日志中,:/ERROR(全日志下搜索ERROR关键词),点击鼠标中的"N"键,就是到下一个ERROR出现的地方中去。
记不清楚具体日志目录的话可以去到web界面中去寻找:
1、点击Cloudera-Manager,回到主界面 --> 单机Configuration --> Log Directories,比如说要去找hdfs下的DataNode目录,直接进行点击,右侧出现的就是日志目录:
引申出来的问题:
1、在部署过程中默认一个日志路径,一个日志文件1G,有100个日志文件;我们有一块2T的硬盘;如何把日志文件转移到2T硬盘上。
- 可以直接修改新目录地址,或者XXXX
- df -h查看内存分配
如何进行操作?
1、mv移动到新的大磁盘目录
2、ln -s进行软连接,指向以前的
3、校验用户和用户组
日志高级篇:
- 这些错误日志类似我们写Java/Scala代码中使用的try、catch异常,遇到异常时捕获到的错误。 后缀是XXX.log
- XXX.stdout XXX.stderr
我们在生产中的注意事项:
- 生产上部署好CDH服务后,默认使用的admin/admin密码需要改掉
- 要是其它人员想要访问CDH集群,可以分配一个readonly的账户:
- 生产上不建议使用Kerberos,生产上服务器两种:IDC环境和阿里云服务器,防火墙也分为软件和硬件防火墙;阿里云和AWS集群没使用Kerberos;这玩意儿开了反而更费事,请求都需要去做校验认证。
关于CDH集群环境的语言环境:
首先需要更换浏览器的默认语言为英文,重启浏览器后再次访问才是英文环境。
集群环境中的如下界面可以找到当前使用的端口:
- 对于CDH集群,我们还需要自己去看的有数据库的设置、磁盘文件的阈值。
3.2 部署集群用到的用户
1、在生产中要么使用root用户、sudo权限无密码的用户去访问:
- 一般是我们自己的用户,给john配上无密码登录:ldap系统
2、我们在部署完成之后:cat /etc/passwd,CDH默认会给我们创建如下这些用户。
flume:x:512:511:Flume:/var/lib/flume-ng:/bin/false
hdfs:x:511:510:Hadoop HDFS:/var/lib/hadoop-hdfs:/bin/bash
solr:x:510:509:Solr:/var/lib/solr:/sbin/nologin
zookeeper:x:509:508:ZooKeeper:/var/lib/zookeeper:/bin/false
3、比如说未来我们想要修改进程所属的用户,都是在Configuration中修改:
第四章:Web界面解读
4.1 集群主界面解读
1、主界面如下:
2、Configuration界面(会抛出一些错误),如果不想看见这些告警:
- cdh给出的这些信息都是些经验值
3、主界面中的ALL Recent Command
4、几张图表: - 磁盘突然间300m/s,平时很平稳
注意:
- 生产上只建议一套CM配置一套cluster环境:
4.2 集群上各个按钮含义
- 点击Cluster MANAGER,点击Hosts,选择All Hosts,查看此图:
Hosts下的Roles中:
查看Hosts下的Parcels:
Diagnostics(诊断)下的信息:
第一张图片:
- 看个人喜欢,直接去到机器上去搜,vi命令去搜索
Audits:审计操作
Charts:图表操作
Administration:管理员操作
- 添加用户中只有只读和所有权限这两种:
4.3 如何下架CDH集群上的节点
- 我们去到Cluster集群服务上删除hadoop003节点,首先停止hdfs服务:
- 参照如下图删除hadoop003节点
先后删除这几个服务中的hadoop003:
回到主界面上观察hadoop003节点:此时暂无服务:
- 此时回到CDH主界面中查看:
删除前需要确认如下信息:
我们回到cdh阿里云机器上去:
把hadoop003机器上的这个服务关掉:
[root@hadoop init.d]# ./cloudera-scm-agent status
cloudera-scm-agent (pid 4448) is running...
[root@hadoop init.d]# ./cloudera-scm-agent stop
Stopping cloudera-scm-agent: [ OK ]
删除完后就只剩下hadoop001和hadoop002这两个节点了:
此时重新启动CDH中的一些服务,重启服务肯定是会有问题的,顺带查看从cmf.hosts表格
此时我们机器格式化以后,重新启动hadoop003上的服务,然后到cdh集群环境上去;
图一:
图二:
此时角色都是空的,如何加上机器的进程实例:
4.4 CDH上块丢失的修复
1、hdfs fsck -felete 删除丢失的副本
2、hdfs debug recoverLease -path / -retries 10 /后跟的是文件目录
第五章:CDH上添加和删除服务
第一种:添加某个大的服务:
1、添加服务:Add Service
2、第二步主节点和小弟节点:
3、Hbase目录,默认不动
4、等他运行完后,下一步完成:
我们要认识到不可能几次课的学习就和J总一个水平。
5、我们注意到单个集群中的服务都能进行这些操作:
第二种:我们删除CDH集群中HBase服务中的hadoop003的regionserver节点。
1、先停止这个服务,然后再删除。
如果想要把这个服务要回来怎么进行操作呢?
- Add Role Instances to HBase
- 添加完成后重启即可
注意:
- service role instance (角色、实例、服务)讲的都是一种东西。
- 服务添加好后去启动即可。
5.1 CDH上下架hadoop003节点
1、Stop Roles on Hosts Command
2、Remove Hosts from Cluster Command(把这台机器上部署的角色给删除掉)
- CDH是一个标准化的过程,不用担心哪一步或者某块东西丢失。
5.2 CDH集群上加机器
- 自行填写
5.3 CDH大屏监控
1、我们默认的就四副图片,需要进入到具体服务中查看更多图片
- 任何都离不开进程和文件数
需求:我们需要把HBase中的这张图表放到首页上去监控。
2、拷贝SQL语句
- 进入到主界面中,点击charts --> Dashboards --> create Dashboard
- 此处是编写SQL语句,编译图表的