什么是大数据?
一般而言,大数据是指数量庞大而复杂,传统的数据处理产品无法在合理的时间内捕获、管理和处理的数据集合。 大数据通常以三个V来表征:
* 数据量的大小(volume)
* 数据类型的多样性(Variety)
* 数据处理和分析的速度(Velocity)
大数据核心技术有哪些?
从大数据的生命周期来看,由四个方面:大数据采集、大数据预处理、大数据存储、大数据分析,共同组成了大数据生命周期里最核心的技术
一、大数据采集
大数据采集,即对各种来源的结构化和非结构化海量数据,所进行的采集。
- 数据库采集
- 网络数据采集
- 文件采集
二、大数据预处理
大数据预处理,指的是在进行数据分析之前,先对采集到的原始数据所进行的诸如“清洗、填补、平滑、合并、规格化、一致性检验”等一系列操作,旨在提高数据质量,为后期分析工作奠定基础。
- 数据清理
- 数据集成
- 数据转换
- 数据规约
三、大数据存储
大数据存储,指用存储器,以数据库的形式,存储采集到的数据的过程,包含三种典型路线:
- 基于MPP架构的新型数据库集群
- 于Hadoop的技术扩展和封装
- 大数据一体机
四、大数据分析挖掘
从可视化分析、数据挖掘算法、预测性分析、语义引擎、数据质量管理等方面,对杂乱无章的数据,进行萃取、提炼和分析的过程。
- 可视化分析
- 数据挖掘算法
- 预测性分析
- 数据质量管理
常见的大数据工具有哪些?
Hadoop (批处理)
是一个能够对大量数据进行分布式处理的软件框架。优点:高可靠,高扩转性,高效性,高容错性,低成本。
- Hadoop HDFS 存储引擎--(分布式文件系统)内存存储持久化
优点:高容错性(数据自动保存,自动恢复),适合批处理,适合大数据处理,成本低
缺点:低延迟数据访问,小文件存取,并发写入,文件随机修改。
- Hadoop MapReduce 离线计算--是一种编程模型,用于大规模数据集(大于1TB)的并行运算
优点:易于编程,良好的扩展性,高容错,适合海量离线数据处理
缺点:不擅长实时计算,不擅长流式计算,不擅长DAG(有向无环图)计算
- Hadoop YARN 作业调度和集群资源管理
优点:解决了单点故障,解决了单点压力过大,完成了资源管理和任务调度解耦。
缺点:扩展性差,可靠性差,资源利用率低,不支持多框架,不支持多种结算并行。
Flink (批处理和流式处理)
Flink即为实时流的分布式处理引擎。优点:流处理特性,高吞吐,低延迟,高性能,操作灵活。
- 支持多种扩展库
- 提供灵活的窗口机制
- 并行的执行任务
- 支持状态存储
- 支持容错机制
- 实现了自己的内存管理机制
Spark (批处理)
专为大规模数据处理而设计的快速通用的计算引擎。优点:更快的速度,易用性,通用性,支持多种资源管理器。
- Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
- Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
Storm (流式处理)
分布式实时大数据处理框架。优点:分布式实时计算,强调实时性,常用于实时性要求较高的地方。
Storm有很多应用:实时分析,在线机器学习(online machine learning),连续计算(continuous computation),分布式远程过程调用(RPC)、ETL等
Flink 和 Spark 对比
这两个数据处理框架有很多相同点。
- 都基于内存计算;
- 都有统一的批处理和流处理APl,都支持类似SQL的编程接口;
- 都支持很多相同的转换操作,编程都是用类似于Scala Collection APl的函数式编程模式;
- 都有完善的错误恢复机制;
- 都支持Exactly once的语义一致性。
当然,它们的不同点也是相当明显,我们可以从4个不同的角度来看。
- 从流处理的角度来讲,Spark基于微批量处理,把流数据看成是一个个小的批处理数据块分别处理,所以延迟性只能做到秒级。而Flink基于每个事件处理,每当有新的数据输入都会立刻处理,是真正的流式计算,支持毫秒级计算。由于相同的原因,Spark只支持基于时间的窗口操作(处理时间或者事件时间),而Flink支持的窗口操作则非常灵活,不仅支持时间窗口,还支持基于数据本身的窗口,开发者可以自由定义想要的窗口操作。
- 从SQL 功能的角度来讲,Spark和Flink分别提供SparkSQL和Table APl提供SQL 交互支持。两者相比较,Spark对SQL支持更好,相应的优化、扩展和性能更好,而Flink在SQL支持方面还有很大提升空间。
- 从迭代计算的角度来讲,Spark对机器学习的支持很好,因为可以在内存中缓存中间计算结果来加速机器学习算法的运行。但是大部分机器学习算法其实是一个有环的数据流,在Spark中,却是用无环图来表示。而Flink支持在运行时间中的有环数据流,从而可以更有效的对机器学习算法进行运算。
- 从相应的生态系统角度来讲,Spark 的社区无疑更加活跃。Spark可以说有着Apache 旗下最多的开源贡献者,而且有很多不同的库来用在不同场景。而Flink由于较新,现阶段的开源社区不如Spark活跃,各种库的功能也不如Spark全面。但是Flink还在不断发展,各种功能也在逐渐完善。
如何选择Spark和Flink
对于以下场景,你可以选择 Spark。
- 数据量非常大而且逻辑复杂的批数据处理,并且对计算效率有较高要求(比如用大数据分析来构建推荐系统进行个性化推荐、广告定点投放等);
- 基于历史数据的交互式查询,要求响应较快;
- 基于实时数据流的数据处理,延迟性要求在在数百毫秒到数秒之间。
Spark完美满足这些场景的需求,而且它可以一站式解决这些问题,无需用别的数据处理平台。由于Flink是为了提升流处理而创建的平台,所以它适用于各种需要非常低延迟(微秒到毫秒级)的实时数据处理场景,比如实时日志报表分析。 而且Flink 用流处理去模拟批处理的思想,比Spark 用批处理去模拟流处理的思想扩展性更好。