标签:txt 大数据分析 分词 shel 运维 读取 大数 语法 web
数据分析尤其是大数据分析这几年的热度依然不减,但面对眼花缭乱的数据分析产品很难去选择,那什么是理想的数据分析平台呢。下面是根据我的个人理解的理想数据分析平台,在次强调我理想的数据分析平台。不要对号入座。? ? 在这里我并没有强调大数据分析平台,因为很多时候小数据分析都没有做好的情况下,谈大数据分析有点早,我一向的观点都是先把简单的少量的做好,才有机会做大量的复杂的平台。有句话叫不扫一屋何以扫天下。既然谈到数据分析平台,那什么是数据呢?百度百科的定位为:数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。在计算机系统中,数据以二进制信息单元0,1的形式表示。但这个范围有些大和抽象,不利于分析,对计算机来说,所有的数据都是0和1。但实际上我们能分析的都是我们可以识别的数据,所有我们认为数据分析平台首先要分析的是能够识别的文本数据,对于视频,音频等数据不在目前的数据分析平台中。文本数据的载体有各种各种各样,所有数据分析平台的第一个能力是获取数据的能力。
? ?数据获取的能力,现在计算机中的数据格式各种各样,有结构化数据,有非结构化数据。有doc,xls,txt,db等各种各样,所以一个理想的数据分析平台首先要能识别这些数据格式,并从这些数据格式的文档中抽取文本数据,然后进行下一步的分析。
? 获取到数据后,分析什么呢,这个很难有统一的分析目标,所以平台需要有灵活的搜索语法。而且分析的过程和目标很多时候也是不确定的,这个时候平台既要支持随时获取数据分析,也要支持时时数据分析。可能有些抽象,举几个例子:
例子1:分析一篇word文章中出现单词最多的前10个。这个分析就是个偶发事件,那怎么做的,当然如果能写代码,这些都不是问题,但大多数用户是不具备写代码的能力的。所以我认为平台提供的平台支持如下搜索语法:
? ?source=test.docx | split(" ")? as word|field word, num| group by word|order by num desc| top 10
这个语法的大概含义是首先读取word文档,然后根据空格进行分词,然后对分好的词进行group by操作,然后根据数量进行从大到小排序,最后获取前10个。你看这个语法还算比较容易理解,比如写代码还是简单不少。
例子2:分析nginx访问日志中最多的前10个ip地址。这个在运维分析中是比较常用的,用shell可以实现。
cat?access_log?|?awk?‘{print?$1}‘?|?uniq?-c?|?sort?-rn?-k1?|?head?-n?10
但这个是能在linux的工具下执行,只能在执行一台机器上执行,有没有更好的方式呢?比如如下语法:
source=access_log | split(line," ")? field 1 as ip |?field ip, num| group by ip|order by num desc| top 10
这个语法的含义是读取access_log文件,对每行进行split,获取第一个字段命名为ip,然后根据ip进行group by分组,然后根据数量进行从大到小排序,最后获取前10个。这种语法可以通过平台直接支持,通过web界面就可以直接查询,是否比shell更方便呢?
例子3:统计linux下tcp端口源连接ip的前10,在linux下通过ss -ntu可以查看到明细
Netid ?State ? ? ?Recv-Q Send-Q ? ? Local Address:Port ? ? ? Peer Address:Port?
tcp ? ?ESTAB ? ? ?0 ? ? ?0 ? ? ? ? ? ? 10.9.58.23:45889 ? ?122.225.101.50:514 ??
tcp ? ?ESTAB ? ? ?0 ? ? ?52 ? ? ? ? ? ?10.9.58.23:13717 ? ?183.212.160.45:1330?
但如何进行统计呢?比如如下语法:
source="exec:ss -ntu"| rownum>1 | rmdup(" ")|split(line," ")|field 4 as source |substr(source,0,pos(source,":")) as sourceip|field sourceip, num| group by sourceip|order by num desc| top 10
这个语法的含义是执行ss -ntu获取第二行到结尾,然后去除重复的空格,然后对每行空格进行分割,获取第四个字段,命名为source,然后针对source进行substr获取源ip,substr第一个参数是字段,0是开始位置,结尾位置是冒号的位置,命名为sourceip,最后进行分组排序取前十。虽然看起来稍微复杂些,还是比写代码或者脚本简单很多。
先些这两点,后面在补充。
赛克蓝德是一家数据分析公司,本着数据改变生活的理念,致力于提供方便好用的数据分析产品。
标签:txt 大数据分析 分词 shel 运维 读取 大数 语法 web
原文地址:https://blog.51cto.com/zhulinu/2507397