数据仓库项目---Day01

文章目录

  • 框架的安装包
  • 数据仓库概念
  • 项目需求及架构设计
    • 项目需求分析
    • 项目框架
      • 技术选型
      • 系统数据流程设计
      • 框架版本选型
      • 集群资源规划设计
  • 数据生成模块
    • 数据埋点
      • 主流埋点方式
      • 埋点数据上报时机
    • 服务器和JDK准备
      • 搭建三台Linux虚拟机(VMWare)
      • 编写集群分发脚本xsync
      • SSH无密登录配置
      • JDK准备
      • 模拟数据
        • 集群日志生成脚本

框架的安装包

链接:https://pan.baidu.com/s/18-WmBBgoTwOyucs-0Rmfew?pwd=4wf9
提取码:4wf9

数据仓库概念

数据仓库( Data Warehouse ),是为企业制定决策,提供数据支持的。可以帮助企业,改进业务流程、提高产品质量等。

数据仓库的输入数据通常包括:业务数据、用户行为数据和爬虫数据

  • 业务数据:就是各行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据。业务数据通常存储在MySQL、Oracle等数据库中。

  • 用户行为数据:用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。

  • 爬虫数据:通常事通过技术手段获取其他公司网站的数据。
    在这里插入图片描述

项目需求及架构设计

项目需求分析

在这里插入图片描述

项目框架

技术选型

技术选型主要考虑因素:数据量大小、业务需求、行业内经验、技术成熟度、开发维护成本、总成本预算

  • 数据采集传输:Flume,Kafka,Sqoop,Logstash,DataX
  • 数据存储:MySQL,HDFS,HBase,Redis,MongoDB
  • 数据计算:Hive,Tez,Spark, Flink, Storm
  • 数据查询:Presto,Kylin,Impala,Druid,ClickHouse,Doris
  • 数据可视化:Echarts,Superset,QuickBI,DataV
  • 任务调度:Azkaban,Oozie,DolphinScheduler,Airflow
  • 集群监控:Zabbix,Prometheus
  • 元数据管理:Atlas
  • 权限管理:Ranger,Sentry

系统数据流程设计

在这里插入图片描述

框架版本选型

1)如何选择Apache/CDH/HDP版本?

(l)Apache:运维麻烦,组件间兼容性需要自己调研。(一般大厂使用,技术实力雄厚,有专业的运维人员)(建议使用)

(2)CDH:国内使用最多的版本,但CM不开源,今年开始收费,一个节点1万美金/年。

(3) HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少

2)云服务选择

(1)阿里云的EMR、MaxCompute、DataWorks

(2)亚马逊云EMR

(3)腾讯云EMR

(4)华为云EMR

Apache框架版本
在这里插入图片描述

集群资源规划设计

通常会搭建一套生产集群和一套测试集群。生产集群运行生产任务,测试集群用于上线前代码编写和测试。

生产集群

  • 消耗内存的分开
  • 数据传输数据比较紧密的放在一起(Kafka 、Zookeeper)
  • 客户端尽量放在一到两台服务器上,方便外部访问
  • 有依赖关系的尽量放到同一台服务器(例如:Hive和Azkaban Executor)

在这里插入图片描述

测试集群服务器规划

服务名称子服务hadoop102hadoop103hadoop104
HDFSNameNode
HDFSDataNode
HDFSSecondaryNameNode
YarnNodeManager
YarnResourcemanager
ZookeeperZookeeper Server
Flume(采集日志)Flume
KafkaKafka
Flume(消费Kafka)Flume
HiveHive
MySQLMySQL
SqoopSqoop
PrestoCoordinator
PrestoWorker
AzkabanAzkabanWebServer
AzkabanAzkabanExecutorServer
Spark
Kylin
HBaseHMaster
HBaseHRegionServer
Superset
Atlas
SolrJar
服务数总计1988

数据生成模块

数据埋点

主流埋点方式

目前主流的埋点方式,有代码埋点(前端/后端)、可视化埋点、全埋点三种

