KAOS模型
问题描述:
我们开发了一种针对时序数据的文件格式TSFile,本身不支持sql查询。为了让公司分析人员能够用SQL进行分析,并且应用一些机器学习算法进行预测,需要设计并实现一个TSFile与SparkSQL 的连接器。在实现这个连接器之前,首先需要建立一个KAOS模型。来明确具体的需求。
目标模型:
需求说明文档
- 引言
1.1目的
此文档定义了Spark-TSFile连接器的需求说明,包括功能性需求和非功能性需求。
文档的主要读者是开发人员、测试人员和分析人员。目的是使分析人员、软件开发人员、测试人员能够对此项目的需求有一个直观的理解,使之成为开发过程和使用的基础,并为开发过程提供需求说明。
1.2范围
本软件是一个连接器中间件,用来连接SparkSQL与TSFile,使公司的分析人员可以通过SparkSQL对TSFile中的数据进行查询,并且可以使用Spark中的机器学习算法进行分析预测。
使用此连接器,可以利用spark的并行计算优势,并行地处理TSFile,每个子任务处理一个partition。这样就可以用于工业生产。
1.3定义和缩写
Partition:每一个文件的分片,默认按照hdfs的block进行划分。
HDFS:Hadoop的分布式文件系统,将文件存储在多个节点上,逻辑上看起来像是一个文件系统。
Block:HDFS自动将文件切分成多个block。分布在不同节点。
SparkSQL:一个SQL on Hadoop系统,可以扩展外部数据源,作为其中的一张表,支持sql语法。
TSFile:时序数据文件格式,专门存储工业传感器数据。列式存储。、
RowGroup:TSFile中的数据块,每个RowGroup中只存储一个Deviceid。
QueryEngine:TSFile的读数据接口。一切与文件交互的方法都要通过QueryEngine。
Connector:特指本连接器。
time:时间戳。
delta_object:设备名。
1.4引用
An Architecture for Fast and General Data Processing on Large Clusters。
1.5概述
接下来本文档会介绍具体的需求,包括各种需求模型。
综合描述
2.1产品概述
本连接器设计外部开发环境包括Hadoop和Spark,支持的操作系统为Unix。主要包括三个接口。第一个接口是向HDFS中传文件的接口。第二个接口是为sparkSQL提供schema的接口。第三个接口是为sparkSQL提供数据的接口。本连接器作为一个外部jar包添加进spark中,启动spark shell时添加就可使用。2.2产品功能
本产品功能主要有三部分,第一个部分获取TSFile文件的Metadata,转化为一张关系型表交给sparkSQL。第二个部分读取TSFIle中的数据,转换成一定的格式交给sparkSQL。第三个部分为语法分析器,将sparkSQL接受的sql语句转换成TSFIle认识的SQL。2.3用户特征
使用本产品的用户需要有一定的大数据背景、机器学习背景,要有SQL基础。2.4约束
需运行在类unix系统上。
在启动spark-shell时需要指定本jar包。
创建表时需要指定一个hdfs路径,指定文件的存放位置,以map参数
形式传入,key必须为“path”。2.5假设和依赖
文件切分依赖默认的HDFS切分算法,无法自己控制。
TSFile文件必须提前放在HDFS上。2.6需求分配
未来的版本里,可能加上从Spark中写回TSFile文件,实现读写双向联通。
在处理分区查询时,还可以进行查询优化,只请求此分区内的设备号。避免每次查询所有的设备,返回很多空的查询结果。
还可以进行更高效的查询优化。目前由于TSFile本身的数据存储格式是列式存储,天生进行了很多优化,在以后添加join时可以考虑新的优化规则。具体需求
3.1目标模型
这部分包含了多个目标模型图,首先,系统需求包括功能性需求和非功能性需求。
功能性需求包括支持SQL查询,支持机器学习算法。为了满足这个要求,需要设计一个连接器,将spark与tsfile相连接,利用spark的数据挖掘算法进行分析预测。
其中支持SQL查询这部分,TSFile本身是文件,不支持sql语法,且数据是按列存储的。首先需要为数据建立一个展示的表结构。此处表结构设计为一下几个字段。
time:时间戳,由于是时许数据,每个数据点都对应一个时间点。
delta_object:设备id,允许传感器挂载到设备上。每个传感器都属于一个设备。
s1,s2,s3...:代表传感器的值。
由于只有文件读取接口,而读取接口需要指定时间和值得过滤条件,不支持delta_object过滤,这样就需要将这张表对应的SQL转化为文件查询引擎支持的查询配置。需要在connector中实现一个SQL语法解析器,将where后边的子句进行拆分,转化为析取范式拆分成多个互不相关的子查询。这部分包括生成查询计划,其中又包括逻辑查询计划和物理查询计划,逻辑查询计划和物理查询计划没有关系,物理查询计划需要访问文件获得一些数据的统计信息。根据分区信息将每个子查询翻译成文件支持的格式。
为了支持机器学习算法,需要将TSFile文件中的数据提供给sparkSQL,主要包括两个部分,提供表结构,提供数据。其中每个文件对应一种表结构,除了time与delta_object相同,其他列都是动态添加的。数据也按照表结构的格式提供给sparkSQL,一行一行提供。
支持分布式并发查询,开启分片功能,采用HDFS自动分片算法,按block大小进行切分。每个子任务处理一个文件分片,只读取对应分片中的数据。这样就实现了分布式数据导入。
一个系统构建简单与强鲁棒性,高可靠性是矛盾的。所以要在工程复杂度与系统性能之间平衡。
服务请求相应:前提条件是建立的表和查询的表是同一张表。分析人员会进行两种请求,建表请求和查询请求。建表请求发出后需要Connector提供表结构,查询请求发出后需要Connector提供数据。
服务请求:spark负责提供接口,获取表结构和获取数据的接口。Connector负责提供表结构和数据。分析人员来发出请求。
3.2责任模型
SparkSQL的责任模型:包括维护task状态DAG图,为分析人员提供shell用来输入命令。解析SQL语句,生成逻辑查询计划。读取TSFile中的文件。Master节点负责分发任务给worker节点,worker节点在获取数据后统一返回给master节点。当创建表时负责请求表结构,在查询数据时负责请求数据,都是拉去数据的模式。
3.3对象模型
TSFile对象模型:每个TSFile文件包括一个Metadata,记录了数据的组织结构和分布。每个文件包含多个RowGroup,每个RowGroup对应一个Device。每个文件对应一个QueryEngine,获取文件的数据和格式都要通过QueryEngine。
3.4操作过程模型
当创建表事件发生后,导致请求表结构执行,创建一个请求表结构的子任务,调用查询文件的metadata,将metadata作为输入交给scheam转换器,输出表结构交给spark。
当查询事件发生后,导致请求数据执行,创建多个请求数据的子任务,每个子任务请求一个分片的数据。调用查询数据的接口,将数据作为输入交给数据转换器,输出符合表结构的数据交个spark。
3.5潜在障碍
在并发读取数据时,单个节点在解析分片时有可能出现内存溢出,需要实现文件的分批读,每次读取一小部分数据。
每个子任务在查询分片数据时,有可能由于任务执行到一半失败,重启后导致数据读取重复。需要设计相应的预防算法。
在对SQL语句进行语法解析生成逻辑查询计划和物理查询计划时,还有很多优化规则没有添加。可能需要在以后实现。
KAOS模型的更多相关文章
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET路由模型解析
大家好,我又来吹牛逼了 ~-_-~ 转载请注明出处:来自吹牛逼之<ASP.NET路由模型解析> 背景:很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- 隐马尔科夫模型python实现简单拼音输入法
在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...
- webapi - 模型验证
本次要和大家分享的是webapi的模型验证,讲解的内容可能不单单是做验证,但都是围绕模型来说明的:首先来吐槽下,今天下午老板为自己买了套新办公家具,看起来挺好说明老板有钱,不好的是我们干技术的又成了搬 ...
- 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)
统计角度窥视模型概念 作者:白宁超 2016年7月18日17:18:43 摘要:写本文的初衷源于基于HMM模型序列标注的一个实验,实验完成之后,迫切想知道采用的序列标注模型的好坏,有哪些指标可以度量. ...
随机推荐
- css使absolute相对于父容器进行定位而不是以body(为什么绝对定位(absolute)的父级元素必须是相对定位(relative))
借知乎的回答如下解释: 首先,我想告诉你的是,如果父级元素是绝对定位(absolute)或者没有设置,里面的绝对定位(absolute)自动以body定位.这句话是错的.正确的是:只要父级元素设了po ...
- bzoj2702[SDOI2012]走迷宫
题意:给你一个有向图,点数10000,边数1000000,SCC大小不超过100(按数据范围的写法只有第三部分数据满足这个条件,不过第二部分数据并没有出现大小大于100个点的SCC,我是用数组大小为1 ...
- CentOS 7 配置虚拟主机站点
1.进入/etc/httpd/conf 下 将httpd.conf 打开. 2.将DocumentRoot注释掉.(将ServerName 打开要不会有错误警告). 3.将虚拟主机站点配置包含进来:I ...
- Lazy Load, 延迟加载图片的 jQuery 插件.
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...
- python包使用指南-创建虚拟环境
创建虚拟环境的两种方法: 1.virtualenv 2.venv http://packaging.python.org/en/latest/installing/#creating-virtual- ...
- Set集合
Set:无序(存储和取出数据不一致):唯一性(不可重复) Set是Collection的子类,所以Collection的方法Set都可以使用 HashSet:底层为哈希表,保证唯一性,依赖hashCo ...
- JavaScript中的静态成员
静态:共享 一.公有静态成员(作为函数的属性即可): var Gadget = function(price) { this.price = price; } Gadget.isShiny = fun ...
- 常用的数据统计Sql 总结
最近刚在搞一个BI的项目,里面需要大量的sql 数据统计相关运用,加深了我又对SQL的理解与使用. 所以,分享几个数据统计时常用的sql 语句总结: 1. 统计各个条件下的数据 select Batc ...
- hub,桥,交换机,路由器的区别
1.四种设备在网络中的物理位置 如下图 2.这四种设备的本质 这四种设备,不管怎样,他们都是进行包的转发,只不过转发的行为有些不一样而已 3.逐一介绍 对于hub,一个包过来后,直接将包转发到其他口. ...
- 美团HD(4)-二级联动效果
DJNavDropView.m #import "DJNavDropView.h" #import "DJCategory.h" #import "D ...