欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > python对weedfs的操作

python对weedfs的操作

2024/10/23 15:30:25 来源:https://blog.csdn.net/wu73guang5jian/article/details/142876888  浏览:    关键词:python对weedfs的操作

1、weedfs的简介

如果你对weed储存有一定的理解也可以忽略

WeedFS(Weed File System)是一个开源的分布式文件系统,由Go语言编写,旨在解决海量文件存储和访问的问题。它采用了类似于Hadoop HDFS的分布式文件系统架构,但具有更高的性能和更简单的设计。
​
WeedFS的主要特点包括:
​
1. 高可靠性:WeedFS采用多副本存储和数据校验等技术,确保数据的可靠性和一致性。
​
2. 高性能:WeedFS支持快速的文件上传、下载和访问,能够处理大规模的文件存储和访问需求。
​
3. 易于扩展:WeedFS支持简单的横向扩展,可以轻松地添加新的节点和存储设备。
​
4. 简单易用:WeedFS的设计简单、易于使用,可以快速地部署和配置。
​
5. 多语言支持:WeedFS提供了多种编程语言的客户端库,包括Go、Java、Python等。
​
WeedFS的架构主要包括:
​
1. Master:主节点,用于管理整个集群的状态和元数据信息。
​
2. Volume:存储节点,用于存储文件和元数据信息。
​
3. Filer:文件元数据管理节点,用于管理文件元数据信息。
​
4. Client:客户端,用于上传、下载、删除和访问文件。
​
WeedFS的应用场景包括:
​
1. 大规模文件存储:WeedFS能够处理大规模的文件存储需求,适用于图片、视频、音频等文件的存储和访问。
​
2. 分布式文件系统:WeedFS采用分布式的架构,能够快速地扩展和部署,适用于分布式文件系统的构建和管理。
​
总之,WeedFS是一个高可靠性、高性能、易于扩展的分布式文件系统,适用于大规模文件存储和分布式文件系统的构建和管理。

这是我的weed配置文件

kafka:brokers: 'kafka46:9092,kafka47:9092,kafka48:9092,kafka49:9092'zookeeper_hosts: 'kafka46:2181,kafka47:2181,kafka48/kafka'topic: srvdbMessagegroup_id: message_to_srvdb-20210810165601# 初始kafka消费偏移: smallest - 从最早消费; largest - 从最新消费offset_reset: largest

2、python对weedfs的储存操作

储存数据传入的是图片二进制数据,返回的是图片的储存地址(URL)

#人脸的weed存储位置,需要填写所有的人脸weed主节点
weed:host:- 192.168.0.1:9333

【代码实例】

from logging.handlers import RotatingFileHandler
import time
import requests
import random
import logging
config = {"weed":{"host":["192.168.0.1:9333"]}}
​
​
​
def save_image_to_url(img_data):"""img_data:图片二进制数据return:图片的url"""global weed_serverimage_url = ''ttl = '3M'#默认保存三个月,y是年# ttl = config['worker']['face_weed']['ttl']# 遍历存储weedtry:while 1:# 查找可用的weed集群available_weed_server = []for weed_ser in weed_server:if weed_ser['status'] == 1:available_weed_server.append(weed_ser)# logging.info(available_weed_server)if available_weed_server:# 随机找一个weed节点face_weed = random.choice(available_weed_server)try:weed_url = 'http://' + face_weed['url'] + '/dir/assign?ttl=' + ttl# weed_url = 'http://1.1.1.1:9333/dir/assign'r = requests.post(weed_url, data={}, timeout=10)if r.status_code == requests.codes.ok:arr_data = r.json()files = {'file': ('image.jpg', img_data)}# logging.info(len(img_data))res = requests.post(arr_data['publicUrl'] + arr_data['fid'], files=files, timeout=10)if res.status_code == 201:image_url = ''.join([arr_data['publicUrl'], arr_data['fid'], '.jpg'])# 重置错误统计信息weed_server[face_weed['k']]['error_num'] = 0breakelse:logging.error('保存驾乘人脸图片到人脸weed集群时错误')weed_server[face_weed['k']]['error_num'] += 1if weed_server[face_weed['k']]['error_num'] >= weed_server_error_num:logging.warning("错误次数大于指定次数,停用weed: %s", weed_server[face_weed['k']]['url'])weed_server[face_weed['k']]['status'] = 0else:logging.error('申请weed存储时错误')weed_server[face_weed['k']]['error_num'] += 1if weed_server[face_weed['k']]['error_num'] >= weed_server_error_num:logging.warning("错误次数大于指定次数,停用weed: %s", weed_server[face_weed['k']]['url'])weed_server[face_weed['k']]['status'] = 0except Exception as e:logging.error('调用weed集群时错误: %s', str(e))weed_server[face_weed['k']]['error_num'] += 1if weed_server[face_weed['k']]['error_num'] >= weed_server_error_num:logging.warning("错误次数大于指定次数,停用weed: %s", weed_server[face_weed['k']]['url'])weed_server[face_weed['k']]['status'] = 0else:logging.error("无可用weed,请检查weed程序运行情况,存储原始图片地址!")time.sleep(1)except Exception as e:logging.exception('save image error:{}'.format(str(e)))return Nonereturn image_url
​
if __name__ == '__main__':name = 'test_weed'logging.basicConfig(level=logging.DEBUG)handler = RotatingFileHandler('/var/log/%s.log' % name, maxBytes=134217728, backupCount=7)formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(lineno)d - %(message)s')handler.setFormatter(formatter)logging.getLogger().addHandler(handler)weed_server = []weed_server_error_num = 10k = 1for face_weed in config['face_weed']['host']:t = dict()t['url'] = face_weedt['error_num'] = 0  # 错误次数,连续失败时才会记录t['status'] = 1  # weed状态,1正常,0不可用t['k'] = kk += 1weed_server.append(t)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com