使用CM API对DataNoe进行解除授权

实现背景

生产环境中经常超100台DataNode节点,如果要对DataNode解除授权一个一个点显得很麻烦,所以这里使用Cloudera Manager API方式去执行会更方便一些,下面将介绍实现过程以及脚本的编写。

65bc2dab86cab05b80ef20e7bcee983d.png

CM API 对DataNode 解除授权

77066bace1d4737b8ee89a553e04444f.png

执行命令示例

curl -X POST -u admin:admin  --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"items": ["hdfs-DATANODE-86ac5a45e263c789b408f2abced424dc"]}' 'http://cm111:7180/api/v32/clusters/Cluster%201/services/hdfs/commands/decommission'

下面是使用工具脚本来执行,步骤如下

f41407a0c22ebe6deb683d08a4df7cec.png

1、获取所有DataNode 名称信息

1492948ceda81d99cd73ed628efdbd52.png

#!/bin/bash


#置空文件
>/tmp/dn_commissioned.list
>/tmp/dn_decommissioned.list


roleFile="/tmp/roles_datanode.json"


curl -X GET  -u admin:admin --header 'Accept: application/json' 'http://cm111:7180/api/v32/clusters/Cluster%201/services/hdfs/roles?view=SUMMARY' > ${roleFile}


# 获取JSON文件中总条目数量
json_length=$(cat ${roleFile} | jq '.items | length')


# 遍历JSON文件中的条目
for ((i=0; i<${json_length}; i++))
do
    # 过滤出datanode角色并获取名称字段的值
    role_name=`cat ${roleFile} | jq --argjson i "$i" '.items[$i] | select(.type == "DATANODE") | .name'`
    host_name=`cat ${roleFile} | jq --argjson i "$i" '.items[$i]["hostRef"]["hostname"]'`
    commissionState=`cat ${roleFile} | jq -r --argjson i "$i" '.items[$i] | select(.type == "DATANODE") | .commissionState'`
    if [ ${role_name} <> null ] && [ "$commissionState" != "DECOMMISSIONED" ];then
     echo ${role_name} ${host_name} ${commissionState} >> /tmp/dn_commissioned.list
    elif [ ${role_name} <> null -a $commissionState == "DECOMMISSIONED" ];then
     echo ${role_name} ${host_name} ${commissionState} >> /tmp/dn_decommissioned.list
    fi
done

解释:

/tmp/dn_commissioned.list 保存未解除授权的DataNode文件

/tmp/dn_decommissioned.list 保存已解除授权的DataNode文件

最终文本示例

[root@test tmp]# more dn_commissioned.list
"hdfs-DATANODE-a706c810dfe0b894616e4344a2a712ab" "cm113" COMMISSIONED
"hdfs-DATANODE-86ac5a45e263c789b408f2abced424dc" "test" COMMISSIONED
"hdfs-DATANODE-eb2c4c7ae5600c11866a3365d9b09380" "cm111" COMMISSIONED
"hdfs-DATANODE-54c4ef0683d9e368f02010eb628b97ba" "cm112" COMMISSIONED


#解释
DataNode角色名称 对应的主机 是否已解除授权标识

b4119537ee7a29ba64d74fb3610fa5de.png

2、执行解除授权脚本

ff0be95746d7c32c68f664f3cb62e78c.png

脚本如下exec_dndecommissioned.sh

#!/bin/bash


cat /tmp/dn_operation.list| while read line
do
sleep 30
dn_name=`echo ${line} |awk -F " " '{print $1}'`
curl_argument="'{\"items\": [${dn_name}]}'"
exec_str="curl -X POST -u admin:admin  --header 'Content-Type: application/json' --header 'Accept: application/json' \
-d $curl_argument \
'http://cm111:7180/api/v32/clusters/Cluster%201/services/hdfs/commands/decommission'"
eval $exec_str
done

注:每执行一次就相当于在页面点击一次解除授权命令

e55b334be904899568bbbd6278cf6ca4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值