大数据平台架构
大数据技术已经被应用到各行各业,涉及人们生活的方方面面。大数据技术大大提高了数据存储和计算能力,从而为企业快速决策提供了数据支撑,能够助力企业改进业务流程、控制成本、提高产品质量,应用大数据技术为企业核心竞争力的提升打下了坚实的基础。
大数据技术在企业项目开发中主要涉及数据采集、数据存储和数据计算三个方面:数据采集是利用采集技术将各种数据源、不同格式的数据快速采集到大数据平台。数据存储是将采集过来的数据,按照不同应用场景,使用不同技术进行存储,为数据计算做准备。数据计算可以根据数据的时效性,对存储的数据进行离线计算和实时计算,最终的计算结果可以为企业决策提供数据支撑。数据采集、数据存储和数据计算这三个方面是大数据工程师的必备技能。
大数据不是一项专门的技术,而是很多技术的综合应用。可以通过一系列大数据技术对海量数据进行分析,挖掘出数据背后的价值。本章将会详细介绍大数据平台架构、大数据工程师的技能树以及大数据项目的需求分析与设计,使读者对大数据的概念及技术有一个整体的认知。
大数据平台架构大致可分为五个层级。
- 顶层为应用层,提供数据服务与可视化,解决企业实际问题。
- 第二层是大数据处理核心,包括数据处理、交互式分析以及机器学习与数据挖掘。
- 第三层是资源调度,为了充分利用系统资源,提高全系统的资源利用率以及增强系统扩展性,需要进行统一的资源管理与调度。
- 第四层是数据存储,如何解决海量数据的读写问题,是实现大数据平台的构建的基础。
- 第五层是数据获取,快速、高效获取到海量信息是大数据的前提。
在大数据时代,数据是第一生产力,因为大数据技术的核心就是从数据中挖掘价值,那么最重要的是要有所需要的数据,而第一步需要做的就是弄清楚有什么样的数据、如何获取数据。在企业运行的过程中,特别是互联网企业,会产生各种各样的数据,如果企业不能正确获取数据或没有获取数据的能力,就无法挖掘出数据中的价值,浪费了宝贵的数据资源。
数据从总体上可以分为结构化数据和非结构化数据。结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。非结构化数据是指数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库的二维逻辑表来表现的数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等。
数据获取
数据总体可分为结构化数据和非结构化数据。结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格遵循数据的字段类型和长度限制,主要通过关系型数据库进行存储和管理。非结构化数据是指数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库的二维逻辑表来表现的数据。
获取数据所使用的技术主要有:使用浏览器探针采集用户浏览器数据;使用爬虫技术获取网页数据;使用sqoop,canal等工具采集数据库的binlog日志;使用组件flume采集web服务器的日志数据。
数据存储
几年来,尽管硬盘容量在不断提升,但是单一硬盘的读写速度远远跟不上cpu和内存的发展。为了加快对获取到的海量信息的读写效率,采用共享硬盘对数据进行并行读取,并由此引出了硬件故障问题。为了避免某一硬盘故障造成数据丢失,通常有三种做法:
- 复制保存数据的副本,一旦发生故障,立即更换成副本硬盘。
- 使用冗余磁盘阵列(raid)进行存储
- hadoop分布式文件系统(HDFS)
数据交换
大数据离线或实时计算项目中经常需要使用kafka消息队列作为实时的数据中专服务,对来源不同(互联网、物联网、数据库的数据等)进行流转达到分享和交换数据的目的。
资源管理与调度
资源管理是为了提高集群资源利用率,解决资源共享问题。
YARN是一种hadoop资源管理器,作为通用的资源管理系统,为上层应用提供统一的资源管理和调度服务,将短作业和长服务混合部署到一个集群中,并为集群在资源在资源利用、资源的统一管理、调度和数据共享等方面带来巨大的好处。
数据处理
数据处理按照执行时间的跨度可以分为:离线处理和实时处理
离线处理(批处理):用于处理复杂的批量数据。
早期离线计算主要使用Mapreduce离线分布式计算框架。通过hive这个数据仓库系统提供丰富hive sql(类sql),经过对hive sql语句进行解析和转换,生成一系列mapreduce任务,再集群上执行这些任务从而完成对数据的处理。
后来出现spark内存计算框架以及flink实时计算框架,简化了代码,提升了执行效率,逐步取代了mapreduce。spark和flink同时也支持离线处理,spark core,spark sql,flink dataset等技术都支持离线计算。
实时计算(流处理):用于处理实时数据流,其特点是数据源源不断实时传输。
Spark是基于内存计算的大数据并行计算框架,除扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。Spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。
spark streaming是构建再spark上的实时计算框架,能够实施对流数据进行实时处理,并且具有很好的可拓展性,高吞吐量和高容错性。
flink是一个开源、分布式、高性能、高可用的大数据处理引擎,可部署在各种集群环境,对各中大小的数据规模进行快速计算。
Datastream是flink提供给用户使用,用于进行流计算和批处理的API,是对底层流式计算模型的api封装。
交互式分析
交互式分析是基于历史数据的交互式查询,常用于实时报表分析、实时大屏、在线话费查询等。随着数据量增大,大数据领域中的交互式查询采用分布式技术,主要基于sql on hadoop(一般指hadoop框架中支持接口的组件和技术),常见的有hive sql,spark sql
机器学习与数据挖掘
机器学习(Machine Learning) 是一门涉及统计学、系统辨识、逼近理论、神经网络、优化理论、计算机科学、脑科学等诸多领域的交叉学科,研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,是人工智能技术的核心。
数据挖掘(Data Mining,DM),是从大量的、有噪声的、不完全的、模糊和随机的数据中,提取出隐含在其中的、人们事先不知道的、具有潜在利用价值的信息和知识的过程。
MLlib(Machine Learnig lib) 是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。