experiment-service 目录
功能:执行算法组件获取,实验运行,用户工作流存储及提取功能。
文件功能说明:
Controller层:
ExecutionController.java:负责执行工作流图提交到spark上的相关操作
-
| 函数接受http请求的 api | 函数接受参数 | 函数功能 | | —- | —- | —- | | /flow/run | NodeJson:描述工作流各项信息的字符串,与数据库表中存储的工作流图信息格式一致 | 为指定工作流分配session并执行 | | /flow/node/status | resultUrl :工作流所在的session的url | 轮询工作流状态 | | /flow/node/data/{nodeId} | nodeId:需要进行数据预览的节点的Id(唯一识别) | 处理对于工作流中某节点的“数据预览”请求 | | /flow/node/model/{nodeId} | nodeId:需要进行保存模型的节点Id | 处理对于工作流中某节点的“模型存储”请求 | | /flow/node/evaluation/{nodeId} | nodeId:需要进行模型评估的节点Id | 处理对于工作流中某节点的“模型评估”请求 | | /session/status | 无 | 函数识别在token中携带的session,并轮询session状态判断当前工作是否已完成。 |
InteractiveQueryController.java:主要执行数据的交互式查询工作
| 函数接受http请求的 api | 函数接受参数 | 函数功能 |
|---|---|---|
| /query/sql | sql:标准的sql查询语句,在前端中给定为筛选条件 | 按照前端发回的筛选条件过滤指定数据源 |
| /query/readyForData | filePath:hdfs中文件的路径 | 将hdfs中压缩后的orc格式文件取出并进行下载 |
ModuleController.java:主要执行对已存储的模型与算法的查询及加载工作
| 函数接受http请求的 api | 函数接受参数 | 函数功能 |
|---|---|---|
| /module | 无 | 查询数据库中保存的所有算法节点 |
| /model | 无 | 从token中识别当前用户,并查询出其保存的模型 |
StorageController.java:主要执行对用户已存储工作流的curd操作
| 函数接受http请求的 api | 函数接受参数 | 函数功能 |
|---|---|---|
| /experiments/description | 无 | 查询数据库中保存的当前用户工作流信息 |
| /experiments/{experimentIdGET方法 | experimentId:该工作流信息的唯一识别id | 返回指定的某条工作流信息 |
| /experiments/{experimentId DELETE方法 |
experimentId:该工作流信息的唯一识别id | 删除指定的某条工作流信息 |
| /experiment PUT方法 |
descriptionAndMapInfo:工作流信息 | 将新工作流信息放入数据库 |
Service 层:
ExecutionService:对controller层提供的服务进行低层逻辑编写
| 函数名称 | 执行功能 |
|---|---|
| generateDataSourceCode | 读取数据源的通用代码部分生成 |
| generateSavedModelCode | 保存模型的通用代码部分生成 |
| getInputCodeForPrediction | 预测函数输入代码部分生成 |
| getInputCode | 判断算法的输入参数 |
| getInnerCode | 获取代码段的main部分 |
| getAttrsCode | 获取字段名 |
| getOutPutCodeForML | 生成机器学习所需依赖代码 |
| getOutPutCodeForEvaluation | 生成模型评估部分代码 |
| executeFlow | 执行给定工作流 |
| generateCode | 代码拼接 |
| getOutPutCode | 生成输出部分代码 |
Entity 实体类:
| 实体文件名 | 实体功能 | 包含实体 |
|---|---|---|
| edgeinfo | 存储工作流图边信息 | /* 边的 id */_String id; int index; / 源组件id /String source; / 源组件锚点位置 /int sourceAnchor; / 目标组件id /String target; / 目标组件位置 /_int targetAnchor; |
| ExperimentDescription | 用户工作流的描述信息 | String experimentId;工作流id String userId;用户id String title;工作流名称 String description;工作流描述 |
| ExperimentMapInfo | 用户工作流的详细信息 |
String experimentId;工作流id,与ExperimentDescription中一致 String userId;用户id,与ExperimentDescription 中一致 ArrayList ArrayList |
| HeaderAttribute | 用户数据某一列属性描述信息 | private String colName;//列名 private String modifiedColName;//是否已被修改,若未修改则与列名保持一致 private String dataType;//数据类型 private String modifiedDataType;;//是否已被修改,若未修改则与原数据类型保持一致 private boolean selected;//是否已被选择 |
| MetaData | 文件头信息集合 | String fileName;//文件名 String modifiedFileName;;//是否已被修改,若未修改则与文件名保持一致 String path;//文件路径 List String previewData;//预览样本数据 |
| LivySessionInfo | 已分配livy session信息集合 | private String livyAddr;//livy地址 private int id;id private String state;//session当前状态 |
| SavedModel | 已保存的模型信息 | String modelId;//模型id String userId;//所属用户 String name;//模型名称 String elabel;//模型标签 String algorithmType;//模型所属算法 |
filesystem-service 微服务
Controller层:
CommonFilesController.java :用于处理用户星标文件的相关逻辑,星标文件为用户常用的数据源,能够直接在组件栏里作为组件拖出,无需指定其在hdfs上的路径。
| 函数接受http请求的 api | 函数接受参数 | 函数功能 |
|---|---|---|
| /common-files | 无 | 根据token中携带的用户id,请求用户的星标文件列表 |
| /common-files/set | path:需要被设定的星标文件所在路径 | 将当前用户的指定文件设定为星标文件 |
| /common-files/cancel | path:需要被设定的星标文件所在路径 | 取消已被设定为星标文件的星标 |
DirectoryController.java:用于处理用户在hdfs上文件夹的相关逻辑
| 函数接受http请求的 api | 函数接受参数 | 函数功能 |
|---|---|---|
| /ls/common | 无 | 根据token中携带的用户id,请求用户的星标文件列表 |
| /ls | path:当前文件夹路径 | 列出指定文件夹下所有文件 |
| /mkdir | path:需要创建的新文件夹路径 | 在指定路径上创建一个新文件夹 |
HdfsFileController.java:用于处理用户的hdfs相关逻辑
| 函数接受http请求的 api | 函数接受参数 | 函数功能 |
|---|---|---|
| /file(post方法) | 上传文件流 | 将文件流上传至平台 |
| /file/confirm | metadata:用户执行修改后的文件头 | 文件上传平台进行确认,并允许用户选择文件的一部分列进行上传 |
| /(delete方法) | path:需要删除的文件路径 | 在hdfs上删除指定文件 |
Service 层:
HdfsService:对controller层提供的服务进行低层逻辑编写,在代码每个函数的开头均提供了javadoc式的说明文档。
Entity 实体类:
| 实体文件名 | 实体功能 | 包含实体 |
|---|---|---|
| MetaData | 存储文件描述信息 | String fileName;//文件名 String path;//文件路径 List String previewData;//用于预览的小样本数据 |
| LivySessionInfo | 已分配livy session信息集合 | private String livyAddr;//livy地址 private int id;id private String state;//session当前状态 |
gateway微服务
gateway服务不提供业务逻辑服务,而是作为其他服务的基础,所有的请求在进入其他服务之前会被gateway服务拦截,gateway服务会解析请求中的header中的token字段,查验其是否合法与是否过期,如否则予以拒绝。
livy-service 微服务
功能:对在分布式集群中创建的livy session进行管理。 livy session如同docker的容器一样,为一个用户的一样代码提供一个单独的运行环境,避免重复创建sparksession的冗余过程。
Controller层:
outputController.java :用于处理用户指定获取某一节点的代码输出逻辑
| 函数接受http请求的 api(均为post方法) | 函数接受参数 | 函数功能 |
|---|---|---|
| /output/evaluation | livySessionInfo | 输出本session中训练的模型评估结果 |
| /output/schema | livySessionInfo | 输出本session中的数据文件头 |
| “/output/csv” | livySessionInfo | 输出本session中的csv文件 |
SessionController.java:用于处理session相关的业务
| 函数接受http请求的 api | 函数接受参数 | 函数功能 |
|---|---|---|
| /session GET方法 | 无 | 创建一个新的livysession给当前用户 |
| /session/status POST方法 | livySessionInfo | 更新当前session状态 |
| /session/code POST 方法 | code:需要运行的代码 | 在livysession上新提交一个代码 |
Service 层:
对controller层提供的服务进行低层逻辑编写,在代码每个函数的开头均提供了javadoc式的说明文档。
login-service 微服务
login-service仅提供登录服务,包括在用户登录后赋予或刷新一个独有的token以保证只有合法的用户能够访问,同时因为token的存在也提供在expiretime时间内免登陆的服务。
