项目一实时数仓数据采集

目录

1. 项目介绍

1.1项目背景

1.2项目需求

 1.3目标

 1.4 二次开发

2. 项目部署

2.1业务数据采集

2.2 导入脚本编写和测试

2.3内容数据采集

2.3.1说明:

 2.3.3 配置管理中心

2.3.4 注册域名

2.4 日志数据采集

2.4.1 nginx服务器的搭建

2.4.2 启动nginx,并测试

2.4.3 配置管理中心

2.4.4 日志切分

2.4.5 编写flume的采集方案

2.4.6 自定义拦截器

2.5 数仓ODS层建模

2.5.1 行为日志数据的ODS层维护

2.5.2 内容数据的ODS层建模

2.5.3 业务数据的ODS层建模

2.6 azkaban管理脚本调度

2.7 钉钉警报系统开发

2.7.1 DingDing SDK的安装

三. Supervisor的应用

3.2设置前台管理进程

3.2.1行为数据的网络穿透的前台进程

3.2.2内容数据的网络穿透的前台进程

3.2.3管理内容数据的采集方案放到前台进程

3.2.4 行为日志数据采集方案

3.2.5 使用supervisord管理prometheus

 3.2.5 使用supervisord管理grafana

4、使用Nginx OPS进行监控

4.1 采集接口监控的指标

4.2 下载安装 nginx-lua-prometheus

 4.3修改core.conf添加nginx lua 库

  4.4编写nginx metric采集配置

4.5 加载metric接口配置

 4.6 metric接口配置到Prometheus

  4.7在Grafana上展示我们配置的数据指标


条件:做这个项目一定要把需要搭建的环境搭建好才能做。这里会涉及到模拟公司内容的业务数据、内容数据、行为数据进行采集。

想有个做项目的环境可以看这篇哦

项目0单节点的虚拟机做大数据开发_林柚晞的博客-CSDN博客

真的没有放过任何一个细节,项目的软件我全部分享出来了。

下面我们开始实时数仓开发吧!

1. 项目介绍

1.1项目背景

该项目的数据的上下文限定(数据范围): 公司C端产品的日志(app、网站、小程序)数据、内容数据、业务数据、元数据(用于描述数据的数据)

1.2项目需求

1)用户行为数据(行为日志)

1. 包括用户启动APP,各页面的浏览,点击,点赞,分享,收藏 广告的点击等行为日志

2. 需要进行客户端埋点:  (这个项目埋点已经做好,只需要设计接口)

2)资讯数据(内容数据)

1. 数据的搜集有两种模式,拉模式和推模式。

2. 数据埋点已经做好,只需要设计接口即可

3)业务数据

该项目只是收集广告相关数据

 1.3目标

1. 针对不同类型的三种数据源设计采集方案,落地到hdfs上

2. 在hdfs上以天为目录存储数据(注意:时间应该以日志里的时间为基准,所以要拦截日志中的时间,设置成目录)

3. 再维护数据仓库的ODS层的hive外部表。 还要对表设计分区(获取数据的脚本,新增分区脚本的设计, 他们之间有依赖关系)

4. 使用azkaban对脚本进行调度,

5. 使用prometheus和grafana监控这些接口指标等

 1.4 二次开发

1. 日志时间的拦截--->自定义拦截器

2. 开发azkaban的警报系统(钉钉报警)

2. 项目部署

2.1业务数据采集

打开navicat

连接->mysql->如下图填写,确定

真实内容:(连接名自定义)

# 只读权限

HOST: mysql.qfbigdata.com

PORT: 3306

USER: qf001

PWD: QF-common1001-###

我们也可以使用sqoop测试一下

sqoop  list-tables \

--connect "jdbc:mysql://mysql.qfbigdata.com:3306/biz" \

--username "qf001" \

--password "QF-common1001-###"

 

2.2 导入脚本编写和测试

mkdir -p /opt/apps/realtime/scripts/

vim /opt/apps/realtime/scripts/news-business-sqoop-start.sh

#!/bin/sh
# filename: news-business-sqoop-start.sh
# desc: 导入mysql业务表 [meta,ad_info]数据到hdfs
# 请写你安装的SQOOP的路径
SQOOP_HOME=/usr/local/sqoop/

MYSQL_CONNECT=jdbc:mysql://mysql.qfbigdata.com:3306/biz
MYSQL_USERNAME=qf001
MYSQL_PWD=QF-common1001-###


# 定义一个日期参数,如果指定日期,就导入该日期前一天的数据,否则默认为昨日数据
exec_date=$1
if [  "${exec_date}" ] ;then
	exec_date=`date -d "${exec_date} 1 days ago" +%Y%m%d`
else 
	exec_date=`date -d "1 days ago" +%Y%m%d`
