人人都可以,从0到1建立大数据平台

大数据时代这个词被提出已有10年左右了,越来越多的企业已经完成了数字化转型,或在转型中。其普及原因一是因为大数据价值在越来越多的场景中被挖掘,二是因为大数据平台的搭建门槛也越来越低。借助开源的力量,任何有基础研发能力的组织完全可以搭建自己的大数据平台,这里和大家分享0到1搭建方案,以扫盲。

总览

整体大数据平台可以分为存、管、用三部分:
存数据,主要指数据的采集和存储;
管数据,主要指数据仓库内数据模型的搭建和元数据管理;
用数据,主要指使用数据来优化决策是改善用户体验。
我们主要选择Hadoop生态系统为基础,来构建我们的数据平台。

数据流程

如上图所示,从数据源到分析报告或系统应用的过程中,主要包括数据采集同步、数据仓库存储、ETL、统计分析、写入上层DB等环节。这是一条主线,在实际的落地过程中,可能还会有分支的环节出现,比如特征工程。

数据采集

日常的数据来源主要是两块:APP/web访问日志,各业务数据库。这两类数据采集同步到数据仓库的方式有所不同,并且每种数据都分为实时和非实时两种场景。

APP/web访问日志采集

用户访问我们的产品会产生大量的日志,因此我们需要特定的日志采集系统来采集并输送这些日志。Flume是目前常用的开源选择,Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

对于非实时使用的数据,可以通过Flume直接导入到集群的HDFS文件系统中。
而对于要实时使用的数据来说,则可以采用Flume+Kafka的框架。Kafka是一种高吞吐量的分布式发布订阅消息系统,简单来说,可以理解为队列。经过Kafka将数据传递给实时计算引擎进行处理。

业务数据库同步

业务数据库的数据量相比访问日志来说小很多。对于非实时的数据,一般定时导入到HDFS/Hive中。一个常用的工具是sqoop,Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。 而对于实时的数据库同步,可以采用Canal作为中间件,处理数据库日志(如binlog),将其计算后实时同步到大数据平台的数据存储中。

数据存储

无论上层采用何种的大规模数据计算引擎,底层的数据存储系统基本还是以HDFS为主。HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础。具备高容错性、高可靠、高吞吐等特点。

HDFS原理

HDFS存储的是一个个的文本,而我们在做分析统计时,结构化会方便需要。因此,在HDFS的基础上,会使用Hive来将数据文件映射为结构化的表结构,以便后续对数据进行类SQL的查询和管理。

ETL

ETL实际上也是建立维护参考内数据模型的过程。在这个部分,我们需要三样东西:计算引擎、调度系统、元数据管理。

对于大规模的非实时数据计算来讲,目前一样采用Hive和spark引擎。
Hive是基于MapReduce的架构,稳定可靠,但是计算速度较慢;
Spark则是基于内存型的计算,一般认为比MapReduce的速度快很多,但是其对内存性能的要求较高,且存在内存溢出的风险。Spark同时兼容hive数据源。
从稳定的角度考虑,一般建议以Hive作为日常ETL的主要计算引擎,特别是对于一些实时要求不高的数据。Spark等其他引擎根据场景搭配使用。

实时计算引擎方面,目前大体经过了四代,依次是:Java程序处理、storm、spark streaming、Flink。Flink已被阿里收购,目前的社区力量也很猛,非常看好其发展前景。

调度系统上,建议采用轻量级的Azkaban,Azkaban是由Linkedin开源的一个批量工作流任务调度器。https://azkaban.github.io/

元数据管理主要用于管理数据本身,这个一般自己开发系统就行。

Hadoop套件安装

目前已经有成熟的Hadoop的套件,能大大提高平台搭建的便利性,类似python的anaconda。建议采用CDH的版本安装,比独立安装Hadoop各组件方便很多。http://cn.cloudera.com/downloads.html

CDH6.0.1包含组件

如果你打算使用阿里云的服务器,也可以直接选用阿里云的E-MapReduce产品,里面预装了大数据开源生态的一系列组件,目前只收机器的费用比较划算。

报表系统

对于大多数公司来说,最主要的数据应用场景便是数据决策了,其产品载体便是数据报表系统。报表系统涉及几块内容:报表系统框架、权限管理系统、每个报表的前端制作。仅报表系统框架和权限管理系统,就需要前端工程师和产品经理至少投入上月时间来搭建,而且后续报表还需要前端开发的持续投入。

前端资源有限时,初期可以考虑采购成熟的数据可视化系统,这样便于让组织快速看到大数据决策的效果,利于大数据落地。同时这些产品本身商业化也已经比较成熟了,后续若要长期使用也是没问题的。可选择的有开源的R语言shiny拓展、Cboard,国外商业产品比较著名的Tableau,国内的则是帆软等等。

结语

按上面的方案,相信初步搭建起大数据平台是没问题的。
不过这只是开始,后续的平台维护、二次开发、数仓开发、数据价值产出等等才是大数据落地的重要组成,应尽早组建起专业的数据分析和数据工程师团队。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注