使用Hive处理服务器日志

假设这样一个场景,用户有许多的机器(ECS或者自有机房的都可以),每天产生非常多的日志,记录了用户的访问的一些信息,比如userId,访问的页面地址,访问的时间,访问Ip等等。我们对这些数据进行一个离线分析,每天分析一次,计算网站的各个页面的UV、PV,并观察一下是否有作弊的情况:如多个不同的账号来自于同一个IP。并能将最终的这个结果同步到数据库中,在管理后台查看。

那么使用E-MapReduce要如何来做呢?

第一步 获取日志数据

首先,我们需要获取所有服务器的日志数据。这个可以通过阿里云的日志服务(SLS)来完成。
可以安装日志服务的客户端到指定的机器上,然后在日志服务的控制台进行数据收集配置,就能够把数据收集上来了。
具体的可以参考日志服务使用说明
你可以在配置中指定你需要收集的目录和文件名,通过这一步,所有的机器上的日志就都会被收集到日志服务中去。

第二步 将数据投递到OSS

收集到了数据。现在我们要把这些数据都放到OSS上去。主要是几个原因

  1. OSS的存储本身非常便宜,而日志服务默认数据并不永久保存
  2. 日志服务没有提供读取大量离线数据的接口

在LogStore管理标签下能够看到有一栏日志投递,如下

点击对应的LogStore后面的OSS(创建),就可以创建一个到OSS的投递任务了
详细的配置参考,投递到OSS

其中有几点要注意的

  1. 投递的时候,是否压缩选项请选择非压缩的文本
  2. 是OSS投递的路径最终是这样构成的,会自动加上很多层的路径
  3. 所有的投递的数据都是一个json结构,并不是原始的数据格式

这个就需要我们在处理数据的时候,要对所有的目录进行遍历,并将数据做一次json解析,将最终要处理的数据内容取出来

第三步 使用Hive处理数据

这里假定,日志文件的内容是一个文本,对应到一个key叫content。里面的多个字段使用|来分割,保存到OSS中的数据类似如下的格式 {"content":"1463987545149|12345|121.164.16.19|www.xxxx.com/user"}

若使用emr-1.0.x或者emr-1.1.x,其中的Hive版本是1.0.1,使用下面的sql

CREATE EXTERNAL TABLE logtable (logcontent string) stored AS textfile location 'oss://{accesskeyId}: {accesskeysecret}@{bucketname}.{endpoint}/{dirname}/';
set hive.mapred.supports.subdirectories=true;
set mapreduce.input.fileinputformat.input.dir.recursive=true;
select get_json_object(logcontent, '$.content') as content from logtable limit 10000;

若使用emr-1.2.x或者emr-1.3.x,其中的Hive版本是2.0.0,使用下面的sql

CREATE EXTERNAL TABLE logtable (logcontent string) stored AS textfile location 'oss://{accesskeyId}: {accesskeysecret}@{bucketname}.{endpoint}/{dirname}/';
set mapreduce.input.fileinputformat.input.dir.recursive=true;
select get_json_object(logcontent, '$.content') as content from logtable limit 10000;

accesskeyId,accesskeysecret就是你的akid,和secret
bucketname是OSS对应的bucket的名字
dirname是投递到OSS的目录,因为设置了遍历所有目录,所以只要写这一级目录就可以了
endpoint的配置可以参考这里
get_json_object就是用来从json格式数据中将content这个key对应的内容取出来使用

接下来我们需要把要使用的字段都解析出来使用,比如UserId,Ip等等,我们使用分隔符|来对日志内容进行分割。
我这里是采用创建了一张新的表,而这张表的对应数据是保存在计算集群的HDFS上的

drop table if exists resulttable;
create table resulttable
  as
  select
    split(get_json_object(logcontent, '$.content'), "\\|")[0] as visit_time,
    split(get_json_object(logcontent, '$.content'), "\\|")[1] as user_id,
    split(get_json_object(logcontent, '$.content'), "\\|")[2] as visit_ip,
    split(get_json_object(logcontent, '$.content'), "\\|")[3] as visit_url
  from logtable;

这张resulttable表就可以作为后续处理的起点,对数据进行各种统计,比如PV,UV等。

第四步 同步数据到Mysql

所有的数据计算完成以后,我们可以把结果同步到Mysql(RDS)中去。
要同步数据,请参考这里 使用Sqoop同步数据

目前同步数据还不是自动化的,后续E-MapReduce会有数据同步的作业支持,在计算完成以后,直接就进行数据同步。敬请期待。

时间: 2024-10-30 17:37:12

使用Hive处理服务器日志的相关文章

五个改善你服务器日志的技术

