大数据技术栈
Hadoop 历史:
https://www.jikexueyuan.com/course/677_1.html?ss=1
1. Google大数据与Hadoop对比
功能 | Hadoop | |
---|---|---|
存储 | GFS | HDFS |
计算 | MapReduce | MapReduce |
查询 | BigTable | HBase |
2. 大数据分类
2.1 根据数据类型分类
2.1.1 结构化数据
能够用数据或统一的结构加以表示,人们称之为结构化数据,如数字、符号。传统的关系数据模型,行数据,存储于数据库,可用二维表结构表示。
2.1.2 半结构化数据
所谓半结构化数据,就是介于完全结构化数据(如关系型数据库,面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,XML、HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。
2.1.3 非结构化数据
非结构化数据库是指其字段长度可变,并且每隔字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本,图像,声音,影视,超媒体等信息)。
参考链接:
2.2 根据处理时间跨度要求分类
2.2.1 流式大数据
基于实时数据流的处理,通常的时间跨度在数百毫秒到数秒之间
流式(streaming)大数据,又被称为实时大数据。
流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下,数据流可被视为一个随时间延续而无限增长的动态数据集合。应用于网络监控、传感器网络、航空航天、气象测控和金融服务等领域。
2.2.1.1 流处理
流是一种数据传送技术,它把客户端数据变成一个稳定的流。正是由于数据传送呈现连续不停的形态,所以流引擎需要连续不断处理数据
流处理的主要应用场景:金融领域和电信领域
流处理系统会对随时进入系统的数据进行计算。相比批处理模式,这是一种截然不同的处理方式。流处理方式无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作。
2.2.2 批式大数据
复杂的批量数据处理,通常的时间跨度在几分钟到数小时之间
批式(batch)大数据,又被称为历史大数据。
2.2.2.1 批处理
批处理主要操作大容量静态数据集,并在计算过程完成后返回结果。
3. 大数据技术产品
3.1 流处理大数据技术
Storm、Spark Streaming、Flink 这类的大数据技术是针对实时的数据进行计算,比如摄像头实时采集的数据、实时的订单数据等,数据实时流动进来,所以也叫流处理大数据技术。
3.1.1 Apache Storm
Apache Storm 的前身是 Twitter Storm 平台,目前已经归于 Apache 基金会管辖。
Apache Storm 是一个免费开源的分布式实时计算系统。简化了流数据的可靠处理,像 Hadoop 一样实现实时批处理。Storm 很简单,可用于任意编程语言。Apache Storm 采用 Clojure 开发。
Storm 有很多应用场景,包括实时数据分析、联机学习、持续计算、分布式 RPC、ETL 等。Storm 速度非常快,一个测试在单节点上实现每秒一百万的组处理。
3.1.2 Spark Streaming
Spark Streaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。
Spark Streaming的基本原理是将输入数据流以时间片(秒级)为单位进行拆分,然后以类似批处理的方式处理每个时间片数据
3.1.3 Apache Flink
Apache Flink是一种可以处理批处理任务的流处理框架。该技术可将批处理数据视作具备有限边界的数据流,借此将批处理任务作为流处理的子集加以处理。为所有处理任务采取流处理为先的方法会产生一系列有趣的副作用。
这种流处理为先的方法也叫做Kappa架构,与之相对的是更加被广为人知的Lambda架构(该架构中使用批处理作为主要处理方法,使用流作为补充并提供早期未经提炼的结果)。Kappa架构中会对一切进行流处理,借此对模型进行简化,而这一切是在最近流处理引擎逐渐成熟后才可行的。
Flink是一款分布式的计算引擎,它可以用来做批处理,即处理静态的数据集、历史的数据集;也可以用来做流处理,即实时地处理一些实时数据流,实时地产生数据的结果;也可以用来做一些基于事件的应用,比如说滴滴通过Flink CEP实现实时监测用户及司机的行为流来判断用户或司机的行为是否正当。
参考链接:
http://bigdata.51cto.com/art/201810/585922.htm#topx
http://bigdata.51cto.com/art/201807/579698.htm
3.1.4 阿里 Blink
阿里巴巴基于 Flink 的内部版本,现已开源,阿里正式向 Apache Flink 贡献了 Blink 源码。
虽然现在Blink在阿里内部用的最多的场景主要还是在流计算,但是在批计算场景也有不少业务上线使用了。
参考链接:https://mp.weixin.qq.com/s/6_4l4zo3-FD-NF3Lmr0BxQ
Blink on GitHub:https://github.com/apache/flink/tree/blink
3.1.5 Apache Samza
Samza是近日由LinkedIn开源的一项技术,它是一个分布式流处理框架,它是基于Kafka消息队列来实现类实时的流式数据处理的,非常像Twitter的流处理系统Storm。不同的是Samza基于Hadoop,而且使用了LinkedIn自家的Kafka分布式消息系统,并使用资源管理器Apache Hadoop YARN实现容错处理、处理器隔离、安全性和资源管理。
Apache Samza是一种与Apache Kafka消息系统紧密绑定的流处理框架。虽然Kafka可用于很多流处理系统,但按照设计,Samza可以更好地发挥Kafka独特的架构优势和保障。该技术可通过Kafka提供容错、缓冲,以及状态存储。
Samza可使用YARN作为资源管理器。这意味着默认情况下需要具备Hadoop集群(至少具备HDFS和YARN),但同时也意味着Samza可以直接使用YARN丰富的内建功能。
3.2 批处理大数据技术
MapReduce、Spark、Hive、Spark SQL 这些技术主要用来解决离线大数据的计算,也就是针对历史数据进行计算分析,比如针对一天的历史数据计算,一天的数据是一批数据,所以也叫批处理计算。
3.2.1 MapReduce
MapReduce:MapReduce是Hadoop的原生批处理引擎。
MapReduce模式的主要思想是自动将一个大的计算拆解成Map和Reduce
Apache Hadoop及其MapReduce处理引擎提供了一套久经考验的批处理模型,最适合处理对时间要求不高的非常大规模数据集。
批处理框架:Apache Hadoop
Apache Hadoop是一种专用于批处理的处理框架。
3.2.2 Spark
Spark的中间数据放到内存中,对于迭代运算效率更高。
Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count, collect, reduce, lookup, save等多种actions操作。
3.3 大数据仓库
3.3.1 Hive
Hive是基于Hadoop的一个数据仓库工具,通过他可以实现将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,同时将sql语句转换为MapReduce任务进行运行。
3.3.2 Spark SQL
3.3.3 Impala
Impala是对Hive的一个补充,可以实现高效的SQL查询,但是Impala将整个查询过程分成了一个执行计划树,而不是一连串的MapReduce任务,相比Hive有更好的并发性和避免了不必要的中间sort和shuffle。
3.4 大数据资源管理 Yarn
Yarn,资源调度框架
不管是批处理计算还是流处理计算,都需要庞大的计算资源,需要将计算任务分布到一个大规模的服务器集群上。那么如何管理这些服务器集群的计算资源,如何对一个计算请求进行资源分配,这就是大数据集群资源管理框架 Yarn 的主要作用。各种大数据计算引擎,不管是批处理还是流处理,都可以通过 Yarn 进行资源分配,运行在一个集群中。
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
YARN是Yet Another Resource Negotiator(另一个资源管理器)的缩写,可充当Hadoop堆栈的集群协调组件。该组件负责协调并管理底层资源和调度作业的运行。通过充当集群资源的接口,YARN使得用户能在Hadoop集群中使用比以往的迭代方式运行更多类型的工作负载。
3.5 大数据存储
3.5.1 大数据文件系统:HDFS
3.5.2 NoSQL:HBase
HBase,Big Table 的开源实现
这里相对比较特殊的是 HBase,作为一个 NoSQL 存储系统,HBase 的应用场景是满足在线业务数据存储访问需求,通常是 OLTP(在线事务处理)系统的一部分,为了保证在线业务的高可用和资源独占性,一般是独立部署自己的集群,和前面的Hadoop 大数据集群分离部署。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
而Hbase库是支撑业务的CRUD操作(增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)),各种业务操作下的处理和查询。
3.6 Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
参考链接:
https://www.jianshu.com/p/5cc07eae1a0chttps://blog.csdn.net/u013547284/article/details/72843867
https://www.oschina.net/p/apache-storm
4. 大数据处理步骤
4.1 数据采集
将应用程序产生的数据和日志等同步到大数据系统中,由于数据源不同,这里的数据同步系统实际上是多个相关系统的组合。数据库同步通常用Sqoop,日志同步可以选择Flume,打点采集的数据经过格式化转换后通过Kafka传递。
不同的数据源产生的数据质量可能差别很大,数据库中的数据也许可以直接导入大数据系统就可以,而日志和爬虫产生的数据就需要进行大量的清洗、转化处理才能有效使用。所以数据同步系统实际上承担着传统数据仓库ETL的工作。
对于数据采集主要分为三类,即
4.1.1 结构化数据库采集
对于结构化数据库,采用Sqoop是合适的,可以实现结构化数据库中数据并行批量入库到hdfs存储。
4.1.1.1 Sqoop
Sqoop(数据库 ETL)
关系型数据库的数据导入到 HDFS 中;
HDFS 数据导入到 Hive。
4.1.2 日志和文件采集
对于日志文件的采集,现在最常用的仍然是flume或chukwa,但是我们要看到如果对于日志文件数据需要进行各种计算处理再入库的时候,往往flume并不容易处理,这也是为何可以采用Pig来做进一步复杂的data flow和process的原因。
4.1.2.1 Flume
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。
4.1.3 打点采集的数据
4.1.4 网页采集
对于网页采集,前端可以采用Nutch,全文检索采用lucense,而实际数据存储最好是入库到Hbase数据库。
4.1.4.1 lucense
4.1.4.2 Solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
4.2 数据处理
4.3 数据输出与展示
对于处理得到的数据可以对接主流的BI系统,比如国外的Tableau、Qlikview、PowrerBI等,国内的SmallBI和新兴的网易有数(可免费试用)等,将结果进行可视化,用于决策分析;或者回流到线上,支持线上业务的发展。
参考链接:
5. 其它
Hadoop+spark正在替代Hadoop+MR成为大数据领域的明星,Cloudera正在积极推动Spark成为Hadoop的默认数据处理引擎。
5.1 Kafka
Apache Kafka是一个高度可扩展的消息传递系统,Linkedin用于日志处理的分布式消息队列;
Q:为什么kafka使用了Scala进行开发?
A:因为当年主R正在学习Scala,所以就用Scala开发了。并且这是他的第一个Scala项目。也正是因为他也在学习阶段,所以写出来的代码都是按照Java的写法实现的,这也是为什么Java开发者也能很容易读懂源码的原因。
Q:为什么kafka叫kafka?
A:因为主R在开发kafka的时候正在看卡夫卡的《变形记》,所以没有多想就用了kafka这个名字。同时,因为kafka实际上是以日志的形式记录消息的,属于一个书写者,所以用一位作家的名字命名也是很契合的。
原文链接:https://blog.csdn.net/u011291072/article/details/80009928
5.2 Kafka与Flume的异同点
Kafka和flume作为数据采集通道的区别:
将数据从某一个数据源导入HDFS或者HBase,Kafka是一个半成品,需要自己完成消费者程序的编写,而flume只需要改配置就可以导数据进入HDFS或者HBase,相当于Flume自身包含了消费者程序,不需要程序员去开发。另外,Flume自带的interceptors也可以用来处理数据,而Kafka如果要处理数据还需要接入外部流处理系统,比如storm,spark等。
所以实际生产中,通常是外部数据源采数据到Kafka,Kafka再通过Flume导数据到HDFS。为什么不直接将外部数据源接入Flume,这是因为Kafka可以实现多生产者和多消费者,可以接入外部各种各样的数据源,同时Kafka可以同时接入Flume之外的其他数据导入系统,这样以后扩展更灵活。
5.3 Spark/Shark
UC Berkeley AMP Lab所开源的基于内存的并行计算框架。
5.4 Flume+Kafka+Spark Streaming
Spark Streaming实时流处理项目实战
分布式日志收集框架Flume
分布式消息队列Kafka
分布式列式数据库HBase
Spark Streaming:通过sparkstreaming,可以有效满足企业实时数据的要求,构建企业发展的实时指标体系。
使用Flume采集日志
将Flume收集到的数据输出到Kafka
Spark Streaming消费Kafka的数据进行统计
Spark Streaming如何高效的读写数据到Hbase
HBase位于结构化存储层,围绕HBase,各部件对HBase的支持情况:
Hadoop部件 作用
HDFS 高可靠的底层存储支持
MapReduce 高性能的计算能力
Zookeeper 稳定服务和failover机制
Pig&Hive 高层语言支持,便于数据统计
Sqoop 提供RDBMS数据导入,便于传统数据库向HBase迁移
5.5 高可用性
高可用性H.A.(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。
5.6 Yarn 和 Zookeeper 之间的关系
分布式系统的问题:
- Resource Management
- Coordination
YARN 相当于政府,负责管理机器资源的分配;
Zookeeper 相当于立法委员会,目标是提供权威的信息给这个国家所有的人。Zookeeper 关注的主要是信息的一致性,管理一些需要在所有人心中保持一致的信息。它虽然常常用来管理哪个节点活着,哪个节点死了这种信息,或是哪个节点该负责什么事儿,但是它还是主要负责管理信息(档案,法律)的部门,不是民生部门……
参考链接:https://blog.csdn.net/laolu1573/article/details/78540508
6. 参考资料
参考链接:
https://time.geekbang.org/column/article/71366
https://blog.csdn.net/u012117710/article/details/54091964
https://blog.csdn.net/yusiguyuan/article/details/44160169
https://www.cnblogs.com/yangsy0915/p/4866995.html
MapReduce和YARN区别:https://blog.csdn.net/hahachenchen789/article/details/80527706
尚学堂视频教程:https://www.bjsxt.com/dashujushipin.html
51CTO视频教程:http://edu.51cto.com/course/12184.html