码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数仓学习笔记(1)——用户行为数据采集


    目录

    一、数据仓库概述

    二、项目需求及架构设计

    1、需求分析

    2、项目框架

    2.1 技术选型

    三、数据生成模块

    1、目标数据

    四、数据采集模块

    1、Kafka

    1.1 Kafka常用命令

    1.2 项目经验之Kafka机器数量计算 

    2、Flume

    2.1 组件选型

    2.2 日志采集Flume配置

    2、消费Kafka数据Flume

    2.1消费者Flume配置

    2.2 Flume时间戳拦截器

    3、常见问题及解决方案

    3.1 2NN不能显示完整信息


    一、数据仓库概述

    二、项目需求及架构设计

    1、需求分析

    2、项目框架

    2.1 技术选型

    三、数据生成模块

    1、目标数据

    我们要收集和分析的数据主要包括页面数据、事件数据、曝光数据、启动数据和错误数据。

    四、数据采集模块

    各类安装及编写脚本这里就不进行过多说明了

    1、Kafka

    1.1 Kafka常用命令

    Kafka Topic列表在Flume安装后再进行创建

    1.2 项目经验之Kafka机器数量计算 

    2、Flume

    2.1 组件选型

    2.2 日志采集Flume配置

    开始的部分安装已经完成,安装的具体内容可以去查看文档,这里不做具体说明,但是要注意要每一个集群的启动顺序,不然貌似无法启动完成

    2、消费Kafka数据Flume

    2.1消费者Flume配置

    文件配置如下:

    1. ## 组件
    2. a1.sources=r1
    3. a1.channels=c1
    4. a1.sinks=k1
    5. ## source1
    6. a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
    7. a1.sources.r1.batchSize = 5000
    8. a1.sources.r1.batchDurationMillis = 2000
    9. a1.sources.r1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092,hadoop104:9092
    10. a1.sources.r1.kafka.topics=topic_log
    11. a1.sources.r1.interceptors = i1
    12. a1.sources.r1.interceptors.i1.type = com.atguigu.flume.interceptor.TimeStampInterceptor$Builder
    13. ## channel1
    14. a1.channels.c1.type = file
    15. a1.channels.c1.checkpointDir = /opt/module/flume/checkpoint/behavior1
    16. a1.channels.c1.dataDirs = /opt/module/flume/data/behavior1/
    17. ## sink1
    18. a1.sinks.k1.type = hdfs
    19. a1.sinks.k1.hdfs.path = /origin_data/gmall/log/topic_log/%Y-%m-%d
    20. a1.sinks.k1.hdfs.filePrefix = log-
    21. a1.sinks.k1.hdfs.round = false
    22. #控制生成的小文件
    23. a1.sinks.k1.hdfs.rollInterval = 10
    24. a1.sinks.k1.hdfs.rollSize = 134217728
    25. a1.sinks.k1.hdfs.rollCount = 0
    26. ## 控制输出文件是原生文件。
    27. a1.sinks.k1.hdfs.fileType = CompressedStream
    28. a1.sinks.k1.hdfs.codeC = lzop
    29. ## 拼装
    30. a1.sources.r1.channels = c1
    31. a1.sinks.k1.channel= c1

    2.2 Flume时间戳拦截器

    由于Flume默认会用Linux系统时间,作为输出到HDFS路径的时间。如果数据是23:59分产生的。Flume消费Kafka里面的数据时,有可能已经是第二天了,那么这部门数据会被发往第二天的HDFS路径。我们希望的是根据日志里面的实际时间,发往HDFS的路径,所以下面拦截器作用是获取日志中的实际时间。

    解决的思路:拦截json日志,通过fastjson框架解析json,获取实际时间ts。将获取的ts时间写入拦截器header头,header的key必须是timestamp,因为Flume框架会根据这个key的值识别为时间,写入到HDFS。

    1. package com.atguigu.flume.interceptor;
    2. import com.alibaba.fastjson.JSONObject;
    3. import org.apache.flume.Context;
    4. import org.apache.flume.Event;
    5. import org.apache.flume.interceptor.Interceptor;
    6. import java.nio.charset.StandardCharsets;
    7. import java.util.ArrayList;
    8. import java.util.List;
    9. import java.util.Map;
    10. public class TimeStampInterceptor implements Interceptor {
    11. private ArrayList events = new ArrayList<>();
    12. @Override
    13. public void initialize() {
    14. }
    15. @Override
    16. public Event intercept(Event event) {
    17. Map headers = event.getHeaders();
    18. String log = new String(event.getBody(), StandardCharsets.UTF_8);
    19. JSONObject jsonObject = JSONObject.parseObject(log);
    20. String ts = jsonObject.getString("ts");
    21. headers.put("timestamp", ts);
    22. return event;
    23. }
    24. @Override
    25. public List intercept(List list) {
    26. events.clear();
    27. for (Event event : list) {
    28. events.add(intercept(event));
    29. }
    30. return events;
    31. }
    32. @Override
    33. public void close() {
    34. }
    35. public static class Builder implements Interceptor.Builder {
    36. @Override
    37. public Interceptor build() {
    38. return new TimeStampInterceptor();
    39. }
    40. @Override
    41. public void configure(Context context) {
    42. }
    43. }
    44. }

    3、常见问题及解决方案

    3.1 2NN不能显示完整信息

    1)问题描述

    访问2NN页面http://hadoop104:9868,看不到详细信息

    2)解决办法

    (1)在浏览器上按F12,查看问题原因。定位bug在61行

    (2)找到要修改的文件

    1. [atguigu@hadoop102 static]$ pwd
    2. /opt/module/hadoop-3.1.3/share/hadoop/hdfs/webapps/static
    3. [atguigu@hadoop102 static]$ vim dfs-dust.js
    4. :set nu
    5. 修改61行
    6. return new Date(Number(v)).toLocaleString();

    (3)分发dfs-dust.js

    [atguigu@hadoop102 static]$ xsync dfs-dust.js

    (4)在http://hadoop104:9868/status.html 页面强制刷新

  • 相关阅读:
    CDH大数据平台 Error: Package: 1:mariadb-devel-5.5.68-1.el7.x86_64 (base)
    分享这几个好用的文字识别软件,教你快速识别
    Java 基础实战—Bank 项目—实验题目
    智能报修系统哪家好?有什么扫码一键报修的软件?
    Linux内核4.14版本——drm框架分析(14)——Atomic KMS 架构(struct drm_atomic_state)
    飞行动力学 - 第25节-特征根与动稳定性 之 基础点摘要
    wangEditor 富文本编辑
    【树莓派不吃灰】基础篇⑲ 搭建usb摄像头MJPG-streamer图片流监控,支持远程视频监控访问
    日本购物网站的网络乞丐功能
    2024-2-22 学习笔记(Yolo-World, Yolov8-OBB,小样本分类,CNN/Transfomer选择)
  • 原文地址:https://blog.csdn.net/qq_64557330/article/details/126231089
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号