Hive_基于Hive的网站日志分析

2023-05-16

文章目录

  • 概述
  • 1. 引出需要进行数据预处理的必要性[→](#toc)
  • 2. 使用RegexSerDe处理apache或者ngnix日志文件[→](#toc)
  • 3. 根据不同业务拆表[→](#toc)
      • 3.1 需求分析
      • 3.2 拆表
  • 4. 数据清洗[→](#toc)
      • 4.1 Hive自定义函数的方式
      • 4.2 UDF去除数据双引号
      • 4.3 UDF转换日期时间格式
  • 5. 编写hql分许数据[→](#toc)
      • 5.1 分析用户访问网站的时间段
      • 5.2 分析用户的ip地址
  • 总结

概述

本文将基于Hive数据仓库工具对一份网站日志进行数据分析,包括分析IP地址。包括在插入数据时使用正则表达式对日志文件进行预处理、利用UDF进行数据清洗、使用ORC格式存储和SNAPPY压缩等。

1. 引出需要进行数据预处理的必要性

  • 原日志文件的字段信息统计如下,总共11个字段:
    在这里插入图片描述

  • 日志文件中信息展示:

    "27.38.5.159" 
    "-" 
    "31/Aug/2015:00:04:37 +0800" 
    "GET /course/view.php?id=27 HTTP/1.1" 
    "303" 
    "440" 
    - 
    "http://www.ibeifeng.com/user.php?act=mycourse" 
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" 
    "-" 
    "learn.ibeifeng.com"
    
  • 正常创建表的操作

    // 建表,以空格划分字段
    create table IF NOT EXISTS default.bf_log_src (
    remote_addr string,
    remote_user string,
    time_local string,
    request string,
    status string,
    body_bytes_sent string,
    request_body string,
    http_referer string,
    http_user_agent string,
    http_x_forwarded_for string,
    host string
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
    stored as textfile ;
    // 载入数据
    load data local inpath '/opt/datas/moodle.ibeifeng.access.log' into table bf_log_src ;
    // 查看表结构
    desc formatted bf_log_src;
    // 查询行数
    select count(*) from bf_log_src ;
    // 查看前5行
    select * from  bf_log_src limit 5 ;
    
  • 发现问题
    通过select * from bf_log_src limit 5 ;之后会发现,表里并没有正常显示日志文件里的11个字段的值,而是只有前面8 个字段,后面字段丢失了
    仔细观察日志文件信息,可以发现有些字段中本身存在空格

  • 解决问题
    推荐的解决问题方式是:利用正则表示式过滤。当然,数据预处理也可以借助Python脚本,可以参照基于Python预处理、用Hive对movielens数据集进行分析

2. 使用RegexSerDe处理apache或者ngnix日志文件

  • Apache官网对日志文件的处理示例(示例中的正则表达是有误的)
CREATE TABLE apachelog (
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^]*) ([^]*) ([^]*) (-|\\[^\\]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?"
)
STORED AS TEXTFILE;
  • 只要套用Apache官网的示例,修改正则表达式为自己适用的即可。
  • 本项目的正确建表姿势
drop table if exists default.bf_log_src ;
create table IF NOT EXISTS default.bf_log_src (
remote_addr string,
remote_user string,
time_local string,
request string,
status string,
body_bytes_sent string,
request_body string,
http_referer string,
http_user_agent string,
http_x_forwarded_for string,
host string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "(\"[^ ]*\") (\"-|[^ ]*\") (\"[^\]]*\") (\"[^\"]*\") (\"[0-9]*\") (\"[0-9]*\") (-|[^ ]*) (\"[^ ]*\") (\"[^\"]*\") (-|[^ ]*) (\"[^ ]*\")"
)
STORED AS TEXTFILE;

load data local inpath '/opt/datas/moodle.ibeifeng.access.log' into table default.bf_log_src ;
  • 上文使用到的正则表达式语法
    小括号内看成一个整体
    \代表转义
    |代表或
    ^代表取反
    *代表匹配多个
    .*代表匹配所有的
    [0-9]代表单个数字
    [0-9]*代表0-9之间的多个字符

3. 根据不同业务拆表

3.1 需求分析

  • ip地址
    • 依据ip地址确定区域,定向营销
    • 用户统计,访问某一网站数
  • 访问时间
    • 分析用户访问网站的时间段
    • 针对销售来说,合理安排值班
  • 请求地址
    • 了解用户最关注的产品
    • 定向投放产品
  • 转入链接
    • 关注用户如何访问我们的产品
    • 定向某个区域,进行广告投放

3.2 拆表

drop table if exists default.bf_log_comm ;
create table IF NOT EXISTS default.bf_log_comm (
remote_addr string,
time_local string,
request string,
http_referer string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc tblproperties ("orc.compress"="SNAPPY");
# 最后一行:设置orc存储格式(orc的特点是存储空间小),指定snappy压缩

# 子查询插入数据
insert into table default.bf_log_comm select remote_addr, time_local, request,http_referer from  default.bf_log_src ;

# 查询前5条记录
select * from bf_log_comm limit 5 ;

4. 数据清洗

4.1 Hive自定义函数的方式

  1. maven项目下添加依赖:hadoop-client、hive-exec、hive-jdbc
  2. 继承UDF类:import org.apache.hadoop.hive.ql.exec.UDF;
  3. 实现至少一个evaluate方法,evaluate方法支持重载,并且返回值不允许为void
  4. 写完程序,打jar包上传到Linux系统中(linux有IDE的话,直接在linux上操作)。截图加文字,详细记录IDEA导出jar包的方式
  5. 与jar包进行关联:add jar /opt/datas/udf.jar;
  6. 创建function函数方法:create temporary function my_udf as '包名.BigDataUdf';
  7. SQL里调用该自定义函数

4.2 UDF去除数据双引号

  • show functions; 查看hive中的函数,发现没有适合的去除引号的函数。其实有,但是需要调用不止一个函数进行处理,这样会降低性能,UDF更好,所以说,合理使用UDF也是Hive调优的方式。企业里常常会为Hive定义成千上百个UDF。
  • 综上,通过自定义函数的方式来解决这个问题
  • UDF代码如下:
    package com.bigdata.hive.udf;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    import org.apache.hadoop.io.Text;
    /**
     * 1. Implement one or more methods named "evaluate" which will be called by Hive.
     * 2. "evaluate" should never be a void method. However it can return "null" if needed.
     *
     */
    public class RemoveQuotesUDF extends UDF {
    
        public Text evaluate(Text str){
            // validate
            if(null == str){
                return null ;
            }
            if(null == str.toString()){
                return null ;
            }
    
            // remove
            return new Text (str.toString().replaceAll("\"", ""))  ;
        }
    
        public static void main(String[] args) {
            System.out.println(new RemoveQuotesUDF().evaluate(new Text("\"12\"")));
        }
    }
    
  • 使用UDF,以覆盖的方式插入数据
    # 添加jar
    add jar /opt/datas/jar/hiveUDF.jar ;
    # 创建自定义函数
    create temporary function my_removequotes as "com.bigdata.hive.udf.RemoveQuotesUDF" ;
    # 查看有多少jar
    list jars;
    
    insert overwrite table default.bf_log_comm select my_removequotes(remote_addr), my_removequotes(time_local), my_removequotes(request), my_removequotes(http_referer) from  default.bf_log_src ;
    
    select * from bf_log_comm limit 5 ;
    

4.3 UDF转换日期时间格式

  • 如4.2的模式,编写完程序并上传到linux,add到Hive,create temporary function。
  • 时间转换函数代码:
    package com.bigdata.hive.udf;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    import org.apache.hadoop.io.Text;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    public class DateTransformUDF extends UDF {
    
        // set date format for input and output
        private final SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss",Locale.ENGLISH);
        private final SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    
        public Text evaluate(Text input){
    
            Text output = new Text();
            if(null == input)
                return null;
            String inputDate = input.toString().trim();
            if(inputDate.equals(""))
                return null;
    
            try {
                // parse
                Date parseDate = inputFormat.parse(inputDate);
                // date transform(set format)
                String outputDate = outputFormat.format(parseDate);
                // String to Text
                output.set(outputDate);
            } catch (ParseException e) {
                e.printStackTrace();
                return output;
            }
            return output;
        }
    
        public static void main(String[] args) {
            System.out.println(new DateTransformUDF().evaluate(new Text("31/Aug/2015:00:04:37 +0800")));
        }
    
    }
    
    
  • 覆盖数据
insert overwrite table default.bf_log_comm select my_removequotes(remote_addr), my_datetransform(my_removequotes(time_local)), my_removequotes(request), my_removequotes(http_referer) from  default.bf_log_src ;

select * from bf_log_comm limit 5 ;

5. 编写hql分许数据

5.1 分析用户访问网站的时间段

  • 当前时间字段time_local的值是yyyyMMddHHmmss格式
  • 分析用户访问网站的时间段只需要获取HH(小时)即可
  • 使用Hive提供的函数截取time_local字符串:substring(小标从1开始)
  • 查看函数详细使用方法:desc function extended substring;
    在这里插入图片描述
  • hql:
    select hour, count(hour) cnt from 
    (select substring(time_local, 9, 2) hour from bf_log_comm) t 
    group by hour order by cnt desc;
    
  • 结果分析
    用户一般在下午3点到5点访问网站。

5.2 分析用户的ip地址

  • 只需要根据ip地址的前2段即可获知地域信息,因此只需要查询ip字段的前两段

  • 在国内,前两段最多7位,最少5位,所以可以用substring(remote_addr,1,7)截取字段。当然,也可以用UDF,这里使用UDF。

  • UDF代码如下:

        public Text evaluate(Text input){
            // verify
            if(null == input || null == input.toString()) return null;
    
            Text output = new Text();
            // split by "."
            String[] inputSplit = input.toString().trim().split("\\.");
            // split join
            String outputStr = inputSplit[0]+"."+inputSplit[1];
            // set output
            output.set(outputStr);
            return output;
        }
    
  • hql如下

    add jar /opt/datas/hiveUDF.jar
    create temporary function my_getRegion as 'com.bigdata.hive.udf.GetRegionUDF';
    
    select t.addr, count(addr) cnt from 
    (
    select my_getRegion(remote_addr) addr from  bf_log_comm
    ) t 
    group by t.addr order by cnt desc limit 12;
    

在这里插入图片描述

  • ip对应的地理位置可以放在一张表里,和查询结果join一下–》小表对大表:map join

总结

指对两个字段进行分析,其余两个字段的分析是类似的。学过spark就知道,以上的分析在spark里,只要一行就够了。不过spark只能代替作为查询引擎,却不能代替hive作为大数据仓库工具本身,因此,有必要认真学习。我的博客里有另一篇关于Hive实战的文章,里边的操作和分析会相对复杂些,也会用到sqoop、mysql等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive_基于Hive的网站日志分析 的相关文章

  • 《画解数据结构》九个动图,画解栈

    本文已收录于专栏 画解数据结构 零 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免
  • 《画解数据结构》九张动图,画解队列

    本文已收录于专栏 画解数据结构 零 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免
  • 《画解数据结构》(2 - 1)- 树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免会遇
  • 《画解数据结构》三张动图,画解哈希

    本文已收录于专栏 x1f333 画解数据结构 x1f333 零 前言 目前本专栏正在进行优惠活动 xff0c 在博主主页添加博主好友 xff08 好友位没有满的话 xff09 xff0c 可以获取 付费专栏优惠券 数据结构 和 算法 是密不
  • 《画解数据结构》九张动图,画解顺序表

    本文已收录于专栏 画解数据结构 零 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 这篇文章 作者将用 七张动图 来阐述一种最基础的顺序结构 顺序表 相信看我文章的大多数都是 大学生 能
  • 《画解数据结构》十张动图,画解双端队列

    本文已收录于专栏 画解数据结构 零 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免
  • 《画解数据结构》二十五彩图,画解平衡二叉树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 上一篇文章 二叉搜索树 中 对于 增 删 改 查 的时间复杂度为 O l o g
  • 安装ofsoftswitch13的问题解决

    安装ofsoftswitch13的问题解决 cmake时出现错误 xff0c 是因为前面的库有的没有安装好 xff0c 安装好以后 xff0c 错误消失 根据CPqD ofsoftswitch13 OpenFlow 1 3 switch 给
  • 《画解数据结构》之画解二叉树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免会遇
  • 《画解数据结构》三十张彩图,画解二叉搜索树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 我们知道 顺序表 可以 快速索引 数据 而 链表 则可以快速的进行数据的 插入 和 删除 那么 有没有一种
  • 《画解数据结构》九张图画解二叉堆

    本文已收录于专栏 x1f333 画解数据结构 x1f333 前言 目前本专栏正在进行优惠活动 xff0c 在博主主页添加博主好友 xff08 好友位没有满的话 xff09 xff0c 可以获取 付费专栏优惠券 在之前的文章 二叉搜索树 中
  • 《算法零基础100讲》(第1讲) 幂和对数

    文章目录 零 写在前面 一 概念定义 1 幂 2 对数 3 换底公式 二 题目描述 三 算法详解 四 源码剖析 五 推荐专栏 六 习题练习 零 写在前面 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专
  • 《算法零基础100讲》(第2讲) 数列

    文章目录 零 写在前面 一 概念定义 1 等差数列 2 等比数列 3 斐波那契数列 二 题目描述 三 算法详解 四 源码剖析 五 推荐专栏 六 习题练习 零 写在前面 这是 算法零基础100讲 专栏打卡学习的第 2 天了 如果觉得本专栏太贵
  • 《LeetCode零基础指南》(第九讲) 简单递归

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 递归的含义 2 递归调用阶乘 1 实现一个函数 2 递归出口 3 递推关系 3 为什么叫递归 二 题目分析 1 阶乘尾后零 2 将数字变成 0
  • 《LeetCode零基础指南》(第八讲) 二级指针

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 二级指针 2 解引用 3 力扣中的二级指针 4 内存申请模板 二 题目分析 1 翻转图像 2 转置矩阵 3 重塑矩阵 4 将一维数组转变成二维
  • 《LeetCode零基础指南》(第七讲) 二维数组

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 矩阵的定义 2 矩阵的水平翻转 3 矩阵的垂直翻转 4 矩阵的顺时针旋转 5 矩阵的逆时针旋转 6 矩阵的转置 7 二维数组 8 二维数组的索
  • 《LeetCode零基础指南》(第五讲) 排序API

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 排序简介 2 qsort 简介 3 qsort 调用 4 比较函数 1 函数原型 2 函数定义 3 简化写法 5 更多比较函数 二 题目分析
  • 《LeetCode零基础指南》(第三讲) 一维数组

    文章目录 零 了解网站1 输入输出2 刷题步骤3 尝试编码4 调试提交 一 概念定义1 顺序存储2 存储方式3 长度和容量4 数组的索引5 数组的函数传参 二 题目分析1 数组的查找2 数组的最小值3 斐波那契数列4 绝对值为 k 的数对5
  • js拼字符串,显示在页面上,出现undefined字样处理办法

    首先 xff0c 你需要明白为什么会出现undefined xff0c 这个东西是什么 xff1f undefined是说明你所使用的对象未定义 xff0c 为什么会未定义 xff1f 例如 xff1a var str str 61 str
  • 《LeetCode零基础指南》导读

    文章目录 一 出该专栏的目的 二 本专栏适宜人群 三 本专栏涉及的知识点 四 本专栏收费模式 五 付费玩家专属福利 六 专栏阅读须知 七 配套赠送福利 一 出该专栏的目的 由于之前的 算法零基础100讲 为很多真正零基础的同学造成了困扰 他

随机推荐

  • 《LeetCode零基础指南》(第一讲) 函数

    文章目录 零 了解网站1 输入输出2 刷题步骤3 尝试编码4 调试提交 一 概念定义1 函数简介2 函数的基本概念3 函数的基本结构4 返回类型5 函数名6 参数列表7 函数体8 返回值 二 题目分析1 整数乘法2 整数除法3 次幂函数4
  • 《算法零基础100讲》导读

    文章目录 一 为什么要学算法 二 本专栏适宜人群 三 本专栏涉及的算法 四 本专栏收费模式 五 收费玩家专属福利 六 专栏阅读须知 七 配套赠送福利 一 为什么要学算法 如果你只是想学会写代码 或许 算法与数据结构 并不是那么重要 但是 想
  • 《LeetCode零基础指南》(第二讲) 循环

    文章目录 零 了解网站1 输入输出2 刷题步骤3 尝试编码4 调试提交 一 概念定义1 语法规则2 简单应用3 初始化表达式1 xff09 初始化表达式外置2 xff09 初始化表达式内置 4 条件表达式5 执行表达式 二 题目分析1 2
  • 《LeetCode零基础指南》(第四讲) 指针

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 指针即地址 2 指针的定义 3 定义指针变量 4 取地址 5 数组的地址 6 解引用 7 内存申请 8 返回数组 9 范式 10 概念总结 二
  • 《LeetCode零基础指南》(第六讲) 贪心

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 二 题目分析 1 最大乘积差 2 三角形的最大周长 3 数组拆分 I 4 救生艇 5 摆动排序 II 6 分发饼干 7 最少操作使数组递增 8 有
  • 关于我,一个35岁的老程序员的心路历程

    打工十余年 xff0c 从盛大 网易 电魂 再到字节 xff0c 再到 130w粉 的知识博主 xff0c 我都经历了什么 xff1f 如果你现在正为是否要在 编程行业 深耕下去而头疼 xff0c 那么可以看一下我的故事 xff0c 希望可
  • 【英雄算法联盟】新人指引

    文章目录 一 知识交流1 发布笔记2 阅读笔记1 xff09 搜索栏2 xff09 星球标签 3 自我介绍4 交流群 二 精选专栏1 九日集训2 31天学会算法3 每日八股文 三 学习指导1 向我提问 四 免费资源 欢迎成为 英雄算法联盟
  • 球友的一个帖子,半夜三点给我整睡不着了……

    文章目录 一 起因二 建议1 括号和缩进2 仔细审题3 独立思考4 早起的好办法5 chatgpt会代替人类吗 xff1f 三 解决1 数据结构2 初始化3 判定 一 起因 事情的起因源自于星球里面一位球友的帖子 xff0c 本来三点醒来上
  • 夜深人静写算法(一)- 搜索入门

    新地址 xff1a 夜深人静写算法 xff08 一 xff09 搜索入门
  • FEC功能是什么?有哪些配置注意事项

    一 FEC功能产生的背景 光纤通信的两个重要发展方向是提高传输速率和延长传输距离 随着传输速率的提高 xff0c 信号传输过程中限制传输距离的因素变得更多 xff0c 比如色度色散 非线性效应 偏振模色散等 xff0c 影响两者的同时提升
  • ❤️粉丝专属福利❤️

    粉丝专属福利 语言入门 xff1a 光天化日学C语言 示例代码 语言训练 xff1a C语言入门100例 试用版 数据结构 xff1a 画解数据结构 源码 算法入门 xff1a 算法入门 指引 算法进阶 xff1a 夜深人静写算法 算法模板
  • 夜深人静写算法(四十三)- 线段树

    目录 一 引例 nbsp nbsp nbsp nbsp 1 区间最值 nbsp nbsp nbsp nbsp
  • 夜深人静写算法(九)- Dancing Links X(跳舞链)

    目录 nbsp nbsp 一 引例 nbsp nbsp nbsp nbsp nbsp nbsp 1 买点彩票压压惊 二 精确覆盖 nbsp nbsp nbsp nbsp nbsp nbsp 1 精确覆盖的定义
  • Redis底层详解(一) 哈希表和字典

    一 哈希表概述 首先简单介绍几个概念 xff1a 哈希表 xff08 散列表 xff09 映射 冲突 链地址 哈希函数 哈希表 xff08 Hash table xff09 的初衷是为了将数据映射到数组中的某个位置 xff0c 这样就能够通
  • 格式化日志提取模拟写入Elasticsearch

    1 目标 任务场景和目标 xff1a 已有服务的格式化日志 利用Ingest Pipeline提取通过Simulate Pipeline API模拟写入Elasticesearch 目的是对Pipeline文件进行验证 日志格式如下 xff
  • 小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体

    ros下gazebo搭建小车 xff08 可键盘控制 xff09 安装摄像头仿真 加载yolo检测识别标记物体 目录总览一 xff0c 项目代码下载二 xff0c ros下实现darknet ros YOLO V3 检测2 1 编译整个项目
  • 小车yolo机械臂(三)ROS消息订阅监听 rospy.Subscriber 订阅监听yolo python实现订阅/darknet_ros/bounding_boxes topic

    目录总览 小车yolo机械臂 xff08 一 xff09 ros下gazebo搭建小车 xff08 可键盘控制 xff09 安装摄像头仿真 加载yolo检测识别标记物体 小车yolo机械臂 xff08 二 xff09 机械臂仿真 ros下从
  • ESP32-CAM实现局域网/远程视频传输

    手上这个ESP32 CAM买回来已经放了一个学期了 xff0c 最近才开始玩 xff0c 试了试用它来实现视频传输 局域网的视频传输比较简单 xff0c 基本能正确把例程烧进去就可以了 xff0c 这篇文章主要记录一下远程视频传输的实现 E
  • Debian 9.5  中文输入问题

    刚安装完debian9 5 发现输入法无法切换 xff0c 网页显示不了中文 找设置找不到修改的地方 xff0c 于是上网查教程 一开始按照教程需要安装 xff1a fcitx ui classic xff0c fcitx ui light
  • Hive_基于Hive的网站日志分析

    文章目录 概述1 引出需要进行数据预处理的必要性 toc 2 使用RegexSerDe处理apache或者ngnix日志文件 toc 3 根据不同业务拆表 toc 3 1 需求分析3 2 拆表 4 数据清洗 toc 4 1 Hive自定义函