大数据实战 --- 日志文件

news2024/11/18 21:53:47

目录

开发环境 

数据描述

功能需求

数据准备

分析数据

HBase

HIive

统计查询


开发环境 

Hadoop+Hive+Spark+HBase

启动Hadoop:start-all.sh

启动zookeeper:zkServer.sh start

启动Hive

nohup hiveserver2 1>/dev/null 2>&1 &

beeline -u jdbc:hive2://192.168.152.192:10000

启动Hbase

start-hbase.sh

hbase shell

启动Spark:spark-shell

数据描述

这是一份来自于某在线考试系统的学员答题批改日志,日志中记录了日志生成时间,题目 难度系数,题目所属的知识点 ID,做题的学生 ID,题目 ID 以及作答批改结果。日志的结构如下:

功能需求

数据准备

请在 HDFS 中创建目录/app/data/exam,并将 answer_question.log 传到该目录。

hdfs dfs -mkdir -p  /app/data/exam

hdfs dfs -put ./nswer_question.log  /app/data/exam

分析数据

Spark-Shell 中,加载 HDFS 文件系统 answer_question.log 文件,并使用 RDD 完成 以下分析,也可使用 Spark 的其他方法完成数据分析。

①提取日志中的知识点 ID,学生 ID,题目 ID,作答结果 4 个字段的值

val aq=sc.textFile("/app/data/exam/nswer_question.log")
//方法一
aq.map(x=>{val ar=x.split("_");(ar(1),ar(2),ar(3).split('r')(0),ar(3)
.split("\\s")(1).split(",")(0))})
.foreach(println)
//方法二
aq.map(x=>x.split("\\s+")).map(x=>(x(8).split("_"),x(9)))
.map(x=>(x._1(1),x._1(2),x._1(3).dropRight(1),x._2.split(",")(0)))
.foreach(println)

②将提取后的知识点 ID,学生 ID,题目 ID,作答结果字段的值以文件的形式保存到 HDFS的/app/data/result 目录下。一行保留一条数据,字段间以“\t”分割。(提示:元组可使用 tuple.productIterator.mkString("\t")组合字符串文件格式)如下所示。

aq.map(x=>x.split("\\s+")).map(x=>(x(8).split("_"),x(9)))
.map(x=>(x._1(1),x._1(2),x._1(3).dropRight(1),x._2.split(",")(0))
.productIterator.mkString("\t")).saveAsTextFile("/app/data/result")

HBase

HBase 中创建命名空间(namespace)exam,在该命名空间下创建 analysis 表,使用 学生 ID 作为 RowKey,该表下有 2 个列族 accuracyquestionaccuracy 列族用于保存 学 员 答 题 正 确 率 统 计 数 据 ( 总 分 accuracy:total_score , 答 题 的 试 题 数 accuracy:question_count,正确率 accuracy:accuracy);question 列族用于分类保存学 员正确,错 误和半对的题目 id (正确 question:right,错误 question:error,半对question:half)

hbase(main):001:0> create 'exam:analysis','accuracy','question'

HIive

请在 Hive 中创建数据库 exam,在该数据库中创建外部表 ex_exam_record 指向 /app/data/result 下 Spark 处理后的日志数据 ;创建外部表 ex_exam_anlysis 映射至 HBase中的 analysis 表的 accuracy 列族;创建外部表 ex_exam_question 映射至 HBase 中的analysis 表的 question 列族

 ex_exam_anlysis 表结构如下:

 

ex_exam_record 表

create external table ex_exam_record
(
    topic_id    string,
    student_id  string,
    question_id string,
    score       float
)
    row format delimited fields terminated by "\t"
    stored as textfile location "/app/data/result";

ex_exam_anlysis  表

create external table ex_exam_anlysis
(
    student_id     string,
    total_score    float,
    question_count int,
    accuracy       float
) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    with serdeproperties ("hbase.columns.mapping" =
            ":key,accuracy:total_score,accuracy:question_count,accuracy:accuracy")
    tblproperties ("hbase.table.name" = "exam:analysis");

 ex_exam_question  表

create external table ex_exam_question
(
    student_id string,
    `right`    string,
    half       string,
    error      float
) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    with serdeproperties ("hbase.columns.mapping" =
            ":key,question:`right` ,question:half,question:error")
    tblproperties ("hbase.table.name" = "exam:analysis");

