三、微服务架构下大数据平台整体技术架构
3.1大数据平台整体技术架构
架构图略
大数据平台的处理过程,分为数据源、数据接入、数据清洗、数据缓存、存储计算、数据服务、数据应用等环节,每个环节都有具有高可用性、可扩展性等特性,都为下一个节点更好的服务打下基础。整个数据流过程都被数据质量监控系统监控,数据异常自动预警、告警。
数据微服务中间件整合各园区数据机房输出的数据分析计算结果,为后面的数据应用微服务提供统一的数据接口。
本架构将大数据计算分为实时计算与离线计算,在整个集群中坚持1个原则,即凡是能实时计算的,一定走实时计算流处理,通过实时计算流来提高数据的时效性及数据价值,同时减轻集群的资源使用率集中现象。
大数据主要技术组件特点:
数据存储和离线计算Hadoop:
Hadoop是大数据行业首选的主流技术框架,是Apache的一线开源软件,作者DougCutting,他也是Lucene的作者,Hadoop作为一个分布式的存储和计算框架,具有分布式、可靠、弹性可伸缩的特点;
目前Yahoo部署有4.2万Hadoop节点,10万CPU,用于广告、用户行为分析、反垃圾邮件等方面;
Facebook部署有台Hadoop节点,1.12万CPU,存储数据量15PB;
百度单集群节点,上万台服务器,存储PB数据;
……
数据采集Flume:
Flume是一种分布式、可靠和可用的服务,用于有效地收集、聚合和移动大量日志数据。
它具有基于流数据流的简单灵活的体系结构。
它具有健壮性和容错性,具有可调的可靠性机制和许多故障转移和恢复机制。
它使用一个简单的可扩展数据模型,支持在线分析应用程序。
Facebook、Twitter等公司通过flume收集日志,然后进入HDFS或者HBase;
Flume最常见的场景如下:
前端有很多flumeagent在收集数据,它们收集的数据都进入kafka的主题,主题是有模式的;
Kafka是一个分布式的流计算框架,它起到了一个数据缓冲的作用,而且吞吐量很大,每秒百万条记录;
Flume前端发来的事件数据,都可以缓存进kafka集群里;
Kafka后面会接一个流计算系统,比如:storm、sparkstreaming;
消息中间件Kafka:
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。
这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。
Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
Kafka同时也是SparkStreaming流式计算默认推荐使用的消息中间件。
特点:
通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
支持通过Kafka服务器和消费机集群来分区消息。
支持Hadoop并行数据加载。
越来越多的开源分布式处理系统如Cloudera、ApacheStorm、Spark、Flink等都支持与Kafka集成。
支持消息持久化,支持低级API自定义偏移量来保证事务性;
集群协调配置、高可用Zookeeper:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
在大数据架构中,Hadoop是根本,其中有hdfs分布式存储、yarn资源调度框架、hive是数据仓库技术、HBase是一种基于Hadoop之上的面向列族的数据库技术,官方的叫法是:10亿行乘以百万列……
所有的这一切都需要一个软件来支撑,就是zookeeper;
ZK是专门用来做分布式的协同服务的,它主要是做配置的,比如hadoop里就有很多配置文件,比如core-site.xml等等,一旦运行起来就会有很多配置信息存在内存里面,一旦节点挂掉,这些配置就找不到了,所以我们在生产环境下运行的时候,就要保证这个节点不存在单点故障问题;
因此作为一个集群来讲,它是轻量级的;所谓轻量级,比如轻量级进程、轻量级容器等,就是它的启动和销毁不需要太多资源。
随机实时大数据存储HBase:
HBase是Hadoop数据库、分布式、可扩展、大数据存储。
当你需要随机、实时的读/写大数据时,使用ApacheHBase。
这个项目的目标是在商品硬件集群上托管非常大的表——数十亿行X数百万列。
ApacheHBase是一个开源的、分布式的、版本化的、非关系型的数据库,模仿了谷歌的Bigtable等结构化数据开发的分布式存储系统。
正如Bigtable利用了谷歌文件系统提供的分布式数据存储,ApacheHBase在Hadoop和HDFS之上提供了类似于Bigtable的功能。
HDFS和HBase对比:
HDFS是存储大文件的分布式文件系统;
HBase是构建于HDFS之上的数据库;
HDFS不支持快速、单个的记录查询;
HBase提供对大表的快速查询;
HDFS提供高延迟的批处理,没有批处理的概念;
HBase提供对数十亿条记录(随机访问)的单个行的低延迟访问。
HDFS只提供数据的顺序访问。
HBase内部使用哈希表并提供随机访问,它将数据存储在索引的HDFS文件中,以便更快地查找。
数据仓库工具Hive:
Hive是在hadoop上处理结构化数据的数据仓库;Hive处理结构化数据,其实数据还是在hdfs上,只是采用了类sql的方式来处理了;
因为大家都会sql,叫一个Java开发人员就会sql,看一眼hive就能上手,因为它跟sql几乎是一模一样;即使不懂底层原理,也一样工作;
所以,很多框架都给出了对sql的支持,就因为学习曲线短;
让一个没有学过hadoop的人写mr来实现hive的效果,很难写出来,而且效率太低;这也是hive大行其道的原因;
Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。
Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。
Hive构建在基于静态批处理的Hadoop之上,Hadoop通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive在几百MB的数据集上执行查询一般有分钟级的时间延迟。
因此,Hive并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。Hive查询操作过程严格遵守HadoopMapReduce的作业执行模型,Hive将用户的HiveQL语句通过解释器转换为MapReduce作业提交到Hadoop集群上,Hadoop监控作业执行过程,然后返回作业执行结果给用户。Hive并非为联机事务处理而设计,Hive并不提供实时的查询和基于行级的数据更新操作。Hive的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。
准实时流(批处理)计算Spark:
大数据改变了世界,spark改变了大数据!
Spark是一个快速的、通用的处理大数据的引擎。
Spark以内存运行时,速度比hadoop的mapreduce要快多倍,以磁盘运行,也要快10多倍;
Spark支持java、scala、python、R和sql开发,有超过80个高层次的操作来使得并行开发更加容易。建议只使用java或scala,spark2.0以后对python的支持不是很好,性能的一些api不支持python。
Spark整合了sql、streaming和复杂分析(机器学习和图计算),安装了一个spark,批处理、实时流、在线分析、离线分析、机器学习、图计算,一把就搞定了。
Spark可以运行在任何地方。
实时流计算Storm:
Storm是一个流计算框架,凡是涉及到流,都是stream,它指的就是动态数据;
离线计算的MR所操作的都是静态数据,不管是几G还是几十个T,它都已经在那里了,我们只需要启动MR,它会去读取文件;
对于周期性的数据,比如每天、每个月,它们都要对一些网站的流量、点击量统计的话,用MR是比较适合的;
要做实时监控,或实时的舆情调查,就不能用hive和mr了,hive是典型的离线计算框架,它的实时性就差,它适合做OLAP,在线分析处理、离线计算,它的实时性不好,所以做不了OLTP;
所以,离线计算用hive是可以的,但是如果要实时的话,很明显不行,因为实时计算要求时效性、延迟要短;
这种实时数据不是静态数据,它是实时不断产生的,就得用流计算系统,也就是Storm;
ApacheStorm是一个免费、开源、分布式、实时计算系统。
Storm使得可靠地处理无边界的数据流变得非常容易,就像Hadoop处理批处理一样,能够实时处理数据流。
Storm很简单,可以与任何编程语言一起使用,而且使用起来很有趣!
Storm有很多用例:实时分析、在线机器学习、连续计算、分布式RPC、ETL等等。
Storm非常快:一个基准测试记录了它在每个节点每秒处理超过一百万元组(tuple)。
它是可伸缩的,容错的,保证您的数据将被处理,并且易于设置和操作。
Storm集成了您已经使用的排队和数据库技术。
Storm拓扑使用数据流,并以任意复杂的方式处理这些流,在计算的每个阶段之间重新划分流(无论需要什么)。