Coder Social home page Coder Social logo

log_storage_and_proccessing's Introduction

大数据课程设计:用户查询日志的存储与处理

分工:

@blackswords

@zerolhy

一、内容

1、用户查询日志的存储与处理

2、基于大数据计算技术的条件查询

3、时段流量统计

4、用户使用频率统计

5、访问行为统计

二、分析

  1. 数据清洗:载入文本中的日志数据,每行作为一条记录,分为访问时间,用户ID,查询词,返回结果排名,顺序号,URL这六个字段(列),存入HBASE。

  2. HBase条件查询、联合查询:

    • 时间段:输入信息为开始时间和结束时间,用|字符隔开

    • 用户ID:输入信息为一个或多个用户ID,用|字符隔开

    • 搜索词关键字:输入信息为一个或多个关键字,用|字符隔开

    • url访问记录:输入信息为一个或多个关键字,用|字符隔开

    • 以上四个条件的联合查询,使用+号分割条件

  3. 使用Hadoop的MapReduce或Spark的RDD,实现:

    • 基于大数据计算技术的条件查询:使用MapReduce框架或RDD算子,实现类似于HBase的六个字段条件搜索。
    • 时段流量统计:以hh:mm:ss格式输入起始时间和结束时间,统计这段时间之内的总搜索次数、各个查询词搜索次数,各个网站的访问量。
    • 用户使用频率统计:统计每个用户一天内的搜索次数
    • 访问行为统计:根据该页面在搜索结果中的排名(第 4 字段),统计不同排名的结果被访问的情况。

三、环境介绍

开发环境

系统:Windows 10系统

IDE:IntelliJ IDEA Ultimate 2021.1.1

环境:JDK 1.8,Hadoop 3.2.2,HBase 2.3.5,Spark 3.1.2

运行环境

系统:Debian 10(腾讯云)2核4G

环境:JDK 1.8,Hadoop 3.2.2,HBase 2.4.3,Spark 3.1.2

四、设计过程

1、数据清洗

设计思路

数据清洗的设计思路为:读取输入的路径的文件(来自于HDFS),读取文件中的记录,将每条记录分割为六个字段,分别对应访问时间,用户ID,查询词,返回结果排名,顺序号,URL,将读取到的每条记录存入HBase数据库。

考虑到数据的庞大,存入使用批量存入的方式,每次缓存4000条数据再存入,读取结束不足4000条的数据最后插入。

实机演示

image-20220205141621406

image-20220205141626791

image-20220205141642234

每次插入数据数对用时的影响:

4000 5000 6000 12000
用时(ms) 88863 78300 82125 96368

2、数据搜索

设计思路

需要同时满足多个条件的搜索,用到了过滤器,通过“过滤器链”来实现同时对多个条件进行筛选。涉及到条件的交集或是并集的计算。设置过滤器链的属性为MUST_PASS_ALL或MUST_PASS_ONE来控制是同时满足所有的条件还是只需满足其中一个条件。通过添加比较器SubstringComparator来进行子串的匹配。

实机演示

image-20220205141749603

image-20220205141756436

3、RDD功能实现

设计思路

为了实现数据搜索,使用filter函数进行rdd转换,为了实现流量统计、用户行为统计,则使用maptopair函数进行转换。整体转换思路围绕着“读入文件——转换为rdd——执行行动——写为文件”

因为操作较多,使用命令行传参的方式进行行为选择。并对于结果写为文件。

传入四种参数进行使用:

  1. search(eg. 00:00:00 | 00:01:00 + 2982199073774412 + 360 + it.com)

    ​ 用于联合条件查询,查询结果会写在/output/search

  2. flow(eg. 00:00:00 00:01:00)

    用于时段流量统计,结果会写在/output/flow

  3. user

    ​ 用于用户频率统计,结果会写在/output/user

  4. action

    ​ 用于访问行为统计,结果会写在/output/action

实机演示

输入:

/usr/local/spark-3.1.2/bin/spark-submit --class edu.jmu.rdd.SparkDB ~/SparkDB-2.0.jar search 00:00:00 | 00:01:00 + 2982199073774412 + 360 + it.com

输出(部分):