统计查询

使用 ex_exam_record 表中的数据统计每个学员总分、答题的试题数和正确率,并保存 到 ex_exam_anlysis 表中,其中正确率的计算方法如下: 正确率=总分/答题的试题数

insert into ex_exam_anlysis
select student_id,
       sum(score) total_score ,
       count(question_id) question_count,
--        sum(score)/count(question_id) accuracy,
--        round(sum(score) / count(question_id), 2) as accuracy,
       cast((sum(score)/count(question_id)) as decimal(5,2)) as accuracy2
from ex_exam_record group by student_id;

使用 ex_exam_record 表中的数据统计每个作对,做错,半对的题目列表。

①题目 id 以逗号分割,并保存到 ex_exam_question 表中。

方法一:

insert into ex_exam_question
select t1.student_id, t1.`right`, t3.half, t2.error
from (
      (select student_id, concat_ws(",", collect_set(question_id)) as `right`
       from ex_exam_record1
       where score = 1
       group by student_id) as t1
         left join
     (select student_id, concat_ws(",", collect_set(question_id)) as error
      from ex_exam_record1
      where score = 0
      group by student_id) as t2 on t1.student_id = t2.student_id
         left join
     (select student_id, concat_ws(",", collect_set(question_id)) as half
      from ex_exam_record1
      where score = 0.5
      group by student_id) t3 on t1.student_id = t2.student_id);

方法二:

with `right` as (select student_id, concat_ws(",", collect_set(question_id)) as `right`
                 from ex_exam_record1
                 where score = 1
                 group by student_id),
     halt as (select student_id, concat_ws(",", collect_set(question_id)) as half
              from ex_exam_record1
              where score = 0.5
              group by student_id),
     error as (select student_id, concat_ws(",", collect_set(question_id)) as error
               from ex_exam_record1
               where score = 0
               group by student_id)
insert
into ex_exam_question
select `right`.student_id, `right`, half, error
from `right`
         left join halt on `right`.student_id = halt.student_id
         left join error on `right`.student_id = error.student_id

②完成统计后,在 HBase Shell 中遍历 exam:analysis 表并只显示 question 列族中的数据,

如下图所示

hbase(main):014:0> scan 'exam:analysis',{COLUMNS=>'question'}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 图像处理实用指南:1~5

原文:Hands-On Image Processing with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,…

如何恢复回收站中被删除的文件?高效的恢复技巧

一般情况下,我们从电脑上普通删除的文件,会经过回收站(除非文件过大),想要在回收站找回删除的东西,是很简单的,我们只需要打开回收站,找到删除的文件,右键点击并选择还原…

jmeter配置文件

在jmeter安装目录的bin目录下,有多个配置文件 其中最核心的是jmeter.properties jmeter.properties 修改语言:languagezh_CN #简体中文,也可以在GUI页面修改 远程主机配置   # 配置远程主机的 IP,默认为本机。用逗号&q…

反转链表(链表篇)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 思路: ①双指针法 ②递归法 如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。 其实只需要改变链表的next指针的指向,…

Ae:摄像机选项

摄像机选项 Camera Options 快捷键:AA 摄像机选项 Camera Options与“摄像机设置”中的参数大同小异且同步变化,额外增加了一些与镜头模糊和散景光斑形状有关的摄像机属性。 请参阅: 《Ae:摄像机设置》 在合成设置中,选…

“不要放过这个春天”解锁品牌春日宣传新玩法

在万物复苏的春天,人们换新装、踏青等需求蓄势待发,出现了全民消费热情高涨的趋势,让品牌「贩卖春天」的宣传此起彼伏。 品牌洞察到用户的消费需求,打造具有品牌特色的浪漫宣传,如采用春日限定元素、创新春天宣传场景…

[算法总结] 关于字符串类型题你应该知道这些?精心汇总!!

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:算法学习 &am…

50+常用工具函数之xijs更新指南(v1.2.3)

xijs 是一款开箱即用的 js 业务工具库, 聚集于解决业务中遇到的常用的js函数问题, 帮助开发者更高效的进行业务开发. 目前已聚合了50常用工具函数, 接下来就和大家一起分享一下v1.2.3 版本的更新内容. 1. 添加将树结构转换成扁平数组方法 该模块主要由 EasyRo 贡献, 添加内容如…

