Hadoop—20.网站日志分析项目案例(详解)

这篇具有很好参考价值的文章主要介绍了Hadoop—20.网站日志分析项目案例(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、导入数据

1、启动hadoop

2、在hdfs下创建文件夹hadoop_class

3、查询文件夹是否创建成功

 4、在hadoop_class下创建一个文件夹存放总数据

 5、检查是否创建成功

 6、在web_log中创建两个文件分别存放已处理的数据和未处理的数据

7、查看是否创建成功

8、因为日志数据共有两天,所以要在cleaned和unclean中分别创建两个文件夹来存放30和31两天的日志数据

9、 将两份未处理的日志数据分别传入相对应的日期中

二、数据清理

1、创建一个Java项目,项目名字叫web_log

 2、配置Java项目中的pom.xml(注意应该与自己的Java的版本一致,我的Java版本是1.8)

3、配置完成后启动,为了获得配置的包(点击绿色的三角运行)

 4、在Java下创建文件LogParser来编写工具类,用来提取文件中的ip、时间、url、状态、流量

 5、创建文件编写MapReduce

(1)、编写Map

(2)、编写Reduce 

(3)、编写主类

6、双击package进行打包

7、右键target,点击Open in,再点击Explorer

8、将target中的包复制到虚拟机中 

 9、运行jar文件并导入数据

 10、查看是否导入成功

11、 第9步做的是第30 天的,同上现在做第31天的日志数据

三、数据分析 

1、建表装数据

2、将处理好的文件移动到hive_table这个表中,并将文件重命名

3、打开hive

​编辑 4、创建并进入web_log数据库

5、创建外部表

6、检查是否导入

7、 现在就可以查看具体数据,例如查看PV有多少条数据


本次实践的目的就在于通过对apache common日志进行分析,计算一些关键指标。

一、导入数据

进入虚拟机,在桌面点击右键打开终端。

1、启动hadoop

指令:start-all.sh

2、在hdfs下创建文件夹hadoop_class

指令:hdfs dfs -mkdir /hadoop_class

3、查询文件夹是否创建成功

指令:hdfs dfs -ls /

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

 4、在hadoop_class下创建一个文件夹存放总数据

指令:hdfs dfs -mkdir /hadoop_class/web_log

 5、检查是否创建成功

指令:hdfs dfs -ls /hadoop_class

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

 6、在web_log中创建两个文件分别存放已处理的数据和未处理的数据

存放已处理的数据

指令:hdfs dfs -mkdir /hadoop_class/web_log/cleaned

存放未处理的数据 

指令:hdfs dfs -mkdir /hadoop_class/web_log/unclean

7、查看是否创建成功

指令:hdfs dfs -ls /hadoop_class/web_log
 hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

8、因为日志数据共有两天,所以要在cleaned和unclean中分别创建两个文件夹来存放30和31两天的日志数据

cleaned文件夹中

指令: hdfs dfs -mkdir /hadoop_class/web_log/cleaned/2013_05_30

            hdfs dfs -mkdir /hadoop_class/web_log/cleaned/2013_05_31

 unclean文件夹中

指令: hdfs dfs -mkdir /hadoop_class/web_log/unclean/2013_05_30

            hdfs dfs -mkdir /hadoop_class/web_log/unclean/2013_05_31

9、 将两份未处理的日志数据分别传入相对应的日期中

30号

指令:hdfs dfs -copyFromLocal /home/liuxuanting/access_2013_05_30.log /hadoop_class/web_log/unclean/2013_05_30

31号

指令: hdfs dfs -copyFromLocal /home/liuxuanting/access_2013_05_31.log /hadoop_class/web_log/unclean/2013_05_31

数据上传步骤完毕

二、数据清理

使用java清理数据

1、创建一个Java项目,项目名字叫web_log

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreducehadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

 2、配置Java项目中的pom.xml(注意应该与自己的Java的版本一致,我的Java版本是1.8)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>web_log</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.8.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.8.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>2.8.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.8.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-yarn-api -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-yarn-api</artifactId>
            <version>2.8.5</version>
        </dependency>

    </dependencies>
</project>

3、配置完成后启动,为了获得配置的包(点击绿色的三角运行)

 hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

 4、在Java下创建文件LogParser来编写工具类,用来提取文件中的ip、时间、url、状态、流量

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

源代码:

//此代码的作用是将文件中的ip、时间、url、状态、流量分别提取出来

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

class LogParser {
    public static final SimpleDateFormat FORMAT = new SimpleDateFormat(
            "d/MMM/yyyy:HH:mm:ss", Locale.ENGLISH);
    public static final SimpleDateFormat dateformat1 = new SimpleDateFormat(
            "yyyyMMddHHmmss");/**   //将美国的写法(d天、M月、y年、H时、m分、s秒)转换成中国(年月日时分秒)的写法
     * 解析英文时间字符串
     *
     * @param string
     * @return
     * @throws ParseException
     */
    private Date parseDateFormat(String string) {
        Date parse = null;
        try {
            parse = FORMAT.parse(string);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return parse;
    }

    /**
     * 解析日志的行记录
     *
     * @param line
     * @return 数组含有5个元素,分别是ip、时间、url、状态、流量
     */
    public String[] parse(String line) {
        String ip = parseIP(line);
        String time = parseTime(line);
        String url = parseURL(line);
        String status = parseStatus(line);
        String traffic = parseTraffic(line);

        return new String[] { ip, time, url, status, traffic };
    }
//处理字符串,也可以用正则表达式
    private String parseTraffic(String line) {
        final String trim = line.substring(line.lastIndexOf("\"") + 1)
                .trim();
        String traffic = trim.split(" ")[1];
        return traffic;
    }

    private String parseStatus(String line) {
        final String trim = line.substring(line.lastIndexOf("\"") + 1)
                .trim();
        String status = trim.split(" ")[0];
        return status;
    }

    private String parseURL(String line) {
        final int first = line.indexOf("\"");
        final int last = line.lastIndexOf("\"");
        String url = line.substring(first + 1, last);
        return url;
    }

    private String parseTime(String line) {
        final int first = line.indexOf("[");
        final int last = line.indexOf("+0800]");
        String time = line.substring(first + 1, last).trim();
        Date date = parseDateFormat(time);  //转换时间,美国转中国
        return dateformat1.format(date);
    }

    private String parseIP(String line) {
        String ip = line.split("- -")[0].trim();  //这句话的意思是用- -做分隔符,然后取分隔符的左边并去除空白
        return ip;
    }
}

 5、创建文件编写MapReduce

(1)、编写Map

在Java下创建文件MyMapper

源代码:

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

class MyMapper extends
        Mapper<LongWritable, Text, LongWritable, Text> {
    LogParser logParser = new LogParser();
    Text outputValue = new Text();

    protected void map(
            LongWritable key,
            Text value,
            org.apache.hadoop.mapreduce.Mapper<LongWritable, Text, LongWritable, Text>.Context context)
            throws java.io.IOException, InterruptedException {
        final String[] parsed = logParser.parse(value.toString());

        // step1.过滤掉静态资源访问请求
        if (parsed[2].startsWith("GET /static/")
                || parsed[2].startsWith("GET /uc_server")) {
            return;
        }
        // step2.过滤掉开头的指定字符串
        if (parsed[2].startsWith("GET /")) {
            parsed[2] = parsed[2].substring("GET /".length());
        } else if (parsed[2].startsWith("POST /")) {
            parsed[2] = parsed[2].substring("POST /".length());
        }
        // step3.过滤掉结尾的特定字符串
        if (parsed[2].endsWith(" HTTP/1.1")) {
            parsed[2] = parsed[2].substring(0, parsed[2].length()
                    - " HTTP/1.1".length());
        }
        // step4.只写入前三个记录类型项
        outputValue.set(parsed[0] + "\t" + parsed[1] + "\t" + parsed[2]);
        context.write(key, outputValue);
    }
}

(2)、编写Reduce 

在Java下创建文件MyReducer

 源代码:

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

class MyReducer extends
        Reducer<LongWritable, Text, Text, NullWritable> {
    protected void reduce(
            LongWritable k2,
            java.lang.Iterable<Text> v2s,
            org.apache.hadoop.mapreduce.Reducer<LongWritable, Text, Text, NullWritable>.Context context)
            throws java.io.IOException, InterruptedException {
        for (Text v2 : v2s) {
            context.write(v2, NullWritable.get());
        }
    };
}

(3)、编写主类

在Java下创建LogCleanJob

源代码:

import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class LogCleanJob extends Configured implements Tool {

    public static void main(String[] args) {
        Configuration conf = new Configuration();
        try {
            int res = ToolRunner.run(conf, new LogCleanJob(), args);
            System.exit(res);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public int run(String[] args) throws Exception {
        final Job job = new Job(new Configuration(),
                LogCleanJob.class.getSimpleName());
        // 设置为可以打包运行
        job.setJarByClass(LogCleanJob.class);
        FileInputFormat.setInputPaths(job, args[0]);
        job.setMapperClass(MyMapper.class);
        job.setMapOutputKeyClass(LongWritable.class);
        job.setMapOutputValueClass(Text.class);
        job.setReducerClass(MyReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        // 清理已存在的输出文件
        FileSystem fs = FileSystem.get(new URI(args[0]), getConf());
        Path outPath = new Path(args[1]);
        if (fs.exists(outPath)) {
            fs.delete(outPath, true);
        }

        boolean success = job.waitForCompletion(true);
        if(success){
            System.out.println("Clean process success!");
        }
        else{
            System.out.println("Clean process failed!");
        }
        return 0;
    }
}

6、双击package进行打包

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

打好的包均在target中

7、右键target,点击Open in,再点击Explorer

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

8、将target中的包复制到虚拟机中 

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreducehadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

 9、运行jar文件并导入数据

指令:hadoop jar /home/liuxuanting/web_log-1.0-SNAPSHOT.jar LogCleanJob /hadoop_class/web_log/unclean/2013_05_30 /hadoop_class/web_log/cleaned/2013_05_30

 结果有success表示成功:

 hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

 10、查看是否导入成功

(1)、点击虚拟机中的浏览器,输入http://localhost:50070/dfshealth.html

(2)、点击Utilities,再点击Browse the file system

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

(3)、然后按自己所创建的路径寻找

我的最终路径是:http://localhost:50070/explorer.html#/hadoop_class/web_log/cleaned/2013_05_30

成功导入数据结果显示: 

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

11、 第9步做的是第30 天的,同上现在做第31天的日志数据

指令:hadoop jar /home/liuxuanting/web_log-1.0-SNAPSHOT.jar LogCleanJob /hadoop_class/web_log/unclean/2013_05_31 /hadoop_class/web_log/cleaned/2013_05_31

数据清理步骤完毕 

三、数据分析 

1、建表装数据

指令:hdfs dfs -mkdir /hadoop_class/web_log/hive_table

2、将处理好的文件移动到hive_table这个表中,并将文件重命名

30号

指令:hdfs dfs -mv /hadoop_class/web_log/cleaned/2013_05_30/part-1-00000 /hadoop_class/web_log/hive_table/2013_05_30

31号

指令:hdfs dfs -mv /hadoop_class/web_log/cleaned/2013_05_31/part-1-00000 /hadoop_class/web_log/hive_table/2013_05_31

3、打开hive

指令:hive 

 4、创建并进入web_log数据库

创建指令:create database web_log;

进入指令:use web_log;

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

5、创建外部表

指令:CREATE EXTERNAL TABLE techbbs(ip string, atime string, url string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/hadoop_class/web_log/hive_table';

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

6、检查是否导入

指令:select * from techbbs;

数据很多很多,跑很久都不会跑完,若检查已导入进去,按ctrl+c会强制退出,然后再重复3、4步即可。

7、 现在就可以查看具体数据,例如查看PV有多少条数据

指令:SELECT COUNT(1) AS PV FROM techbbs;

结果展示:共计672261条PV数据

hadoop网站日志分析,hadoop,linux,hadoop,大数据,数据分析,hdfs,mapreduce

数据分析步骤完毕文章来源地址https://www.toymoban.com/news/detail-753885.html

到了这里,关于Hadoop—20.网站日志分析项目案例(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spark+Hadoop+Hive+MySQL+Presto+SpringBoot+Echarts】基于大数据技术的用户日志数据分析及可视化平台搭建项目

    点我获取项目数据集及代码 随着我国科学技术水平的不断发展,计算机网络技术的广泛应用,我国已经步入了大数据时代。在大数据背景下,各种繁杂的数据层出不穷,一时难以掌握其基本特征及一般规律,这也给企业的运营数据分析工作增添了不小的难度。在大数据的背景

    2024年02月10日
    浏览(57)
  • 大数据Hadoop教程-学习笔记06【Hadoop生态综合案例:陌陌聊天数据分析】

    视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程,总时长:14:22:04 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g,提取码:6666 【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】 【P018-P037】大数据Hadoop教程-学习笔记02【Apache Hadoop、HDFS】【20p】

    2024年02月02日
    浏览(43)
  • 基于Hadoop的数据分析案例-陌陌聊天软件数据分析

    目录 前言 一、使用的工具 二、操作步骤 1.数据来源 2.数据内容分析  3.加载数据  4.数据清洗ETL  5.数据分析 8.数据可视化 本文章是使用基于Hadoop的数据仓库Hive针对陌陌聊天软件进行数据分析并可视化。 Vmware Workstation Pro Centos 7 64bit FinalShell 3.9.2.2 DataGrip 2020.1 x64 Tableau 2021.

    2024年02月06日
    浏览(42)
  • Hadoop3教程(十七):MapReduce之ReduceJoin案例分析

    现在有两个文件: orders.txt,存放的是订单ID、产品ID、产品数量 pd.txt,这是一个产品码表,存放的是产品ID、产品中文名; 现在是想通过join,来实现这么一个预期输出,即订单ID、产品中文名、产品数量。 以上是本次案例需求。 简单思考一下思路。我们需要将关联条件作为

    2024年02月07日
    浏览(51)
  • Java 操作 Hadoop 集群之 HDFS 的应用案例详解

    注意:本文内容基于 Hadoop 集群搭建完成基础上: Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤 本文的内容是基于下面前提: Hadoop 集群搭建完成并能正常启动和访问 Idea 和 Maven 分别安装完成 需要有 JavaSE 基础和熟悉操作hadoop 的 hdfs dfs 命令 Maven 及 idea 中 Maven 相关配置 本地

    2024年04月16日
    浏览(42)
  • 【Hadoop综合实践】手机卖场大数据综合项目分析

    🚀 本文章实现了基于MapReduce的手机浏览日志分析 🚀 文章简介:主要包含了数据生成部分,数据处理部分,数据存储部分与数据可视化部分 🚀 【本文仅供参考!!非唯一答案】其中需求实现的方式有多种,提供的代码并非唯一写法,选择适合的方式即可。 手机日志分析需

    2024年02月08日
    浏览(42)
  • 【hadoop】汽车销售数据统计分析项目(部分)

    来源:《hadoop大数据开发实战》 实验一:统计乘用车辆和商用车辆的数量和销售额分布 设计思路: 首先,写一个Mapper来映射输出所有乘用车辆(feiyingyun)和商用车辆(yingyun)的记录。 然后,写一个reduce统计出乘用车辆和商用车辆各自的数量,写一个map的映射集合中,其中

    2024年02月09日
    浏览(55)
  • Hadoop3.0大数据处理学习3(MapReduce原理分析、日志归集、序列化机制、Yarn资源调度器)

    前言:如果想知道一堆牌中有多少张红桃,直接的方式是一张张的检查,并数出有多少张红桃。 而MapReduce的方法是,给所有的节点分配这堆牌,让每个节点计算自己手中有几张是红桃,然后将这个数汇总,得到结果。 官方介绍:MapReduce是一种分布式计算模型,由Google提出,

    2024年02月08日
    浏览(54)
  • 加速大规模数据处理和多维分析:基于Lucene和Hadoop的开源项目

    大数据时代带来了处理和分析海量数据的挑战,我很高兴向大家介绍我的个人开源项目:Lucene-Hadoop。这个项目基于Lucene和Hadoop,旨在提供高效的数据存储和查询引擎,加速大规模数据处理和多维分析。 项目介绍 https://github.com/arlixu/lucene-hadoop Lucene-Hadoop利用Lucene和Hadoop的强大

    2024年02月08日
    浏览(40)
  • 大数据综合项目--网站流量日志数据分析系统(详细步骤和代码)

    提示:这里简述我使用的版本情况: ubuntu16.04 hbase1.1.5 hive1.2.1 sqoop1.4.6 flume1.7.0 项目所使用的参考文档和代码资源和部分数据 网盘链接:链接:https://pan.baidu.com/s/1TIKHMBmEFPiOv48pxBKn2w 提取码:0830 为更好的理解项目架构,对项目使用的一些服务补充一些基本概述: 什么是Sqoop

    2023年04月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包