背景:

1)需要将yarn queue user的资源使用展示出来

2)数据已经存储在mysql里,需要过滤后插入到influxdb

3)由于历史数据比较多,用户的CPU、内存的数据分别有200万

分析:

1)查询mysql中m_bizhadoop_yarn_queue_userinfo的表中查询出用户的useMemory、useCpu

2)然后用influx cli逐条读取,插入到influxdb

操作:

1)查询mysql,sql如下

select id,username,sum(useMemory),sum(useCpu),ts from m_bizhadoop_yarn_queue_userinfo where id>=2931485 group by ts,username ORDER BY id ASC;

46d4ff6017a0158897498c5ca99e470c.png

2)然后插入到influxdb

${INFLUXCOMMAND} -host ${influxdbHost} -port ${influxdbHort} -username ${influxdbUser} -password ${influxdbPassword} -database ${influxdbDatabase} -execute "insert ${influxdbCpuTable},username=${username} value=${cpu} {time}"

但是这种通过influx cli插入效率特别低,每秒只能插入一条

3)调整influx 插入方式,批量插入

想到的是用influx http api接口,格式如下

curl -i -XPOST ‘http://localhost:8086/write?db=mydb‘ --data-binary @cpu_data.txt

cpu_data.txt格式

cpu_load_short,host=server02 value=0.67 cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257 cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257

说明:

1)如果你的数据文件的数据点大于5000时,你必须把他们拆分到多个文件再写入influxDB。因为默认的HTTP的timeout的值为5秒,虽然5秒之后,influxDB任然会试图把这批数据写进去,但是会有数据丢失的风险

2)2XX:如果你写了数据后收到HTTP 204 no content,说明写入成功了

3)4XX:表示influxDB不知道你发的是什么鬼

4)5XX:系统过载或是应用受损

4)我的操作

首先需要对文件进行大小判断,判断是否大于5000行

#cpu insert

#判断文件是否存在且数据大于0if [ -s ${dbSelectCpuResult} ]then

echo "0" >${INFLUXDBCPUSTATUS}

#统计文件里的数据行数

cpu_number=$(cat ${dbSelectCpuResult}|wc -l)

#格式化数据,生成influx HTTP api接口能接收的格式sed -i -e ‘s/^[0-9]\+\t/user_cpu_info,username=/‘ -e ‘s/\t/ /g‘ -e ‘s/ / value=/‘${dbSelectCpuResult}

#判断文件行数是否小于5000行if ((${cpu_number}<=5000))then

echo "insert ${dbSelectCpuResult} into influxdb"curl-i -XPOST "${influxdbHost}:${influxdbHort}/write?db=${influxdbDatabase}" -u${influxdbUser}:${influxdbPassword} --data-binary @${dbSelectCp

uResult}else#分裂源文件split -l 5000 ${dbSelectCpuResult} -d -a 3 ${pwdDir}/result/cpu_for cpu_file in `ls ${pwdDir}/result/cpu_*`do

echo "${cpu_file} into influxdb"curl-i -XPOST "${influxdbHost}:${influxdbHort}/write?db=${influxdbDatabase}" -u${influxdbUser}:${influxdbPassword} --data-binary @${cpu_fi

le}if [ $? = 0]then

rm -f ${cpu_file}fi

done

fi

fi

说明:

1)split参数介绍:-l 表示分裂行数,-d表示使用数字作为后缀,-a表示接收多少位的数字

2)-u参数:表示认证用户和密码

原文:https://www.cnblogs.com/gentlemanhai/p/12638519.html

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