解决方案:湖仓一体电商项目(四):项目数据种类与采集

优采云 发布时间: 2022-11-30 20:23

  解决方案:湖仓一体电商项目(四):项目数据种类与采集

  #Headline创作挑战#

  项目数据类型和集合

  实时数据数据

  仓库项目分为两类,一类是业务系统生成的业务数据,存储在MySQL数据库中,另一类是实时用户日志行为数据,即用户登录系统产生的日志数据。

  对于 MySQL 日志数据,我们使用 maxwell 将全量或增量实时采集采集

到大数据平台中,通过 log4j 日志将数据采集

到用户日志数据的目录中,然后通过 Flume 实时同步到大数据平台,整体数据采集思路如下图所示

  ;

  为打造线下+实时湖畔客栈综合数据分析平台,针对MySQL业务数据和用户日志数据,我们暂将其分为会员主题和商品主题。让我们看一下各种主题表。

  1. 我的数据库

  业务数据 1.配置 MySQL 以支持 UTF8 编码

  添加“/

  etc/f“文件,在对应的选项卡下添加如下配置,并将 MySQL 数据库编码格式更改为 utf-8:

  [mysqld]

character-set-server=utf8

[client]

default-character-set = utf8

  修改完成后,重新启动 MySQL。

  2. MySQL数据表

  MySQL 业务数据存储在库 “lakehousedb” 中,该数据库中的业务数据表如下:

  2.1、会员基本信息表:mc_member_info

  ;

  2.2、 会员送货地址表:mc_member_address

  ;

  2.3、用户登录数据表:mc_user_login

  ;

  2.4、商品分类表:pc_product_category

  ;

  2.5、产品基本信息表:pc_product

  ;

  3. MySQL业务数据采集

  我们通过 maxwell 数据同步工具监控 MySQL 二进制日志,将 MySQL 日志数据同步到 Kafka 主题“KAFKA-DB-BUSSINESS-DATA”中,如下所示

  3.1 配置麦克斯韦配置属性文件

  进入node3“/software/maxwell-1.28.2”目录,配置config.properties文件,主要是配置监控mysql日志数据对应的Kafka主题,配置详情如下:

  生产者=kafka kafka.bootstrap.servers=node1:9092,node2:9092,node3:9092 kafka_topic=KAFKA-DB-BUSSINESS-DATA# 设置二进制日志,根据表写入不同的Kafka分区,并指定:数据库,表,primary_key,transaction_id,thread_id,列producer_partition_by=表#mysql节点主机=节点2 #连接mysql用户名和密码 用户=麦克斯韦 密码=麦克斯韦 #指定maxwell 当前与 MySQL 连接的实例 ID, 用于使用 client_id= maxwell_first完全同步表数据

  3.2 启动 kafka,创建 Kafka 主题,监控 Kafka 主题

  启动 Zookeeper 集群和 Kafka 集群,并创建主题“KAFKA-DB-BUSSINESS-DATA”主题:

  #进入Kafka路径,创建对应topic

[root@node1 ~]# cd /software/kafka_2.11-0.11.0.3/bin/

[root@node1 bin]# ./kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181 --create --topic KAFKA-DB-BUSSINESS-DATA --partitions 3 --replication-factor 3

#监控Kafak topic 中的数据

[root@node1 bin]# ./kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic KAFKA-DB-BUSSINESS-DATA

  3.3 启动麦克斯韦

  #在node3节点上启动maxwell

[root@node3 ~]# cd /software/maxwell-1.28.2/bin/

[root@node3 bin]# maxwell --config ../config.properties

  3.4 在MySQL中创建“LakeHouseDB”并导入数据

  #进入mysql ,创建数据库lakehousedb

[root@node2 ~]# mysql -u root -p123456

mysql> create database lakehousedb;

  打开”

  Navicat“工具,将数据中的”lakehousedb.sql“文件导入到MySQL数据库”lakehousedb“中,我们可以看到这些数据会被采集

在对应的kafka主题”KAFKA-DB-BUSSINESS-DATA“中。

  

" />

  ;

  2. 用户日志数据

  1. 用户日志数据目前,用户日志数据

  仅为“会员浏览产品日志数据”,其详情如下:

  {

"logTime": 1646393162044,

"userId": "uid53439497",

"userIp": "216.36.11.233",

"frontProductUrl": "https://fo0z7oZj/rInrtrb/ui",

"browseProductUrl": "https://2/5Rwwx/SqqwwwOUsK4",

"browseProductTpCode": "202",

"browseProductCode": "q6HCcpwfdgfgfxd2I",

"obtainPoints": 16,

}

  参数名称

  参数说明

  日志时间

  浏览日志时间

  用户标识

  用户编号

  用户IP

  浏览 IP 地址

  正面产品网址

  跳转前,URL 地址为空或不为空

  浏览产品网址

  浏览产品网址

  浏览产品分类码

  浏览产品二级类别

  浏览产品代码

  浏览项目 ID

  获取积分

  浏览产品所赚取的积分

  2. 用户日志数据采集

  日志数据采集

  是通过 log4j 日志配置得到的,这里我们编写日志采集接口项目“LogCollector”来采集

用户日志数据。

  当用户

  浏览网站并触发对应接口,日志采集接口根据log4j匹配将用户的浏览信息写入对应目录,然后通过Flume监控对应的日志目录,将用户日志数据采集到Kafka主题“KAFKA-USER-LOG-DATA”中。

  这里我们模拟用户浏览日志数据,并将用户浏览日志数据采集

