CDH维护脚本

来源:互联网 发布:数据库的三级模式定义 编辑:程序博客网 时间:2024/06/05 00:49

我们有CDH的平台,其中有自带的监控的,监控的语法Tsl
CDH无法满足特定的需求的时候,需要实时查看当前的Active和Standby的,发封邮件的,手工的切换Active的
Shell监控HDFS的HA状态的
Shell每隔三分钟提交job到集群上,上一个批次的job3分钟未完成的,当前的job就要skip跳过的,如何知道上一个批次的作业未完成的额,通过CM的API完成的额,
Google CM API
older Version
v16==CDH5.11
http://cm-host:7180/api/version

通过此命令可以访问版本号:
curl -u admin:admin http://IP:7180/api/version

CM API中的Full API Docs
通过查看API可以得出来哪些作业正在运行或者哪些作业没有运行完的:
在API Docs中搜索关键词Application的,可以定位到作业的API的情况的,
/clusters/{clusterName}/services/{serviceName}/yarnApplications俩个变量的clusterName和serviceName

/clusters clusterName=/api/v16/clusters
curl -u admin:admin http://IP:7180/api/v16/clusters
查询出来的结果都是Json的格式的
clusterName可以通过CDH界面进行重命名的

/serviceName通过/clusters/{clusterName}/services来查询得到的
curl -u admin:admin http://IP:7180/api/v16/clusters/RZcluster/services

serviceName=zookeeper hdfs yarn

通过/clusters/RZcluster/services/yarn/yarnApplications
对CDH进行俩次开发的都是通过CM API的,也可以提交特定的配置信息,post请求过去生效某个配置

user hdfs cannot submit applications to queue root.product
队列的放置规则的问题导致的

curl -u admin:admin http://IP:7180/api/v16/clusters/RZCluster/serivces/yarn/yarnApplication> xxx.json
cat xxx.json | grep AAA批次作业的名称的 | grep running | wc -l
计数当前作业正在跑的数量有多少个的
大于0的正在运行的作业,那么下个批次作业就应该要skip的,同时要发一封邮件的

get_hdfs_ha_state.sh
cdh_alternatives_reconfigure.sh

#!/bin/bashNN1_HOSTNAME=""NN2_HOSTNAME=""NN1_SERVICEID=""NN2_SERVICEID=""NN1_SERVICESTATE=""NN2_SERVICESTATE=""CDH_BIN_HOME=/opt/cloudera/parcels/CDH/binha_name=$(${CDH_BIN_HOME}/hdfs  getconf  -confKey dfs.nameservices)namenode_serviceids=$(${CDH_BIN_HOME}/hdfs  getconf  -confKey  dfs.ha.namenodes.${ha_name})for   node  in  $(echo   ${namenode_serviceids//./});do  state=$(${CDH_BIN_HOME}/hdfs   haadmin  -getServiceState  $node)  if [ "$state" == "active"  ]; then         NN1_SERVICEID="${node}"         NN1_SERVICESTATE="${state}"         NN1_HOSTNAME=`echo   $(${CDH_BIN_HOME}/hdfs  getconf   -confKey  dfs.namenode.rpc-address.${ha_name}.${node})  | awk -F ':' '{print  $1}'`#echo  "${NN1_HOSTNAME}  :  ${NN1_SERVICEID}  :   #${NN1_SERVICESTATE}" elif [  "state"  ==   "stanby"  ];  then       NN2_SERVICEID="${node}"       NN2_SERVICESTATE="${state}"       NN2_HOSTNAME=`echo  $(${CDH_BIN_HOME}/hdfs  getconf  -confKey dfs.namenode.rpc-address.${ha_name}.${node}) | awk  -F ':' '{print  $1}'`  #echo "${NN2_HOSTNAME}  :  ${NN2_SERVICEID} : #${NN2_SERVICESTATE}"else  echo  "hdfs haadmin  -getServiceState  $node:unkown"fidone

切换到HDFS用户上去执行的额,chmod +x get_hdfs_ha_state.sh
chmod -R 777 maintenance
NameNode-ServiceID
cat /etc/hadoop/conf/hdfs-site.xml
dfs.ha.namenodes.nameservice1这个参数决定的ServiceId的

cd /etc/hadoop/conf下面的时候有:
hdfs getconf -confKey dfs.nameservices
hdfs haadmin -getServiceState namenode56(serviceId)
hdfs haadmin -transitionToActive serviceId
hdfs haadmin -checkHealth
serviceId代表的是什么,hdfs-site.xml中的dfs.ha.namenodes.nanmeservice1参数值

which hdfs
which hadoop
cd /etc/alternatives

alternatives命令:
CDH5.10–>5.11 FIXED一个版本一个版本的升级可能解决了
CDH5.10–>5.12 跨版本可能是没有解决的
alternatives –config hadoop-conf
光标跳动的就是软连接失效的
升级之后找不到命令和相应的文件夹,是因为软连接指向了以前的版本
当安装CDH4/CDH5集群的时候,SecondaryNameNode节点的/etc/hadoop/conf目录的软连接失效。假如通过web界面配置hdfs的core-site.xml文件的部分自定义的属性代码时候,那么会该节点的配置永远无法正确的读取生效,因为目录的软连接失效的

