通过访问 YARN 的 API 来获取队列信息

主机上需要安装 jq 用来解析 json 串

访问 API,获取 json 数据

curl -s --negotiate -u :  "$rm:8088/ws/v1/cluster/scheduler"

通过 jq 命令来解析队列部分的数据

queue_json=`echo $queue_json|jq '.scheduler.schedulerInfo.queues'`

获取队列总数量

queue_json_size=`echo $queue_json|jq '.queue[]|.queueName'|wc -l`

根据总数来遍历数据,得到每个队列的信息

for((j=0;j<$queue_json_size;j++))
    do
      queue_name=`echo $queue_json|jq ".queue[$j].queueName"|sed 's/\"//g'`
      #echo $queue_name
      vcore_total=`echo $queue_json|jq ".queue[$j].maxEffectiveCapacity.vCores"`
      vcore_used=`echo $queue_json|jq ".queue[$j].resourcesUsed.vCores"`
      vcore_avali=`expr $vcore_total-$vcore_used|bc`
      vcore_used_rate=$([ $vcore_total == 0 ] && echo 0 || echo "$vcore_used $vcore_total"| awk '{printf "%.2f",$1/$2*100}')
      mem_total=`echo $queue_json|jq ".queue[$j].maxEffectiveCapacity.memory"`
      mem_used=`echo $queue_json|jq ".queue[$j].resourcesUsed.memory"`
      mem_avali=`expr $mem_total-$mem_used|bc`
      mem_used_rate=$([ $mem_total == 0 ] && echo 0 || echo "$mem_used $mem_total"| awk '{printf "%.2f",$1/$2*100}')
      app_submitted=`echo $queue_json|jq ".queue[$j].numApplications"`
      app_running=`echo $queue_json|jq ".queue[$j].numActiveApplications"`
      app_completed=`echo $queue_json|jq ".queue[$j].numPendingApplications"`
    done

根据 需要将数据推出去,或者写入数据库

 

脚本弊端:目前只支持两个层级的队列,脚本还需要优化

 

你可能感兴趣的:(YARN,yarn,队列,API)