原文链接,译文链接,译者:梁海舰,校对:方腾飞     最近我们看到各种各样新的工具,能够帮助你搞定日志.开源的项目如Scribe和LogStash,在线的工具如Splunk,托管的服务如Sumologic和PaperTrail.这些工具可以帮你减少大量日志数据. 但是有一个东西它们都无法帮到你,它们都依赖你实际放入日志中的数据.获得更多.更高质量数据的任务就落在你身上了.所以,在关键时刻你需要调试部分代码和丢失的日志数据,你可能要取消晚饭了. 为了减少以上情况发生的次数,我要给你分享5件事情,

基于服务器日志的可视化分析工具

在进行互联网用户浏览行为的定量研究中,阿里巴巴中国站用户研究小组开发了一个基于服务器日志的可视化分析工具(视频). 在进行互联网用户浏览行为的定量研究中,阿里巴巴中国站用户研究小组开发了一个基于服务器日志的可视化分析工具(视频). User Behavior Visualization Analyzer from oldj on Vimeo. 这个分析工具可以通过用户产生的服务器日志数据自动还原出网站结构,并按照页面流量阈值绘制站点地图,并将关键的页面流量数据及其他商业指标进行可视化处理,标注在

Web 服务器日志工具点评

查看记录文件是很乏味的.记录文件令人厌恶,包含了太多的信息,经常使人非常头疼.幸运的是,这些枯燥的工作有代劳者,利用一些日志分析工具,不仅可以利用日志信息进行调试而且可以提供更多的内容.利用它们可以制作出有意义的各种报告.有很多用来分析服务器日志的工具.本文将重点介绍这些工具的和它们的发展方向. 在评估这些软件包之前,先确定你希望用它们来分析的日志类型.虽然大多数日志分析软件不仅仅支持Web服务器日志,但是,本文仅讨论web服务器的日志记录.记录分析软件能够显示从连接到服务器的IP地址到以饼图表

如何让你的Web服务器日志文件更安全

什么是IIS IIS即因特网信息服务,作为当今流行的Web服务器之一,它提供了强大的Internet和Intranet服务功能.因此,现在采用IIS作为Web服务器软件的单位还是很多的.默认情况下,这些服务器必须允许公众访问其资源.但我们发现,许多单位在防御攻击上的时间花费甚至远远多于维护和提供Web服务的时间. IIS安全 不过,这里的攻击静悄悄.除非你单位的Web站点成为毁灭性攻击的受害者,或者受到某种恶意代码的注入,一般来说,黑客会以一种不易觉察的方式攻入你的服务器,这是由于服务器可能收到

用python脚本远程清除sql server数据库服务器日志

python远程清除sqlserver数据库服务器日志,供参考: # coding=gbk from encodings import gbk import re import sys import  os import  pyodbc import traceback import decimal #连接数据库 conn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.43;DATABASE=master;UID=sa;PWD=pa

python操作ssh实现服务器日志下载的方法

  本文实例讲述了python操作ssh实现服务器日志下载的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #coding:utf-8 """ ssh操作例子 实现了服务器日志下载 2012-08-24 yywolf "&qu

数据-服务器日志查询监控功能

问题描述 服务器日志查询监控功能 最近在做一个项目,企业每天大概产生20G左右日志(txt格式,4台服务器分别存储),每次出问题都要远程上服务器通过windows search服务搜索文件内容查日志,维护很繁琐.想开发一个软件来方便维护人员查询日志,有想过将日志存在数据库里,如SQL Server,但是考虑到每天产生的日志量过大,维护更麻烦.所以,请问下,有没有什么方法保存日志,而且能通过软件或者服务来查询? 解决方案 具体要看你什么样的日志,文本文件肯定没有效率,而且你的日志肯定包含大量的冗余

flume-ng实验问题,收集服务器日志的架构

问题描述 flume-ng实验问题,收集服务器日志的架构 我自己搭建了一下,有点问题想请教,谢谢.详情请移步我的日志http://www.aboutyun.com/blog-13274-1798.html 解决方案 参考:http://www.aboutyun.com/thread-6855-1-1.htmlhttp://blog.csdn.net/cuilanbo/article/details/8546925 解决方案二: 有点小复杂 得再查一下看看 解决方案三: 日志看不到,需要加好友

实例解析如何分析服务器日志

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站服务器日志分析对于一个网站具有比较重要的作用,通过分析该日志,我们可以知道搜索引擎爬行记录,这有利于我们针对搜索引擎的习惯进行交换.那么,今天我们便以SEO教程网为例,告诉大家怎么来分析网站日志吧: 1,我们到哪去找服务器日志? 一般我们使用的虚拟机都会有服务器日志,大都在logs文件夹下,如果你的空间没有,那么请联系你的空间服务商,他会