大数据组件存储策略设置 #
一、背景 #
大数据组件设计到存储是几个组件分别是MinIO、Hbase、ES。我们需要根据项目需求,动态配置数据存储的策略,根据集群的存储容量配置策略。
二、如何设置 #
1. MinIO对象存储 #
MinIO可以在管理界面直接进行相应的存储策略设置
2. Hbase存储策略 #
在Hbase创建表的时候设置hbase_ttl_init.sh
#!/bin/bash
# 7天
ttl=604800
hbase shell <<EOF
create 'face',{NAME => 'info', TTL=>'$ttl'}
create 'person',{NAME => 'info', TTL=>'$ttl'}
create 'motor_vehicle',{NAME => 'info', TTL=>'$ttl'}
create 'subscribe_notification',{NAME => 'info', TTL=>'$ttl'}
create 'disposition_notification',{NAME => 'info', TTL=>'$ttl'}
create 'thing',{NAME => 'info', TTL=>'$ttl'}
create 'scene',{NAME => 'info', TTL=>'$ttl'}
create 'image',{NAME => 'info', TTL=>'$ttl'}
create 'image_info',{NAME => 'info', TTL=>'$ttl'}
create 'video_slice',{NAME => 'info', TTL=>'$ttl'}
create 'video_slice_info',{NAME => 'info', TTL=>'$ttl'}
create 'video_label',{NAME => 'info', TTL=>'$ttl'}
create 'file',{NAME => 'info', TTL=>'$ttl'}
create 'file_info',{NAME => 'info', TTL=>'$ttl'}
create 't_case',{NAME => 'info', TTL=>'$ttl'}
create 't_case_info',{NAME => 'info', TTL=>'$ttl'}
exit
EOF
echo "hbas 初始化成功!"
如果之前的表已经存在了,进行相应的修改操作hbase_ttl_change.sh
#!/bin/bash
# 7天
ttl=604800
hbase shell <<EOF
disable 'face'
alter 'face',{NAME=>'info', TTL => '$ttl'}
enable 'face'
disable 'motor_vehicle'
alter 'motor_vehicle',{NAME=>'info', TTL => '$ttl'}
enable 'motor_vehicle'
disable 'subscribe_notification'
alter 'subscribe_notification',{NAME=>'info', TTL => '$ttl'}
enable 'subscribe_notification'
exit
EOF
echo "hbas 修改成功!"
3. ElasticSearch存储策略 #
我的ES版本是6.8.6,暂时没找到存储策略方案,这里在程序里面手动进行定时删除过期数据的功能 es_delete.sh
#!/bin/bash
# 注释这里的时间表示 d:天 m:分钟 now-7d:7天前
esaddr='172.17.0.1:9200'
timefields=('FaceAppearTime' 'AppearTime' 'TriggerTime')
function httpRequest()
{
paramd="{\"query\":{\"range\":{\"$1\":{\"lt\":\"now-7d\",\"format\":\"epoch_millis\"}}}}"
#curl 请求
info=`curl -s -m 10 --connect-timeout 10 -i -H'Content-Type:application/json' -d"$paramd" -XPOST "http://$esaddr/*-*/_delete_by_query?pretty"`
echo $info
#获取返回码
code=`echo $info|grep "HTTP"|awk '{print $2}'`
#对响应码进行判断
if [ "$code" == "200" ];then
echo "$1 请求成功,响应码是$code"
else
echo "$1 请求失败,响应码是$code"
fi
}
function forcemerge(){
#echo "准备forcemerge"
info=`curl -s -m 10 --connect-timeout 10 -i -XPOST "http://$esaddr/_forcemerge?only_expunge_deletes=true&max_num_segments=1"`
echo $info
#获取返回码
code=`echo $info|grep "HTTP"|awk '{print $2}'`
#对响应码进行判断
if [ "$code" == "200" ];then
echo "forcemerge 请求成功,响应码是$code"
else
echo "forcemerge 请求失败,响应码是$code"
fi
}
function main(){
for i in "${!timefields[@]}";
do
field=${timefields[$i]}
# do something....
httpRequest $field
done
forcemerge
}
main