influxdb入库mysql_influxdb批量导入

本文介绍了如何从MySQL筛选数据并高效地导入到InfluxDB,针对每秒只能插入一条数据的低效问题,提出了使用InfluxDB HTTP API进行批量插入的方法,详细讲述了数据格式转换和文件拆分策略,以避免数据丢失并提高导入速度。
摘要由CSDN通过智能技术生成

背景:

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;

20200405204521279104.jpg

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参数:表示认证用户和密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值