企业日志项目

1. 企业日志项目

项目数据流程图简图

在这里插入图片描述

集群规模

集群环境

FTP 6个

Flume 6个节点

Kafka broker 6个 partition 8个

CDH集群 8个节点 128G内存 32核心 一个服务器磁盘矩阵16块磁盘 每个磁盘500G 8T 8X8 64T

ES集群 8台 64G内存 16核心 一个服务器磁盘矩阵16块磁盘 每个磁盘500G 8T

每天ES存储 500G左右 CDH存储 1T左右

REDIS 单机

万兆网卡 万兆路由 交换机

Spark 资源分配

spark-submit 
--master yarn-cluster   //集群启动
--num-executors 5      	//分配5个进程
--driver-memory 2g  	//每个driver内存 2h
--executor-memory 6G  	//每个进程内存6g
--executor-cores 3      //每个进程开3个核,线程
--jars $(echo /usr/chl/spark1/jars/*.jar | tr ' ' ',') 	//加载jar
--class com.cn.tzproject.spark.streaming.kafka.kafka2es.Kafka2esStreaming /usr/chl/spark1/tz_bigdata_saprk-1.0-SNAPSHOT.jar

2. 数据实时采集阶段

按一天100G的数量量算,单行数据是200字节

(100×1024×1024×1024)/(200×24×60×60)=6,213

大概每秒要处理6200条的数据

自定义flume

  1. 采集数据

    对接ftp服务器来获得数据,自然是对文件夹进行监控,当有新文件生成时就会获得里面的数据

  2. 数据解析,数据清洗,数据标签

    实时数据,在flume阶段就要完成数据的清洗操作,如必要数据的完整性,规范化数据格式,对数据打上标签等等

  3. 文件数据备份

    在flume解析完数据后,要对数据进行

  4. 错误数据处理

    将错误的数据写入es中,包括数据所在的文件名,并不推送错误数据。

kafka

注意点:数据丢失和重复消费,自定义维护offset

kafka作用:对接 flume等等数据采集层 和 spark等等数据处理层,对数据进行缓冲。

保持生产者数据的完整性

ACK机制:ACK机制速度和数据安全性是对立的,

  1. ack=0:kafka仅发送一次数据,不管是否又被消费,提供了最低的延迟,但是最弱的可靠性。
  2. ack=1:kafka需要等待leader确认数据后才放回数据,leader还需要传到follower,如果这一部分leader挂了也会造成数据丢失
  3. ack=-1:kafka需要follwer确认数据是否会被消费,再发送下一个数据

保持消费者数据的完整性

offset使用dirct模式,从rdd中获得,手动来维护offset,并存人redis或者zookeeper
在这里插入图片描述

3. 数据分析阶段

spark streaming阶段:

  1. 结合redis,mysql等等数据,做数据挖掘。
  2. 数据落地到es,hbase,hive等等中。
  3. 尽量避免使用shuffle

es

注意点:mapping的制作

es的优点在于分词搜索以及线上的使用,公司的运营情况,以及图表数据的查询。

hbase

注意点:rowkey的选用和设计,分区,协处理器,二级索引,并发写入

​ hbase的主要作用是做数据整合,将不同部门的数据通过相同的字段如手机号,imsi,imei,phoneMac,userName等数据关联起来的表,在数据量小的情况先用sql数据库中表之间的关联也可以进行,但数据量大了之后就无法做到快速的查询了,使用hbase解决这个问题就是建一张大表,使用一个共同的rowkey来对不同部门的数据进行存储。

​ hbase中如何通过值查询整条数据,hbase只能做等值于Rowkey的查询(使用布隆过滤器对字段的匹配速度太慢无视),使用二级索引的方式来进行对,建立索引表,通过协处理器在数据写入主关联表时同时写入索引表。

在这里插入图片描述

这里对手机号进行了一个倒序是为了hbase的分区设计的。

​ 还有些数据对于主关联表中的rowkey是没有联系的如用户基础数据,如身份证,姓名,性别,手机号等等,但与值如手机号(rowkey可以是任意东西)是有联系的,这就要在spark streaming中就做好数据间的联系。通常用户信息会存储在结构化的sql在数据库中,sql数据库一般无法承受每秒上千条数据的查询的,这是就要将数据缓存到redis等内存数据库中,设计个定时器对将sql数据库中的数据缓存redis,在由spark streaming进行读取数据。
hbase多线程批量写入,hbase在大数据量写入的时候可以使用put一个List的方式来实现,数据量更大的话,就需要多线程来写List了,

  1. 设定每个线程多大的数据量
  2. 计算需要开多少线程,n=(数据量/单个线程最大数据量)向上取余
  3. 创建线程池,运行线程
  4. 使用hbase Client单例客户端来写入数据

hive

注意点:小文件的合并,分区

​ hive的主要使用是作为数据仓库的存储,hive的缺点在于写入和读取都较慢,但能及大量的保存结构化的数据,通常是作为数据的本地存储,以及离线阶段的数据挖掘和数据分析

​ spark streaming写入hive不是直接写入hive,而是创建hive表,写入到hdfs创建的表目录中,并对数据和表进行关联。

小文件合并:

​ hive运算时dataframe的每个partition都会生成一个小文件,

  1. 在streaming第一次写入时进行一次repartition(1),对分区进行合并再写入,这样只会写入一个文件。

    但由于repartition(1)这个操作会引起磁盘间的shuffle,在数据处理速度需要更快时可以取消这步,缩短离线数据整理的时间来对小文件进行整理。

  2. 定时对小文件进行合并,使用一个定时器对hive所在的hdfs目录的小文件进行离线整理,一般每天一次对昨天数据整理,每周或者每月一次对后写的数据进行整理。

  3. 定时监控文件目录,设定阈值,小文件数量或者文件大小,超过阈值时触发合并。

Redis

作为spark streaming和mysql的缓存数据库,流在运行中需要频繁的访问数据库已获得离线部分的信息,对于mysql而言,是做不到的,需要一个内存数据库来定时同步mysql中业务需要的数据,供流来读取。

Mysql

存储业务表,用户表等重要的结构化数据

4. 对外服务层

spring cloud阶段:

  1. 对外提供查询等微服务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值