/etc/hadoop/conf的文件是由哪个控制的
/etc/hadoop下面的配置都是客户端的配置文件的
conf–>/etc/alternatives/hadoop-conf
conf.cloudera.hdfs只有自己配置的
conf.cloudera.yarn含有conf.cloudera.hdfs的配置的加上自己的配置的
alternatives –config hadoop-conf指向的是/etc/hadoop/conf.cloudera.yarn的才行的啊,因为在yarn上运行作业的,

将无效的软连接删除掉
alternatives –remove hadoop-conf /etc/hadoop/conf.cloudera.hdfs
alternatives –display hadoop-conf
alternatives –display hadoop-conf文件的名字是如何知道的额,其他的配置文件或者是命令的
可以去/etc/alternatives目录下去寻找的所有的文件的name的
hadoop flume hbase hbase-conf solr spark-streaming spark-shell spark-submit 等等一系列的命令名称的

alternatives是多版本控制的额,控制多个版本的
alternatives –display hadoop-conf
alternatives –conf hadoop-conf
alternatives周转的
/etc/hadoop/conf是由alternatives命令控制的hadoop-conf的3种选择的
1./opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/etc/hadoop/conf.empty
2./etc/hadoop/conf.cloudera.yarn
3./etc/hadoop/conf.cloudera.hdfs

alternatives –config hadoop-conf
alternatives是控制多个版本的中转站的
alternatives –display hadoop-conf是有优先级的

集群升级的问题:
残留的信息,+号还在之前的版本上面的
版本造成的命令无效的:
which hdfs升级的时候如果找不到hdfs的路径则可以通过
alternatives –config hdfs选择配置文件号码
由于/opt/cloudera/parcels/CDH-5.10/bin/hdfs文件夹不对的

shell脚本能够做什么??
升级带来的hdfs命令和hadoop-conf配置文件版本没有自动切换过来的
shell主要就是修改当前的软连接的版本的,服务太多的话,机器多的话,一百台机器修改一百次配置文件的
主要就是批量的修改/etc/alternatives/目录下,跳动的,失效的Cloudera失效的关键词的文件名字
alternatives set
yarn–>/opt/cloudera/parcels/CDH-5.10/bin/yarn一直跳动则是失效的
yarn–>/opt/cloudera/parcels/CDH-5.11/bin/yarn
则应该将关于cloudera的关键词给拿出来的,然后拼接命令的path路径名称的
然后在
alternatives –set yarn /opt/cloudera/parcels/CDH-5.11/bin/yarn
alternatives –config hadoop-conf
alternatives –set hadoop-conf /etc/hadoop/conf.cloudera.hdfs
旧的版本号:/etc/alternatives
新的版本号:/opt/cloudera/parcels/
cdh_alternatives_reconfigure.sh

#!/bin/bashif  [ $# != 2];thenecho "warning"exit  1;fiold_version=$1new_version=$2if  [  ${cloudera_count}  -ne  ${deal_count}  ]; thenecho  "warning  "fi针对CDH的升级有效的,对于Kafka和Spark2的升级是不生效的剔除掉Kafka和Spark2的服务的

Spark是基于RDD的计算的,注意Spark并没有读文件的方法,借用的是MR读文件的方式
MR读文件的特点:首先它会将文件切片,划分为一个个split,
block个数=split=partition
RDD是分布式弹性数据集的,哪些特性分布式:
多个Partition组成弹性
依赖性
容错

Spark运行流程:
Driver进程,分发task到各个worker上,将task的计算结果回收,如果计算结果过大的,可以不用回收,直接将结果写入到HDFS文件系统中,与worker频繁建立联系,会造成进程卡死或
者GC,OOM等问题
Driver不会执行业务逻辑的

Worker进程:作用是管理这台物理机的资源,Worker可以看成一台真实的物理机器或者是虚拟出来的虚拟机
真正计算的节点

注册并申请资源,资源管理器分配并监控资源使用状况,
分配资源,汇报资源使用情况,启动StandaloneExecutorBackend
注册并申请Task
SparkContext
RDD Object构建DAG图
DAG图
DAG Scheduler将DAG图分解成Stage
TaskSet
Task Schedule
提交和监控Task的

构建SparkApplication的运行环境启动SparkContext,SparkContext向资源管理器可以是Standalone,Mesos,Yarn注册并申请Executor资源
资源管理器分配Executor资源并开启StandaloneExecutorBackend,Executor运行情况将随着心脏发送到资源管理器上,
SparkContext构建DAG图,将DAG图分解成Stage,并把TaskSet发放给TaskScheduler,Executor向SparkContext申请Task,TaskScheduler将task发放给Executor运行同时SparkContext将应用程序代码发放给
Task在Executor上运行,运行完毕后释放所有资源

file://前缀指定读取本地文件,Spark默认是读取HDFS上的文件

cat ./README.md | grep “Spark” -c
textFile.filter(line=>line.contains(“Spark”)).count()

包含单词最多的那一行内容共有几个单词
textFile.map(line=>line.split(” “).size).reduce((a,b)=>if(a>b)a else b)

textFile.map(line=>line.split(” “).size).reduce((a,b)=>Math.max(a,b))

SparkSQL可以从现有的RDD或者数据源上创建DataFrames
df.select(“name”).show()
df.select(df(“name”),df(“age”)+1).show()
df.filter(df(“age”)>21).show()
df.groupBy(“age”).count().show()
Rdd.filter(line=>line.contains(“abcd”)).count()

原创粉丝点击