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: srvdbMessage group_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_server image_url = '' ttl = '3M'#默认保存三个月,y是年 # ttl = config['worker']['face_weed']['ttl'] # 遍历存储weed try: 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'] = 0 break else: logging.error('保存驾乘人脸图片到人脸weed集群时错误') weed_server[face_weed['k']]['error_num'] += 1 if 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'] = 0 else: logging.error('申请weed存储时错误') weed_server[face_weed['k']]['error_num'] += 1 if 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'] = 0 except Exception as e: logging.error('调用weed集群时错误: %s', str(e)) weed_server[face_weed['k']]['error_num'] += 1 if 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'] = 0 else: logging.error("无可用weed,请检查weed程序运行情况,存储原始图片地址!") time.sleep(1) except Exception as e: logging.exception('save image error:{}'.format(str(e))) return None return 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 = 10 k = 1 for face_weed in config['face_weed']['host']: t = dict() t['url'] = face_weed t['error_num'] = 0 # 错误次数,连续失败时才会记录 t['status'] = 1 # weed状态,1正常,0不可用 t['k'] = k k += 1 weed_server.append(t)
原文地址:https://blog.csdn.net/wu73guang5jian/article/details/142876888
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!