image-20220205141844880

输入:

/usr/local/spark-3.1.2/bin/spark-submit target/LogProccessing-1.0-jar-with-dependencies.jar flow 00:00:00 00:00:01

输出:

对链接统计:

image-20220205141904213

image-20220205141909100

对关键字统计:

image-20220205141926986

image-20220205141932194

输入:

/usr/local/spark-3.1.2/bin/spark-submit target/LogProccessing-1.0-jar-with-dependencies.jar user

输出(部分):

image-20220205141951796

输入:

/usr/local/spark-3.1.2/bin/spark-submit target/LogProccessing-1.0-jar-with-dependencies.jar action

输出(部分):

image-20220205142011126

五、内容

1)数据清洗

a. 获取文件流

class DataFilter {
    // ...
    public static void main(String[] args) {
        //  ...
        FileSystem fsSource = FileSystem.get(
                URI.create("hdfs://localhost:9000"), 
                conf, 
                "root"
        );
        FSDataInputStream out = fsSource.open(new Path(args[0]));
        long time = new Date().getTime();
        int line = 1;
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(out));
        // ...
    }
}

使用FileSystem.get() 方法获取到一个可用的FileSystem 这里用到的hdfs链接和"root",都可以另外作为变量来使用

root字符串的意思是用户名,是具有操作hdfs权限的用户的名字(Linux)

log_storage_and_proccessing's People

Contributors

blankatom avatar

Stargazers

 avatar

Watchers

 avatar  avatar

log_storage_and_proccessing's Issues

数据搜索 2.4

访问行为统计:
根据该页面在搜索结果中的排名(第4字段),统计不同排名的结果被访问的情况。如排名第一的结果被访问次数,排名第二的结果被访问次数……

数据搜索 2.1

基于大数据计算技术的条件查询:使用mapreduce框架或RDD算子,实现类似于HBASE的六个字段条件搜索。

数据清洗

实现一个程序。
从HDFS读取一个文本文件,文本中的存储的是一天的日志数据,每行作为一条记录,分为访问时间,用户ID,查询词,返回结果排名,顺序号,URL这六个字段(列),存入HBASE。
例如:

00:00:00	2982199073774412 	[360安全卫士]	 8 3	download.it.com.cn/softweb/software/firewall/antivirus/20067/17938.html

数据搜索2.3

用户使用频率统计:
统计每个用户一天内的搜索次数

数据搜索 1

使用HBASE的API实现条件查询功能.
例如:“访问时间在1点到2点之间且URL属于百度的网页”等,即能够支持根据六个字段的一个或多个字段内容,使用不同条件(关键字或数值范围)进行联合搜索。具体内容如下:

  1. 根据开始时间和结束时间搜索这段时间内的访问记录。输入信息为开始时间和结束时间,用‘|’字符隔开)
  2. 根据用户ID搜索该用户的访问记录。输入信息为一个或多个用户ID,用‘|’字符隔开 (输入多个用户ID时,要求记录匹配其中任意一个用户的均满足条件)。
  3. 根据关键字搜索含有该关键字的用户查询词记录。输入信息为一个或多个关键字,用‘|’字符隔开 (输入多个关键字时,要求记录匹配其中任意一个关键字的均满足条件)。
  4. 根据关键字(如baidu)等搜索相关网站的URL访问记录,输入信息为一个或多个关键字,用‘|’字符隔开 (输入多个关键字时,要求记录匹配其中任意一个关键字的均满足条件)。
  5. 实现以上四个条件任意组合的联合搜索。四个条件之间用’+’字符隔开 (联合搜索要求所有条件同时满足)
  6. 要求有条件输入界面,用命令行或UI界面均可。

数据搜索 2.2

时段流量统计:
以hh:mm:ss格式输入起始时间和结束时间,统计这段时间之内的总搜索次数、各个查询词搜索次数,各个网站的访问量。其中网站访问量为根据URL统计网站访问,属于同一个网站的URL算在同一个网站上.
如women.sohu.com/20070508/n249762812.shtml,s.sohu.com/20080220/n255256097.shtml,peng.blog.sohu.com等不同的sohu网页都统计为sohu网站的访问次数。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.