到Kafka中,具体步骤如下:

  2.1. 打包日志采集接口项目,上传到node5节点

  将日志采集接口项目“LogCollector”项目配置为生产环境产品,打包后上传到node5节点目录/软件。

  2.2 编写 Flume 配置文件 a.属性

  将 a.properties 存储在 node5 节点/软件目录中,文件配置内容如下:

  #设置source名称

a.sources = r1

#设置channel的名称

a.channels = c1

#设置sink的名称

a.sinks = k1

# For each one of the sources, the type is defined

#设置source类型为TAILDIR,监控目录下的文件

#Taildir Source可实时监控目录一批文件,并记录每个文件最新消费位置,agent进程重启后不会有重复消费的问题

a.sources.r1.type = TAILDIR

#文件的组,可以定义多种

a.sources.r1.filegroups = f1

#第一组监控的是对应文件夹中的什么文件:.log文件

a.sources.r1.filegroups.f1 = /software/lakehouselogs/userbrowse/.*log

# The channel can be defined as follows.

#设置source的channel名称

a.sources.r1.channels = c1

<p>

" />

a.sources.r1.max-line-length = 1000000

#a.sources.r1.eventSize = 512000000

# Each channel&#39;s type is defined.

#设置channel的类型

a.channels.c1.type = memory

# Other config values specific to each type of channel(sink or source)

# can be defined as well

# In this case, it specifies the capacity of the memory channel

#设置channel道中最大可以存储的event数量

a.channels.c1.capacity = 1000

#每次最大从source获取或者发送到sink中的数据量

a.channels.c1.transcationCapacity=100

# Each sink&#39;s type must be defined

#设置Kafka*敏*感*词*

a.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink

#设置Kafka的broker地址和端口号

a.sinks.k1.brokerList=node1:9092,node2:9092,node3:9092

#设置Kafka的Topic

a.sinks.k1.topic=KAFKA-USER-LOG-DATA

#设置序列化方式

a.sinks.k1.serializer.class=kafka.serializer.StringEncoder

#Specify the channel the sink should use

#设置sink的channel名称

a.sinks.k1.channel = c1</p>

  2.3. 在 Kafka 中创建相应的主题并监控

  他们

  #进入Kafka路径,创建对应topic

[root@node1 ~]# cd /software/kafka_2.11-0.11.0.3/bin/

[root@node1 bin]# ./kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181 --create --topic KAFKA-USER-LOG-DATA --partitions 3 --replication-factor 3

#监控Kafak topic 中的数据

[root@node1 bin]# ./kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic KAFKA-USER-LOG-DATA

  2.4. 启动日志采集接口

  使用以下命令在 node5 节点上启动日志采集

接口:

  [root@node5 ~]# cd /software/

[root@node5 software]# java -jar ./logcollector-0.0.1-SNAPSHOT.jar

  启动后,根据日志采集接口配置,用户浏览商品日志数据将采集到“/software/lakehouselogs/userbrowse”目录下。

  2.5、启动Flume并监控用户日志数据到Kafka

  在node5节点上启动Flume,并监控用户浏览到Kafka“KAFKA-USER-LOG-DATA”主题的日志数据。

  [root@node5 ~]# cd /software/

[root@node5 software]# flume-ng agent --name a -f /software/a.properties -Dflume.root.logger=INFO,console

  2.6. 启动模拟用户浏览日志代码,从日志中采集

接口生产数据

  开始”

  RTMockUserLogData“代码下的”LakeHouseMockData“项目在本地窗口中浏览商品日志数据给生产用户在日志采集

界面。

  启动代码后,我们将在 Kafka “KAFKA-USER-LOG-DATA” 主题中看到监控的用户日志数据。

  ;

  3. 错误解决

  如果在创建库和表到 MySQL 时遇到以下错误:

  错误 1055 - ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且收录

非聚合列 &#39;information_schema。分析。SEQ&#39;,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容

  以上错误是由 MySQL sql_mode 引起的,对于分组聚合操作,如果 select 中的列没有出现在分组依据中,那么这个 SQL 是不合法的。请按照以下步骤进行处理。

  1. 先停止 MySQL,然后在 MySQL 节点上配置 My.ini 文件

  [root@node2 ~]# service mysqld stop

  打开 /

  etc/f 文件,然后在 mysqld 选项卡下配置以下内容:

  mysqld sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  2. 重启 MySQL 解决问题

  [root@node2 ~]# service mysqld start

  解决方案:网站批量采集器v1.2绿色版

  网站批量采集器v1.2 绿色版

  正常下载

  安全下载

  需要360手机助手

  

" />

  Website Batch Collector是一款类似于优采云

的网页自动采集工具!它的功能包括定时任务、伪原创采集内容、采集图片加水印、批量给图片加水印等,一般站长如果想自动采集网页并发布,那么用他就对了!自带dede织梦5.7和wordpress最新免登录文章发布界面!. 支持utf8和gbk!特别适合做站群的朋友!

  软件说明:

  本软件新开发的版本为测试版,可能存在一些不可避免的bug。欢迎反馈和建议。作者有空会更新!其实这个软件开发的目的就是为了方便。事实上,我以前从未想过要出版它!

  版本:|更新:2013-05-23

  相关文章

  类似推荐

  

" />

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线