python对weedfs的操作

devtools/2024/10/15 21:48:11/

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/devtools/126365.html

相关文章

【微服务】微服务注册:构建灵活的服务管理机制

目录 引言一、什么是微服务注册?1.1 服务注册中心的作用1.2 服务注册中心的工作原理1.3 示意图 二、常见的微服务注册中心2.1 各注册中心详细对比 三、微服务注册的实现方式3.1 Spring Cloud Netflix Eureka3.2 Consul3.3 Zookeeper3.4 etcd 四、微服务注册的注意事…

mysql存储过程

1、创建 CREATE DEFINERrootlocalhost PROCEDURE card.init_card(IN orgId bigint(20)) begin DECLARE card_user_id,if_has_org bigInt; //定义变量 END 2、入参出参 in、out 3、定义变量并且赋值 3.1、方法1 3.2、方法二 4、if语句,并且抛出异常 如果是为…

Android JNI调用.c文件

Android JNI调用.c文件 1.创建Android项目,创建一个jni目录来存放.c代码 2.CMakeLists.txt cmake_minimum_required(VERSION 3.10.2) project("MyApplication")add_library(native-lib SHARED native-lib.c)find_library(log-lib log)target_link_libraries

vue使用table实现动态数据报表(行合并)

<template><div class"previewTable"><h2>***项目研发数据报告</h2><table id"previewTable" width"100%"><tr><th>项目名称</th><td colspan"6">{{ resultData.proName }}<…

springboot+vue家政服务管理平台

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

03_23 种设计模式之《原型模式》

文章目录 一、原型模式基础知识原型模式的结构应用场景 实例拷贝构造函数被调用场景如下&#xff1a;典型的应用场景&#xff1a; 一、原型模式基础知识 原型模式是一种创建型设计模式&#xff0c;其功能为复制一个运行时的对象&#xff0c;包括对象各个成员当前的值。而代码又…

Kubernetes网络通讯模式深度解析

Kubernetes的网络模型建立在所有Pod能够直接相互通讯的假设之上&#xff0c;这构建了一个扁平且互联的网络空间。在如GCE&#xff08;Google Cloud Engine&#xff09;等云环境中&#xff0c;这一网络模型已预先配置&#xff0c;但在自建的Kubernetes集群中&#xff0c;我们需要…

【C++】空间配置器

空间配置器也是STL的六大组件之一&#xff0c;它主要服务于容器&#xff0c;用来提高效率 STL的容器用new来获取空间资源&#xff0c;而new的底层是调用operator new全局函数&#xff0c;operator new函数再去使用malloc函数来获取空间资源 那么在STL容器用new来获取空间资源的…