fi 

echo " news-business-sqoop-start.sh exce date: ${exec_date}"

SQL_DATE=`date -d "${exec_date} 1 days" +%Y-%m-%d` 

# ad_info表数据

# --split-by 列作为并行导入时的分隔列
# -m 3个并行度
# $CONDITIONS SQOOP执行SQL查询时,会加上 1=0 先去验证SQL语法是否正确如果正确,真执行的时候会变成 1=1
${SQOOP_HOME}/bin/sqoop import \
--connect ${MYSQL_CONNECT}  \
--username ${MYSQL_USERNAME} \
--password ${MYSQL_PWD}  \
-e "select  id ,cast(ad_id as char(50)) as ad_id,cast(advertiser_id as char(50)) as advertiser_id,advertiser_name,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s')as create_time from ad_info where 1=1 and create_time<='${SQL_DATE} 00:00:00'  AND \$CONDITIONS" \
--split-by id \
--target-dir /collection/news_business/ad_info/${exec_date} \
--delete-target-dir \
-m 3

# meta 表数据
${SQOOP_HOME}/bin/sqoop import \
--connect ${MYSQL_CONNECT}  \
--username ${MYSQL_USERNAME} \
--password ${MYSQL_PWD}  \
-e "select id,field,field_type,field_desc,app_version,cast(status as char(50)) as status,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s')as create_time from meta where 1=1 and create_time<='${SQL_DATE} 00:00:00'  AND \$CONDITIONS" \
--split-by id \
--target-dir /collection/news_business/meta/${exec_date} \
--delete-target-dir \
-m 2



 上面的脚本的功能:

  1. 加载sqoop 和mysql
  2. 定义一个日期函数,为了导入昨天的数据
  3. 对查询中的ad_info表并行导入,以及执行sql语句
  4. 对meta表进行查询

 修改权限:

[root@qianfeng01 scripts]# chmod u+x /opt/apps/realtime/scripts/news-business-sqoop-start.sh

运行

# 导入昨天的数据

[root@qianfeng01 scripts]# ./news-business-sqoop-start.sh

# 导入指定时间的前一天的数据

[root@qianfeng01 scripts]# ./news-business-sqoop-start.sh 2022-03-26

2.3内容数据采集

2.3.1说明:

1. 我们可以使用flume的http Source作为接口,采集新闻咨询这类的内容数据

2. 北京服务器是向远程地址的9666端口发送的数据,因此采集方案中要使用9666

2.3.2采集方案的编写和测试

vim /opt/apps/realtime/scripts/news-article-flume-http.properties

# filename: news-article-flume-http.properties
# 定义一个名字为 b1001 的agent 以及三大核心组件的名字,并关联
b1001.channels = ch-1
b1001.sources = src-1
b1001.sinks = k1
b1001.sinks.k1.channel = ch-1
b1001.sources.src-1.channels = ch-1

# 设置source的相关属性
b1001.sources.src-1.type = http
b1001.sources.src-1.bind=0.0.0.0
b1001.sources.src-1.port=9666

# 设置channel的相关属性
b1001.channels.ch-1.type = memory
b1001.channels.ch-1.capacity = 10000
b1001.channels.ch-1.transactionCapacity = 100


#设置sink的相关属性
b1001.sinks.k1.type = hdfs
b1001.sinks.k1.hdfs.path = hdfs://qianfeng01:8020/collection/news_article/%Y%m%d
b1001.sinks.k1.hdfs.filePrefix = news-%Y%m%d_%H
b1001.sinks.k1.hdfs.fileSuffix = .gz
b1001.sinks.k1.hdfs.codeC = gzip
b1001.sinks.k1.hdfs.useLocalTimeStamp = true
b1001.sinks.k1.hdfs.writeFormat = Text
b1001.sinks.k1.hdfs.fileType = CompressedStream
# 禁用按照event条数来滚动生成文件
b1001.sinks.k1.hdfs.rollCount = 0
# 如果一个文件达到10M滚动
b1001.sinks.k1.hdfs.rollSize = 10485760
# 1分钟滚动生成新文件,和文件大小的滚动一起,那个先达到,执行那个
b1001.sinks.k1.hdfs.rollInterval = 60
# 参加上边连接官网说明,理论上batchSize 越大,吞吐越高。 但是HDFS Sink 调用 Hadoop RPC(包括 open、flush、close ..)超时会抛出异常,如果发生在 flush 数据阶段,部分 event 可能已写入 HDFS,事务回滚后当前 BatchSize 的 event 还会再次写入造成数据重复。 batchSize越大可能重复的数据就越多. 同时batchSize值,不能大于channel的transactionCapacity值
b1001.sinks.k1.hdfs.batchSize = 100
# 每个HDFS S
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值