代码埋点是通过调用埋点SDK函数,在需要埋点的业务逻辑功能位置调用接口,上报埋点数据。例如,我们对页面中的某个按钮埋点后,当这个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口,来发送数据。

可视化埋点只需要研发人员集成采集 SDK,不需要写埋点代码,业务人员就可以通过访问分析平台的“圈选”功能,来“圈”出需要对用户行为进行捕捉的控件,并对该事件进行命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。

全埋点是通过在产品中嵌入SDK,前端自动采集页面上的全部用户行为事件,上报埋点数据,相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。

埋点数据上报时机

埋点数据上报时机包括两种方式。

方式一,在离开该页面时,上传在这个页面产生的所有数据(页面、事件、曝光、错误等)。优点,批处理,减少了服务器接收数据压力。缺点,不是特别及时。

方式二,每个事件、动作、错误等,产生后,立即发送。优点,响应及时。缺点,对服务器接收数据压力比较大。

服务器和JDK准备

搭建三台Linux虚拟机(VMWare)

搭建教程

编写集群分发脚本xsync

1)xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析

①rsync命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/

②期望脚本:
xsync要同步的文件名称

③说明:在/home/atguigu/bin这个目录下存放的脚本,yudan用户可以在系统任何地方直接执行。
(3)脚本实现

①在用的家目录/home/yudan下创建bin文件夹

[yudan@hadoop102 ~]$ mkdir bin

②在/home/yudan/bin目录下创建xsync文件,以便全局调用

[yudan@hadoop102 ~]$ cd /home/yudan/bin
[yudan@hadoop102 ~]$ vim xsync

在该文件中编写如下代码

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
doecho ====================  $host  ====================#3. 遍历所有目录,挨个发送for file in $@do#4 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone
done

③修改脚本xsync具有执行权限
[yudan@hadoop102 bin]$ chmod +x xsync
④测试脚本
[yudan@hadoop102 bin]$ xsync xsync

SSH无密登录配置

(1)hadoop102上生成公钥和私钥:

[yudan@hadoop102 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(2)将hadoop102公钥拷贝到要免密登录的目标机器上

[yudan@hadoop102 .ssh]$ ssh-copy-id hadoop102
[yudan@hadoop102 .ssh]$ ssh-copy-id hadoop103
[yudan@hadoop102 .ssh]$ ssh-copy-id hadoop104

(3)hadoop103上生成公钥和私钥:

[yudan@hadoop103 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(4)将hadoop103公钥拷贝到要免密登录的目标机器上

[yudan@hadoop103 .ssh]$ ssh-copy-id hadoop102
[yudan@hadoop103 .ssh]$ ssh-copy-id hadoop103
[yudan@hadoop103 .ssh]$ ssh-copy-id hadoop104

JDK准备

1)卸载现有JDK(3台节点)

[yudan@hadoop102 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[yudan@hadoop103 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[yudan@hadoop104 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

(1)rpm -qa:表示查询所有已经安装的软件包
(2)grep -i:表示过滤时不区分大小写
(3)xargs -n1:表示一次获取上次执行结果的一个值
(4)rpm -e --nodeps:表示卸载软件

2)解压JDK到/opt/module目录下

[yudan@hadoop102 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

3)配置JDK环境变量
(1)新建/etc/profile.d/my_env.sh文件

[yudan@hadoop102 module]# sudo vim /etc/profile.d/my_env.sh

添加如下内容,然后保存(:wq)退出

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

(2)让环境变量生效

[yudan@hadoop102 software]$ source /etc/profile.d/my_env.sh

4)测试JDK是否安装成功

[yudan@hadoop102 module]# java -version

如果能看到以下结果、则Java正常安装
java version “1.8.0_212”
5)分发JDK

[yudan@hadoop102 module]$ xsync /opt/module/jdk1.8.0_212/

6)分发环境变量配置文件

[yudan@hadoop102 module]$ sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh

7)分别在hadoop103、hadoop104上执行source

