说明

增加数据节点文件的管理。

内容

1 分配端口

为一键部署的服务分配一个端口。

序号

容器名

端口

说明

5

dnws_24004

24004

数据节点仓库服务,与24002配合,实现数据节点的统一存储管理

这是一个有依赖的服务(依赖主机内的文件自动同步)

2 镜像准备

采用之前做好的Flask版本即可

测试

docker pull registry.cn-hangzhou.aliyuncs.com/YOURWAREHOUSE/base-flask:v7

Note:以后可以把最新的镜像版本tag为latest,这样就不必关注版本了。

3 项目文件

dnws本身的功能相对简单,属于A类服务,是可以放在公网上(开发),且不需要密码认证的。当运行时,dnws不会暴露对外端口,所以也不存在网络信息安全的问题。

未来,主机间的dnws会通过DMS(Data Manager Service)进行,那个会暴露端口,所以也会加上鉴权管理。

配置注意:挂载热盘和冷盘。依赖的服务24002启动后,会自动创建/opt/ProjectSpace//home/DataNodeWareHouse/

4 一键部署脚本

要注意遵守冷热盘的命名规范,启动服务时同时挂接两个盘

  • 增加了热盘和冷盘的配置
  • 修改了启动文件夹的定义

默认采用/opt/one_implements(不存在自动创建)作为一键部署的文件夹

if [ ! -d "/opt/one_implements" ]; then
 echo "一键部署文件夹不存在,创建..."
 mkdir -p /opt/one_implements
 else
 echo "一键部署文件夹存在"
fi

cd /opt/one_implements

增加了冷热盘的配置,要注意原来的docker启动命令需要修改挂载项目的路径

# 执行启动程序
 docker run -d --name=${con_name000}\
               --restart=always\
               -v /etc/localtime:/etc/localtime  \
               -v /etc/timezone:/etc/timezone\
               -e "LANG=C.UTF-8"\
               -v ${current_folder}/${project_folder_name}:/workspace\
               -v ${hot_folder}:/workspace/app/static/hot_folder\
               -v ${cold_folder}:/workspace/app/static/cold_folder\
               -p ${port000}:5555\
               ${image_name}\
               sh -c "cd /workspace && sh entry_sh.sh test"

Note: 现有web文件服务器,如果上传同名文件会直接覆盖。

5 测试

下载

dn = DataNode('ddd', dntype='rf', fs = fs, dnws='http://172.17.0.1:24004/dnws/')
dn.download_data()

{'file_name': 'ddd@latest', 'file_type': '.pkl', 'dntype': 'rf', 'is_tem': False}
{'msg': 'no exist(in host and cold)', 'status': False}
[I] no data

上传

dn.input_data(rf_data)

def ddd(nume_dict, denom_dict, suffix= None):
    nume_s = pd.Series(nume_dict)
    denom_s = pd.Series(denom_dict)
    res_s = nume_s / denom_s
    if suffix is None:
        return dict(res_s)
    else:
        new_s_index = ['_'.join([x,suffix]) for x in list(res_s.index)]
        return dict(zip(new_s_index, list(res_s)))

dn.rf_process_meta()
---
glampse存放截图的md5码,目前为空,可以输入:bbb
explantion存放简介,目前为空,可以输入:bbb
data_org_type 数据组织类型:1 for ListOfElements,2 for DictOfElements, 3 for Element:3
【Note】meta还可以(不是必须)有如下属性:score,data_dis,duration 
score:用于评估方法的适应度/效果
data_dis:用于描述维度分布的字典。对于连续变量,均假设为正态分布。
duration:执行一次函数所用的时间
---
dn.send_to_dnws()

data save to pickle:  ./ddd@27388005.pkl
{'msg': 'file saved to /workspace//app/static/hot_folder/RF/ddd@27388005.pkl',
 'status': True}

再次尝试下载,提示已经存在(如果不存在会下载)

