python对weedfs的操作

server/2024/10/15 17:46:35/

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)

http://www.ppmy.cn/server/132292.html

相关文章

载货车一键启动无钥匙进入、手机也能控制、这配置真高端

‌货车一键启动功能的核心作用是通过一个按钮实现车辆的启动和熄火,极大地简化了传统钥匙启动的繁琐步骤,提高了使用的便捷性和安全性。‌ 货车一键启动系统的具体功能包括: 无钥匙进入‌:车主只需携带智能钥匙靠近车辆&#xf…

uniappx uts自学(2024/10/14)

uts需要类型 uts声明变量 let 或 const let相当于 TypeScript 中的 let、kotlin 中的 var、swift 中的 var。 cosnt相当于 TypeScript 中的 const、kotlin 中的 val、swift 中的 let。 let [变量名] : [类型] 值; let str :string "hello"; // 声明一个字符串…

Spring Boot学习资源库:Java开发者的新篇章

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…

几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试

引言 最近在上智能物联网的课程,讲授基于hi3861的OpenHarmony编程,所以尝试一下使用大模型工具生成相关的代码,看看效果如何。提问的方式比较简单粗暴: 在OpenHarmony的hi3861平台上,如何编程访问https的网站&#xf…

力扣 前缀和

找子数组的个数了解前缀和的基础。 前缀和大致理解为到达某个位置,前面几个数的总和,即s[i1]s[i]a[i1],可以通过一次循环获得。然后几个前缀和作差,即可得到某个位置到某个位置的和,根据map的键值对进行更新次数。 题…

什么是智能合约?

什么是智能合约? 智能合约,就是一段写在区块链上的代码,一旦某个事件触发合约中的条款,代码即自动执行。也就是说,满足条件就执行,不需要人为操控、不需要第三方信任。区块链的安全性和不可篡改性&#xf…

股指期货和股指期权有什么区别?

在金融衍生品的世界里,股权类衍生品无疑是其中的佼佼者,而股指期货和股指期权更是其中的佼佼者。尽管它们之间有着千丝万缕的联系,但它们之间的区别同样不容忽视。本文衍生股指君将详细解析股指期货和股指期权的核心区别。 一、交易的东西不…

VUE项目基于源码实现可视化编程技术的探索

背景 在面对大型且高度组件化的项目时,传统的开发模式——即边预览边手动修改代码,往往会因项目结构的复杂性而显得效率低下,尤其是对于新加入项目或对项目结构不够熟悉的开发者而言,从UI界面逆向定位到具体代码实现并作出修改的过…