[yudan@hadoop103 module]$ source /etc/profile.d/my_env.sh
[yudan@hadoop104 module]$ source /etc/profile.d/my_env.sh

模拟数据

1)将application.yml、gmall2020-mock-log-2021-01-22.jar、path.json、logback.xml上传到hadoop102的/opt/module/applog目录下

(1)创建applog路径

[yudan@hadoop102 module]$ mkdir /opt/module/applog

(2)上传文件application.yml到/opt/module/applog目录

2)生成日志
(1)进入到/opt/module/applog路径,执行以下命令

[yudan@hadoop102 applog]$ java -jar gmall2020-mock-log-2021-01-22.jar

(2)在/opt/module/applog/log目录下查看生成日志

[yudan@hadoop102 log]$ ll
集群日志生成脚本

在hadoop102的/home/atguigu目录下创建bin目录,这样脚本可以在服务器的任何目录执行。

[yudan@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/yudan/bin

(1)在/home/atguigu/bin目录下创建脚本lg.sh

[yudan@hadoop102 bin]$ vim lg.sh

(2)在脚本中编写如下内容

#!/bin/bash
for i in hadoop102 hadoop103; doecho "========== $i =========="ssh $i "cd /opt/module/applog/; java -jar gmall2020-mock-log-2021-01-22.jar >/dev/null 2>&1 &"
done 

注:
①/opt/module/applog/为jar包及配置文件所在路径
②/dev/null代表Linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。
标准输入0:从键盘获得输入 /proc/self/fd/0
标准输出1:输出到屏幕(即控制台) /proc/self/fd/1
错误输出2:输出到屏幕(即控制台) /proc/self/fd/2

(3)修改脚本执行权限

[yudan@hadoop102 bin]$ chmod u+x lg.sh

(4)将jar包及配置文件上传至hadoop103的/opt/module/applog/路径

(5)启动脚本

[yudan@hadoop102 module]$ lg.sh 

(6)分别在hadoop102、hadoop103的/opt/module/applog/log目录上查看生成的数据

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

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

相关文章

实现同一份数据的各种镜像

一个数据集通过某个轴(通常是垂直或水平轴)的镜像对称。这可以通过简单的数学运算来实现。 如果想要通过一块数据生成四份,可以通过以下步骤: 下面是一个简单的示例,展示了如何通过垂直轴(左右对称&#…

找不到模块“vue-router”。你的意思是要将 moduleResolution 选项设置为 node,还是要将别名添加到 paths 选项中?

在tsconfig.app.json中添加,记得一定是 tsconfig.app.json 中,如添加到 tsconfig.node.json 还是会报错的 哈哈哈哈,不瞒你们,我就添加错了,哈哈哈。所以这也算写一个demo提醒自己 "compilerOptions": {&qu…

深入理解指针1

目录 如对您有帮助,还望三连支持,谢谢!!! 1.内存和地址 计算机中常⻅的单位(补充): 如何理解编址 2.指针变量和地址 2.1取地址操作符(&) 2.2指针变…

多个开源的js补环境框架测试

原文链接:https://mp.weixin.qq.com/s/uEMFGpE5bqmTvzSgX2twvA 前言 在做js逆向时肯定会遇到补环境的情况,看到github开源了好几个补环境用的框架,这篇文章做个测试,看看哪个比较好用。 https://github.com/pysunday/sdenvhttp…

Spring Boot3.x集成Disruptor4.0

Disruptor介绍 Disruptor是一个高性能内存队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年&…

前端学习|第五章

HTML5&CSS3 新特性 前言HTML5 新特性一、语义化标签二、多媒体标签三、新增 input 类型四、新增表单属性 CSS3 新特性一、新增选择器二、盒子模型三、图片模糊处理四、calc 函数五、过渡 - transition六、2D 转换 - transform七、动画 - animation八、3D 转换 - translate3…

数据库被Elbie勒索病毒加密可以恢复吗?

一、Elbie勒索病毒简介 Elbie勒索病毒是一种严重的网络安全威胁,它通过加密用户文件并索要高额赎金来获取解密密钥。该病毒通常通过电子邮件附件、恶意网站、社交媒体平台以及利用用户网站服务器上的漏洞进行传播。一旦感染,用户的文件将被加密&#xff…

我独自升级崛起下载方法分享 下载教程

《我独自升级:崛起》这款精彩绝伦的动作角色扮演游戏,灵感来源于大热网络漫画,让玩家亲自踏上主角程肖宇的征途,从觉醒初阶到实力飞跃,每一步成长都扣人心弦。值得注意的是,尽管全球正式发布日期定在了五月…

RT-DETR-20240507周更说明|更新Inner-IoU、Focal-IoU、Focaler-IoU等数十种IoU计算方式

RT-DETR改进专栏|包含主干、模块、注意力、损失函数等改进 专栏介绍 本专栏包含模块、卷积、检测头、损失等深度学习前沿改进,目前已有改进点70!每周更新。 20240507更新说明: ⭐⭐ 更新CIoU、DIoU、MDPIoU、GIoU、EIoU、SIoU、ShapeIou、PowerfulIoU、…

分析错误ValueError: could not determine the shape of object type ‘Series‘

这个错误提示 ValueError: could not determine the shape of object type Series 通常发生在尝试将 pandas 的 Series 直接转换为 PyTorch 的 tensor 时,尤其是当 Series 的数据类型不明确或者包含非数值类型的数据时。为了修正这个问题,确保在转换之前…

酷得智能电子方案 早教学习机

早教学习机是用户友好的,易于操作,同时要确保内容的科学性和适宜性,以促进儿童的健康成长和智力发展。 通常包括以下几个方面: 1.年龄分级内容:软件会根据儿童的不同年龄段提供相应的教育内容,从新生儿到…

FastDFS-单机扩容

描述 周一上班收到用户反馈系统异常,紧急排查日志发现报错:FdfsServerException:错误:28,错误信息:没有足够的存储空间。 解决 根据异常信息判断是文件服务器可用内存不够了,首先登录文件服务器,使用df -h命令查看一…

AIGC-3D数字人技术:高效助推各行业数字化水平升级

从“互联网”到“人工智能”,数字员工作为一种全新的交互形式,对企业有着重要的作用,企业、品牌通过数字人的AI语音交互、AI播报等核心功能,可以有效推动企业提升数字水平。 作为3D、AI虚拟数字人技术服务商及方案提供商&#xff…

Cargo - 构建 rust项目、管理依赖包

文章目录 关于 Cargo构建项目创建工程编译运行buildclean 管理依赖添加依赖updatecheck计时 manual rust 安装可参考:https://blog.csdn.net/lovechris00/article/details/124808034 关于 Cargo Cargo 官方文档 : https://doc.rust-lang.org/cargo/crat…

我写了一套几乎无敌的参数校验组件!基于 SpEL 的参数校验组件「SpEL Validator」

前言 大家好,我是阿杆,不是阿轩。 参数校验这个东西,很多情况下都是比较简单的,用 NotNull、Size 等注解就可以解决绝大多数场景,但也有一些场景是这些基本注解解决不了的,只能用一些其他的方式处理&…

OpenCV 入门(三)—— 车牌筛选

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

批量将GOID转成GO term名并添加BP,MF,CC分类信息

基因本体论(Gene Ontology,GO,https://www.geneontology.org)是一个广泛应用于生物信息学领域的知识库,它提供了一套标准化的词汇和分类体系,用于描述基因功能、细胞组分和生物过程。GO旨在统一科研人员对基…

LeetCode刷题记(五):121~150题

121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…

代码审计之某高校通用系统getRequsetURI函数的三次鉴权绕过

前言: 写个随笔,写个代码审计的漏洞案例,该系统为大量高校使用的一个系统。 三次绕过。 正文: 如图所见,系统厂商采用的是利用过滤器的写法进行鉴权 第一次的校验代码: 即requestURI转为小写后&#x…