本文从大数据的整体架构出发,分层介绍了不同组件的应用场景。可以对大数据的初学者提供一定的参考。以下为集群架构图:
大数据架构图
该架构自下而上分为3层,分别是数据采集层,数据存储和处理层,应用层。
下面分层介绍下各层组件的大致用法。
1.数据采集层
数据采集分为了实时采集和批量采集,实时采集主要通过Kafka和Spark Streaming,批量采集则用Datax,Sqoop,Shell和Python脚本完成。
1.1 Datax
目前作为我司主流的批量数据同步工具,主要用于一些逻辑简单的单表数据同步,如 Oracle->MySQL, Oracle->HDFS,MySQL->MySQL,MySQL->HDFS,HDFS->MySQL等。
这里的HDFS都是直接写入到了Hive表的存储路径。
1.2 Sqoop
部分很老的脚本仍在使用,如MySQL->Hive, Oracle->MySQL等,已经基本弃用。
1.3 Python脚本
部分人在用,用Python脚本做一些MySQL之间和Oracle和MySQL之间的数据同步。
1.4 Shell脚本
主要做一些复杂逻辑的数据同步。
如:同步的数据是多张MySQL表Join获得的,或者同步来的数据要写入到Hive分区表(通常会结合Datax,将批量数据写入临时表,然后查询临时表,处理分区字段写入到分区表内)。
1.5 Kafka+Spark Streaming的实时同步
这部分一般是客户端/服务端的用户行为数据,一部分是用户客户端自己上报(如用户的点击),一部分是Flume采集的服务器日志,发送到Kafka,这类数据一般都是实时的。通过Kafka的MirrorMaker把数据镜像到分析环境的Kafka,我们就可以用Spark Streaming应用程序消费,然后落地到HDFS,Hbase,ES等。
二、数据存储和处理层
这一层主要是数据的存储和处理,常用的组件有Hive,Hbase,Spark, ES等。
2.1 Hive
作为传统的数仓工具,存储着各个渠道同步过来的数据,同时也是业务分析人员常用的分析工具。一般业务数据会通过批量同步工具导入到Hive表,用户行为数据则会通过实时采集存储到HDFS,然后再洗成Hive表。
2.2 Hbase
主要两种用途,第一,作为实时计算的中间数据存储,第二,用于存储一些快照数据。
Hbase可以与Hive集成,可以有效利用HBase数据库的存储特性,如行更新和列索引等来更新Hive表。不过这种集成执行Hive查询效率极低。需要权衡考虑使用。
2.3 Spark
部分离线应用会使用Hive on Spark,把Spark作为Hive的一个计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算。该方法可以提高Hive查询的性能,同时为已经部署了Hive或者Spark的用户提供了更加灵活的选择。
实时应用则会通过Spark Streaming结合Hbase做一些逻辑计算,然后将实时计算结果传给下游开发人员。
2.4 ES
存储Spark Streaming实时格式化后的数据,主要用于一些客服,运维人员的数据查证。也可以存储APP等的报错数据,用于异常定位。
三、数据应用层
数据应用层主要是各种报表数据支持,分析报告,接口服务,APP数据支持和违规打击等等。
- 报表数据支持和分析报告:主要通过Shell脚本+MySQL+Tableau来实现。Shell脚本做各种数据分析,将结果写入MySQL,Tableau再以MySQL数据作为数据源,进行数据展示。
- 接口服务:主要通过SpringBoot+Hbase组合,开放接口给下游开发人员。
- APP/活动数据支持:主要通过Spark Streaming+Hbase做数据计算,Kafka作为数据传输通道。
- 违规打击:主要通过Spark Streaming+MySQL+Hbase+Kafka实现,MySQL用于存储违规打击的规则,Spark Streaming+Hbase用于玩家违规计算,kafka传输违规玩家数据给下游处罚方。
四、最后
这只是一个最常规的大数据架构,一些组件并没有介绍,如负责脚本调度的azkaban,应用协调的zookeeper,集群资源管理的yarn,用于计算的MapReduce,hadoop的图形化截面hue,权限管理的sentry等等。
此外现在比较火的实时数仓也没有涉及(如ClickHouse,Kudu,Flink等等)。