开发者学堂课程【场景实践-基于阿里云 Quick BI 对 MOOC 网站日志分析:数据预处理和上传】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/524/detail/7076
数据预处理和上传
内容介绍:
一、、背景介绍
二、使用 Java 对文本预处理
三、提取IP中的信息
四、纯真IP数据库
五、示例演示
六、IP 转数字
七、上传数据到 MaxCompute
八、数据上传的演示
九、正则表达式
十、使用正则提取日志属性
本节进行案例的学习:MOOC 网站用户访问日志分析。
一、背景介绍
MOOC网站是一个出售课程并提供线上学习服务的网站
网站在运行过程中遇到以下一些问题:
l 用户抱怨网站加载内容很慢
l 用户抱怨网站样式错乱,体验度不好
l 领导认为课程销量不行
l 网站偶尔会发生崩溃
鉴于以上这些网站运营过程中的常见问题,开发和分析工程师决定先从分析网站的用户访问日志入手。
二、使用Java对文本预处理
此处关于网站访问用户日志的课时收集。这里使用的是nginx的用户访问日志。拿到日志文件之后,需要先对文本进行简单的预处理,这里使用java,作用是在日志文件中增加一个自增长的ID列。
由于访问时间精度不够,需要增加一个自增长的ID列
bufferReader = new BufferedReader(new FileReader(accessFilePath));
File outFile = new File(outUrl);
if (outFile.exists()) {
outFile.delete();
}
outFile.createNewFile();
fileWrite = new FileWriter(outFile);
while ((line = bufferedReader.readline())!=null) {
index++;
String newLine = String .valueOf(index) + “”+line +”\r\n”;
fileWrite.write(newLine);
}
首先用 bufferReader 读取一些已经存在的日志文件,之后再根据输出的目录去创建一个发展对象,如果存在就删掉并且重新创建。使用 fileWrite 传入 file 对象,对即将输出的文件进行写入的操作。再从源文件中依次的读取每一行,并赋予line这个变量上。使用index索引,默认从0开始,进行自加操作。将其转写为字符串类型并与‘line’进行字符串拼接,中间以空格进行分割,来构建新的字符串,新的字符串会成为输出文件的每一行,写入到每一行输出文件。最后会重新输出到新的文件,并且每一行的开头都是一个自增长的ID。会在后面的讲解中讲述使用这个ID的原因。
处理结果如下:
112.10.94.234 - -[22/Aug/2017:14:01:26 + 0800] “POST /item/detail.mooc?a=1&b=2&c=5 HTTP/1.1” 200 2582 “http://www.chinamoocs.com/study/initplay/540.mooc”” Mozilla
/5.0(Machine;Intel Mac OS X 10_12_6) AppleWebKit/603.3.8(KHTML,like Gecko) Version/10.1.2 Safari/603.3.8”
123 112.10.94.234 - -[22/Aug/2017:14:01:26 + 0800] “POST /item/detail.mooc?a=1&b=2&c=5 HTTP/1.1” 200 2582 “http://www.chinamoocs.com/study/initplay/540.mooc” ” Mozilla
/5.0(Machine;Intel Mac OS X 10_12_6) AppleWebKit/603.3.8(KHTML,like Gecko) Version/10.1.2 Safari/603.3.8”
如上是原来使用的日志的单条记录,在进行预处理之后会在前面加上一个id和一个空格。如果不是太了解java的编程语言,熟悉的编程语言都是可以使用的,可以不局限在java,比如python等的其他语言。
三、提取IP中的信息
IP中一般可以提取出两种重要信息,城市和网络服务商。实际上每一个IP都对应一个IP段,对应的IP段属于一个特定城市的网络供应商。
为什么要对IP进行信息的提取呢?对于城市信息,可以对网站访问用户进行地域分析,网络服务商可以分析用户网络类型。判断是电信、联通还是移动。
提取IP中信息的方法:
(1)免费API接口:如淘宝
(http://ip.taobao.com/instructions.php)这是默认提供的一个接口,可以通过这个接口将ip传给它,之后会返回IP相关的城市和网络服务商。对于这类免费的IP接口有很多,但缺点是调用的次数不能过多。这类免费的接口,在刚开始时可以提供5qbs的查询,即一秒内可以对它的接口访问五次,长时间之后它的访问质量会大不如前,在实际的操作过程中,一秒钟只能访问一次。如果超过这个次数,这些请求会失效。所以由大量的数据并且在很短的时间内调用接口来获得信息,不建议使用这种免费API接口。
(2)收费API接口:搜索IP查询接口。对于收费的API接口,它的请求次数不会有限制,会根据IP的查询量进行收费。由于是收费的,它的城市信息以及网络服务商信息就会更准确。若要大量的搜索IP,就到搜索引擎里寻找。在这里由于是收费就不进行使用。
(3)本地数据:GeoIP,纯真IP数据库。将IP的数据存放到本地,通过程序在本地的数据库进行查询,对于本地数据方式 的工具介绍两种:GeoIP(有免费版和收费版)、纯真IP数据库。
免费版只可以查询到一些城市信息。免费版只能查到城市的信息,免费版的搜索次数和精度不如收费版的;纯真IP数据库,它是一个完全免费的数据库,本次课程中将使用纯真ip的数据库进行IP的信息提取。
四、纯真IP数据库
下载地址:http://update.cz88.net/soft/setup.zip
属性:IP起,IP止,地址信息,运行商。
需要先在网站上下载,之后安装。但它的数据格式并不是文本的,可以进行格式的转换,转换为文本的格式。文本如下,一共有四个信息,第一列是IP的起始,第二列是IP的终止,第三行是地址信息,第四行是运营商。
五、示例演示:
在已经下载好的纯真IP数据库中的程序运行的点击解压,如下图。
选择所要放置的位置,这里将它输出到文本文件,命名为ip并存放到D盘。之后解压完成后,可以看到在D盘中对应的IP文件,它的大小为24M如下图。
打开文件编辑器,可以看到如下图的形式,ip的起始地址,IP的终止地址,地址信息,运营商的相关信息。
六、IP转数字
在获得IP段的文本数字后,要将IP转换成数字
阿里云官网:https://www.aliyun.com当访问网站的时候,DNS会帮我们将域名转换成实际的IP,真正访问的其实就是对应的IP。
IP地址是32位二进制数,为了方便被分为4组二进制数。
二进制:10001100.11001101.00100000.00001101,就是完整的数字,不需要加任何点,一个32位的二进制数是不具备可读性的,将32位二进制数转换成对应的十进制数字。转换计算如下,最后得到的十进制数字可以被网站直接识别。也就是除了使用阿里云的域名之外,还可以直接使用https加上十进制的数字会直接访问并识别到,所有的网站都是这样。
数字计算:
140*256*256*256+205*256*256+32*256*+13=2362253325
数字访问方式:https://2362253325
IP转数字的原因:之前讲的IP的地址段,对于一个从字符段中查找属于两个IP地址段对应的信息是很复杂的。通常要把IP地址段一个个剖析来,进行一个个匹配,在匹配的过程中,存在复杂的逻辑工程。对于这种数据处理是非常困难的。所以将它变为简单的搜索语句查询的数据格式,这样才能进行数据处理。而使用IP转数据的形式是一种简单更加高效的形式。当前的IP处于哪一个地址段,是将IP地址的开始,IP地址的结束转化为实际的数字。将访问日志中的IP转换为实际的数字,查看是否在两个数字的数字之间,这就大大降低数据查找的复杂性以及查询的效率。
七、上传数据到 MaxCompute
转数字的操作实际上是对后续的操作进行一个储备,之前的编程语言对文件进行了简单的处理,之后要将处理的文件上传到MaxCompute,即大数据计算服务中。
为了使用MaxCompute进行数据处理,创建两个只有一个字段的表:第一个是访问日志表,放的是每一个用户访问IP的访问每一条日志;第二个表是IP表存放的是每一行放在纯真数据库中IP的数据文本的每一行。
CREATE TABLE t_web_access_log_content(content STRING);
CREATE TABLE t_cz_ip_content(content STRING);
它们的每条记录将分别是日志文件和IP库文件的每一行。
然后在odps_cmd工具使用tunnel命令将日志文件和IP库文件导入到表中:这里的fd是指数据的分隔符,这里的每一行就是表中的每一行,指定文本文件中不存在的一个字符作为分割,这样就会把文本文件的单行作为数据库表中的每一行;第二个表在上传数据的时候也是以同样的规则,最后这两张表包含了所有的数据文件
tunnel uploaad-fd”NoDelimiter” D:\access.log t_web_access_log_content;
tunnel uploaad-fd”NoDelimiter” D:\ ip.txt t_cz_ip_content;
下载地址:http://repo.aliyun.com/download/odpscmd/latest/odpscmd_public.zip?spm=5176.doc27804.2.3.C3koRy&file=odpscmd_public.zip,也可以直接在阿里云上搜索opdscmd工具。
八、数据上传的演示
首先进入阿里云的官网,就是aliyun.com网站,登上账户,若没有则注册。
在实验过程中会分配一个子账号,用户可以通过子账号进行登陆,就可以直接登陆。演示视频中是一个独立账号的登录。
登陆后,进行查找MaxCompute工具去生成一个项目。如何进入后台?首先可以点击图中的右上角控制台进入。
之后在左侧边框中寻找MaxCompute,如下图。
若是没有可以直接点击下图中的产品与服务中进行查找,找到大数据(数加)下的dataworks或MaxCompute,(dataworks和MaxCompute区别:dataworks相当于一个开发的id,一个开发集成环境,基于dataworks可以快速开发MaxCompute相应的程序)。点击dataworks
在进入DataWorks后的页面,如下图。可以看到工作空间(MaxCompute的工作空间),默认会有经常使用工作空间的显示,若第一次注册,下方就会是空白的。
点击下方创建工作空间。如果已经创建但是没有找到,可以点击最上方菜单中的工作空间列表
需要注意:所创建的工作空间实际上是根据区域相关,例如在华东1区创建了一个工作空间,那么在华东2区看不到。所以如果不展示,需要找到当时注册的区域。
概览下可以进行创建工作空间,还可以在工作空间列表中右上方点击创建工作空间。点击后会显示选择创建计算引擎服务,勾选MaxCompute,在点击购买手动开通后可以选择按量付费、包年包月、开发者版选项。按量付费在起初不需要付费,用多少付费多少,在数据量很小的情况下只需要一两块。勾选按量付费。下面的服务先不用进行选择,点击下一步,工作空间名称为项目名,下方的MaxCompute项目名称为灰色,显示与工作空间名称一致。输入test001,需要注意项目空间名称为全局唯一即不同用户也不能使用相同的项目空间名。下面选项使用默认设置,然后点击创建工作空间
显示test001项目名称被占用不能使用,此处根据自身情况将名字改为全局唯一即可创建。项目空间创建完成后需要上传入数据。项目空间相当于一个数据库,数据库中有各种各样的表。创建完表后需要将数据传入表中,需要用到odps_cmd工具。数据上传工具需要三个属性:项目名(此处为web_log_analysis),accesskeys(用户下,点击后显示使用子账号或者继续使用,选择继续使用)
上图是之前生成的所有的accesskeys ID和Secret即id和密钥。Secret默认不显示,需要用户保密。
以上是打开项目的一个入口,还有另一个入口,点击产品,找到大数据计算,点击MaxCompute
如果是登录,点击后会有一个管理控制台,点击后同样会进入到管理控制台页面。
接着进行数据上传需要先进行工具的配置。如图点击大数据计算服务的开发文档