{'file_name': 'ddd@latest', 'file_type': '.pkl', 'dntype': 'rf', 'is_tem': False}
{'data': '/workspace//app/static/hot_folder/RF/ddd@27388005.pkl', 'msg': 'ok in hot', 'status': True}
File Existed ./ddd@27388005.pkl

确认同步文件服务启动

wget -N http://YOURIP:PORT/downup/download/p24002_setup_周期文件同步.sh
bash p24002_setup_周期文件同步.sh /opt/ProjectSpace/ /home/DataNodeWareHouse/

热盘中的文件自动同步到 了冷盘

用python自动部署mysql_docker

6 接口文档

以下简单的记录一下使用说明。


接口文档(DNWS)


DNWS(DataNode Warehouse Service)服务的作用是进行数据节点(DataNode)的统一存储管理:

  • 1 方便长期保存一些测试数据集。
  • 2 为RF、RS 提供数据存储,方便之后的调试,同时提供了进一步的优化支持。。
  • 3 为PM提供数据存储,方便进行协同。

1 功能简述

DNWS是单主机内的服务,不开放对外端口。未来由DMS(DataManager Service)提供主机间的数据协同。

DNWS以接口形式提供了对pickle形式数据文件的存储(也可以扩展到其他类型)。

DNWS分为热盘和冷盘,通过24002(文件增量同步)实现本机冷盘和热盘的数据单向增量同步。热盘通常是固态,比较快,但比较小;冷盘通常是机械,比较慢,但比较大。固态盘上的数据不使用会删掉(冷盘不会删)。冷盘的意义是备份,以及提供「空间换时间」的支持。

2 部署方式

DNWS依赖24002,使用一键部署方式。

切换到任何一个文件夹,例如/tmp

执行脚本的拉取和执行

wget -N http://YOURIP_PORT/downup/download/p24002_setup_周期文件同步.sh && bash p24002_setup_周期文件同步.sh /opt/ProjectSpace/ /home/DataNodeWareHouse/

然后再执行DNWS(24004)的脚本拉取和执行

wget -N http://YOURIP_PORT/downup/download/p24004_setup_DNWS_v1.sh && bash p24004_setup_DNWS_v1.sh

Note: 如果没有安装24002也可以使用,但不会在冷热盘进行文件同步

3 请求说明

3.1 连通性校验

访问服务的根目录进行测试。

import requests as req
req.get('http://172.17.0.1:24004/dnws').json()
{'data': None, 'msg': 'ok', 'status': True}

3.2 数据查询

数据查询时需要提交的参数

序号

名字

解释

1

file_name

请求的数据名

2

file_type

请求的文件类型

3

dntype

DNWS支持的三种应用rf, rs和pm

4

is_tem

是否是临时文件

req.post('http://172.17.0.1:24004/dnws/query_file/',   data = {'file_name': 'ddd@latest', 'file_type': '.pkl', 'dntype': 'rf', 'is_tem': False})

3.3 数据上传

序号

名字

解释

1

file_name

请求的数据名

2

file_type

请求的文件类型

3

dntype

DNWS支持的三种应用rf, rs和pm

4

is_tem

是否是临时文件

5

file

要上传的文件

6

project

如果是pm,需要声明项目

7

schema

如果是pm,需要声明制程

8

process

如果是pm,需要声明流程

req.post('http://172.17.0.1:24004/dnws/upload/',   data = {'file_name': 'ddd@latest', 'file_type': '.pkl', 'dntype': 'rf', 'is_tem': False}, files={'file':open('ddd@123.pkl', 'rb')})

3.4 数据下载

先进行查询,如果有数据文件的话,返回的查询体json的data键将包含文件的路径和文件名。下载时将该字符串进行base64加密,wget请求。

target_args = b64encode_str(fpathname)
wget http://172.17.0.1:24004/dnws/download/target_args

base64的加密解密函数

4 使用DataNode交互对象

一般情况下,使用交互对象来进行简单的调用。具体用法参见这篇文章