我用 VSCode 写博客编代码

VSCode(Visual Studio Code)是一款由微软开发且跨平台的免费源代码编辑器。VScode 的扩展功能非常强大,我们可以找到几乎所有开发需要的工具。我用他编辑 Markdown 、php 、html 等,甚至用它集成的终端来完成一些 git 和 linux 命…

一个有意思的404页面

老规矩,先上效果图: 下面代码直接拷过去就能用: <!DOCTYPE html> <html lang="en"> <head>

【Linux】环境变量与进程优先级知识点

目录 环境变量1.基本概念2.常见环境变量3.我们写的程序和命令行指令有什么区别&#xff1f;4.自己的程序为什么要用 ./ 执行&#xff0c;而命令行指令可以直接执行&#xff1f;5.如何追加环境变量&#xff1f;6.Linux如何查看环境变量7.如何在代码层面获取环境变量main函数的参…

Java技术接单介绍

今天给大家介绍一个阶段性&#xff08;周期性&#xff09;能获取一定收益的Java技术接单群&#xff0c;分享给大家&#xff01;主要对搞Java的粉丝有帮助&#xff0c;因为可以赚点小钱&#xff0c;对Java技术的要求不高&#xff01; 那些感兴趣或者想直接加技术群的我给大家讲一…

〖Python网络爬虫实战⑰〗- 网页解析利器parsel实战

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…

奇葩营销之看各品牌如何玩转“营销疯学”

相信有很多人和我一样&#xff0c;最近的快乐都来自于《黑暗荣耀2》。 令人奇怪的是&#xff0c;但比起故事的主线&#xff0c;剧中妍珍等配角的”发疯”片段却成为了网友造梗的来源。 “妍珍疯驴子”“妍珍呐””“黑暗荣耀演我每天精神状态”等。让这部剧话题热度持续…

【LeetCode: 1105. 填充书架 | 暴力递归=>记忆化搜索=>动态规划 | 线性dp 业务限制】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Nuxt3项目从零开始开发

之前讲过Nuxt3项目新建和配置&#xff1a;《Nuxt3从零开始配置与打包发布_nuxt打包发布_范特西_jay的博客-CSDN博客》 本篇文章主要讲解一些nuxt3的基本功能。 Nuxt3官网&#xff1a;https://nuxt.com/docs Nuxt3的官方库&#xff1a;https://nuxt.com/modules 常用的库有&a…

Camtasia Studio2023mac电脑最新屏幕录制编辑工具

作为一个自媒体人&#xff0c;每天都要录制编辑视频&#xff0c;选择一个好的视频编辑工具就是大家首先面临的一个难题&#xff0c;选择一个好工具&#xff0c;可以起到事半功倍的效果&#xff0c;大大提高工作效率。视频编辑非常多&#xff0c;今天给大家推荐的是一款功能强大…

最经典的电脑病毒,适合练手,大家一定要增强安全防范意识

资源地址&#xff1a; 最经典的电脑病毒&#xff0c;坑死自己和别人 大部分都是恶作剧病毒&#xff0c;适合小白练手 感想&#xff1a;病毒种类多种多样&#xff0c;要搞清楚原理&#xff0c;增强安全防范意识啊 示意图&#xff1a; 病毒原理 熊猫烧香病毒会删除扩展名为g…

maven的下载和配置

目录 一、配置核心程序 1、MAVEN下载 2、指定本地仓库 3、配置阿里云提供的镜像仓库 4、配置Maven工程的基础JDK版本 二、配置环境变量 1、检查JAVA_HOME配置是否正确 2、配置MAVEN_HOME 3、配置PATH 4、验证 一、配置核心程序 1、MAVEN下载 官网&#xff1a;https:…

Yolov8 引入CVPR 2023 BiFormer: 基于动态稀疏注意力构建高效金字塔网络架构,对小目标涨点明显

1.BiFormer介绍 论文:https://arxiv.org/pdf/2303.08810.pdf 代码:GitHub - rayleizhu/BiFormer: [CVPR 2023] Official code release of our paper "BiFormer: Vision Transformer with Bi-Level Routing Attention" 背景:注意力机制是Vision Transformer的核心…