用户行为数据采集平台搭建
用户行为数据会以文件的形式存储在服务器,这个阶段需要考虑:采集用户行为数据使用的工具,需要提供详细的设计需求
如:flume,flume采用的 source、channel、sink以及flume代码的设计
业务数据采集平台搭建
将mysql中的业务数据导入到hive数仓中使用什么工具
如:sqoop的安装、配置、使用
数据仓库的维度建模
数仓建模的分层:Ods原始数据层、dwd数据清洗层、dws以天为单位的轻度聚合层、dwt粗粒度聚合层、ads指标层
分析,设备、会员、商品、地区、活动等电商核心主题,统计的报表主题近100个
对老板关系的指标进行汇总分析
采用即席查询工具,随时进行指标分析
临时查询指标,可以快速查询出想要的结果情况
对集群性能进行监控,发生异常需要报警
如:hadoop某一进程出现了宕机,需要即使的进行报警处理,通过邮件、短信或者钉钉的方式通知开发人员,便于及时解决集群的异常
元数据管理
可以以图形的方式显示任务间的依赖关系,如果某一job的运行过程出现异常,可以通过血缘关系图查看受影响的job,从而挑选出优先级最高的job顺序解决
在没有元数据管理的情况下,查询job间的影响关系。需要通过调度工具的脚本查看调度关系,手动进行查询。不便于数据的管理
数据质量监控
时刻监控近期指标间的差异,如果近期指标差异超过指定数值则通过短信、邮件或钉钉进行报警,让监控人员快速响应处理
如:两天内指标差异超过30%以上通过短信、邮件或钉钉进行报警
权限管理
通过权限管理实现不同权限的用户可以看到不同的表、或者不同权限的用户可以看到某张表中不同的字段
技术选型要考虑的因素
数据量大小: 根据数据量的大小决定使用hdfs存储或者使用mysql存储数据
业务需求: 根据实时数据的计算或者离线数据的计算来选择flink、spark或者hive
行内经验: 根据行业内大厂所使用的技术框架进行技术选型
技术成熟度: 技术的成熟度决定是否使用该技术 如:是否有成熟版本、是否有大厂在生产环境下使用、通常情况下中小型公司都会等待大厂调查成熟后才会使用
开发维护成本: 结合公司情况,选择云服务器和物理服务器。需要考虑的因素有场地、维护人员、维护设备等方面。
总成本预算: 因为项目经理也需要向公司申请资金,或许申请的资金达不到预期金额
数据采集传输
Flume: 日志文件的采集 如:将用户行为数据以json的形式存储在csv文件中,通过flume导入到hdfs中
sqoop: 业务数据的传输 如:将mysql的业务数据导入到hive中
kafka: 缓冲消峰的作用
logstash: 与flume相同,只不过logstash是领英团队开发的与Es、Kibana为一套框架,理论来说elk框架之间的兼容性是最好的。而且ELK主要针对中小型公司或者数据量小的公司分析的指标不是很复杂DataX:
数据存储
Mysql: 存储小量数据,一般会将ads的指标存入mysql中供BI人员展示。
Hdfs: 存储大量数据
Hbase: 很多情况下会与kylin组合使用,kylin会将数据存储到Hbase中
Redis: 基于内存的数据库、存储实时数据
MongoDB: 爬虫数据一般会存储于MongDB中
数据计算
Hive: 数据走MR程序需要落盘所以速度较慢
Tez: 完全在内存中进行计算,内存消耗强但是查询速度快
Spark: 部分数据在内存中、部分数据在磁盘里。相对MR引擎会快
Flink/ Stom: 主要用于实时数据的计算
数据的查询
Presto/Kylin/Impala:通常情况离线查询会选择的框架
Druid/ClickHouse/Doris:实时查询选择的框架
数据可视化
Echarts(开源免费)、
Superset(开源免费)、
QuickBi(ali收费针对离线)、
DataV(ali收费针对实时)、
fineReport(付费与免费版本的区别在于并发访问仅支持2个,以及部分功能的水印)
任务调度
Azkaban(中小型公司的选择、简单实用、上手快框架较轻)、
Oozie(功能多框架重)
DolphinScheduler(丰富的可视化页面)
Airflow(python编写,懂python适合)
集群监控
服务器组件宕机能够及时检测到
Zabbix(离线)、Prometheus(实时)
元数据管理
Atlas(中大公司使用):任务量少只有几十个任务,使用atlas的意义并不大。与手动查看任务的效率区别并不大、
任务量多有成百上千的任务,atlas的意义便会很大、图形化界面通过肉眼查看血缘关系图找到受影响的job,从而挑选出优先级最高的job顺序解决
权限管理
Ranger(主流): 通过权限管理实现不同权限的用户可以看到不同的表、或者不同权限的用户可以看到某张表中不同的字段
具体版本号
在企业中通常会搭建一套生产集群和一套测试集群。生产集群运行生产任务,测试集群用于上线前代码编写和测试。
1)生产集群
(1)消耗内存的分开
(2)数据传输数据比较紧密的放在一起(Kafka 、Zookeeper)
(3)客户端尽量放在一到两台服务器上,方便外部访问
(4)有依赖关系的尽量放到同一台服务器(例如:Hive和Azkaban Executor)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
nn | nn | dn | dn | dn | dn | dn | dn | dn | dn |
rm | rm | nm | nm | nm | nm | nm | nm | ||
nm | nm | ||||||||
zk | zk | zk | |||||||
kafka | kafka | kafka | |||||||
Flume | Flume | flume | |||||||
Hbase | Hbase | Hbase | |||||||
hive | hive | ||||||||
mysql | mysql | ||||||||
spark | spark | ||||||||
Azkaban | Azkaban | ES | ES |
2)测试集群服务器规划
服务名称 | 子服务 | 服务器 | 服务器 | 服务器 |
---|---|---|---|---|
hadoop102 | hadoop103 | hadoop104 | ||
HDFS | NameNode | √ | ||
DataNode | √ | √ | √ | |
SecondaryNameNode | √ | |||
Yarn | NodeManager | √ | √ | √ |
Resourcemanage | √ | |||
Zookeeper | Zookeeper Server | √ | √ | √ |
Flume(采集日志) | Flume | √ | √ | |
Kafka | Kafka | √ | √ | √ |
Flume(消费Kafka) | Flume | √ | ||
Hive | Hive | √ | ||
MySQL | MySQL | √ | ||
Sqoop | Sqoop | √ | ||
Presto | Coordinator | √ | ||
Worker | √ | √ | ||
Azkaban | AzkabanWebServer | √ | ||
AzkabanExecutorServer | √ | |||
Spark | √ | |||
Kylin | √ | |||
HBase | HMaster | √ | ||
HRegionServer | √ | √ | √ | |
Superset | √ | |||
Atlas | √ | |||
Solr | Jar | √ | ||
服务数总计 | 19 | 8 | 8 |