大数据时代
进入2012年,大数据(big data)一词越来越多地被提及,人们用它来描述和定义信息爆炸时代产生的海量数据,并命名与之相关的技术发展与创新。它已经上过《纽约时报》《华尔街日报》的专栏封面,进入美国白宫官网的新闻,现身在国内一些互联网主题的讲座沙龙中,甚至被嗅觉灵敏的国金证券、国泰君安、银河证券等写进了投资推荐报告。
数据正在迅速膨胀并变大,它决定着企业的未来发展,虽然很多企业可能并没有意识到数据爆炸性增长带来问题的隐患,但是随着时间的推移,人们将越来越多的意识到数据对企业的重要性。
正如《纽约时报》2012年2月的一篇专栏中所称,“大数据”时代已经降临,在商业、经济及其他领域中,决策将日益基于数据和分析而作出,而并非基于经验和直觉。
哈佛大学社会学教授加里·金说:“这是一场革命,庞大的数据资源使得各个领域开始了量化进程,无论学术界、商界还是政府,所有领域都将开始这种进程。”
三次信息化浪潮
信息化浪潮 |
发生时间 | 标志 | 解决问题 | 代表企业 |
第一次浪潮 | 1980年前后 | 个人计算机 | 信息处理 | Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 |
第二次浪潮 | 1995年前后 | 互联网 | 信息传输 | 苹果、微软、联想、戴雅虎、谷歌、阿里巴巴 |
第三次浪潮 | 2010年前后 | 物联网、云计算和大数据 | 信息爆炸 | 亚马逊、谷歌、IBM、VMWare、Palantir、Hortonworks、 |
Cloudera、阿里云等 |
信息科技为大数据时代提供技术支撑
信息科技需要解决信息存储、信息传输和信息处理3个核心问题,人类社会在信息科技领域的不断进步,为大数据时代的到来 提供了技术支撑。
什么是大数据
大数据就是互联网发展到现今阶段的一种表象或特征,“大数据”在互联网行业指的是这样一种现象:互联网公司在日常运营中生成、累积的用户网络行为数据。这些数据的规模是如此庞大,以至于不能用GB或TB来衡量。
大数据到底有多大?一组名为“互联网上一天”的数据告诉我们,一天之中,互联网产生的全部内容可以刻满1.68亿张DVD;发出的邮件有2940亿封之多(相当于美国两年的纸质信件数量);发出的社区帖子达200万个(相当于《时代》杂志770年的文字量);卖出的手机为37.8万台,高于全球每天出生的婴儿数量37.1万…… [1]
截止到2012年,数据量已经从TB(1024GB=1TB)级别跃升到PB(1024TB=1PB)、EB(1024PB=1EB)乃至ZB(1024EB=1ZB)级别。国际数据公司(IDC)的研究结果表明,2008年全球产生的数据量为0.49ZB,2009年的数据量为0.8ZB,2010年增长为1.2ZB,2011年的数量更是高达1.82ZB,相当于全球每人产生200GB以上的数据。而到2012年为止,人类生产的所有印刷材料的数据量是200PB,全人类历史上说过的所有话的数据量大约是5EB。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。而到了2020年,全世界所产生的数据规模将达到今天的44倍。 [3] 每一天,全世界会上传超过5亿张图片,每分钟就有20小时时长的视频被分享。然而,即使是人们每天创造的全部信息——包括语音通话、电子邮件和信息在内的各种通信,以及上传的全部图片、视频与音乐,其信息量也无法匹及每一天所创造出的关于人们自身的数字信息量。
大数据换算单位
1024 TB = 1 PB (PetaByte) 拍字节
1024 PB = 1 EB (ExaByte) 艾字节
1024 EB = 1 ZB (ZetaByte) 泽字节
1024 ZB = 1 YB (YottaByte) 尧字节
1024 YB = 1BB(Brontobyte)珀字节
1024 BB = 1 NB (NonaByte) 诺字节
1024 NB = 1 DB (DoggaByte)刀字节
市面上卖硬盘的都是按1000计算,号称500G硬盘=500_1000B_1000KB*1000MB。
毫无疑问,全地球所有的硬盘总容量加起来也可能不到1BB。1BB是什么概念?。我这样说:地球上有60亿人,每人要有16万个1TB容量的硬盘,则全球硬盘总容量才能达到1BB。换个方法说:假设地球上有100个硬盘厂家,那么每个厂家要生产10万亿个1TB的硬盘,地球硬盘总容量才能达到1BB。
所以市面上肯定没有1BB硬盘。
大数据特征
数据量大(Volume)
第一个特征是数据量大。大数据的起始计量单位至少是P(1000个T)、E(100万个T)或Z(10亿个T)。
根据IDC(互联网数据中心)作出的评估测,数据一直都在以每年950%的速度增长,也就是说每两年就增长一倍 (大数据摩尔定律)
人类在最近两年产生的数据量相当于之前产生的全部数据量
截止到2022年,全球所拥有的数据量为61.2ZB!相较于2010年(988EB),数据量将增长近63倍
据IDC发布《数据时代2025》的报告显示,全球每年产生的数据将从2018年的33ZB增长到175ZB,相当于每天产生491EB的数据。
类型繁多(Variety)
第二个特征是数据类型繁多。包括网络日志、音频、视频、图片、地理位置信息等等,多类型的数据对数据的处理能力提出了更高的要求。
大数据是由结构化和非结构化数据组成的:10%的结构化数据,存储在数据库中,90%的非结构化数据,它们与人类信息息息相关。
这90%的非结构化数据包含
科学研究(基因数据、科研数据、宇宙探测数据等)
企业应用(Email、文件、文档、应用日志、交易记录等)
web 数据(文本、图像、视频等)
价值密度低(Value)
第三个特征是数据价值密度相对较低。如随着物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低,如何通过强大的机器算法更迅速地完成数据的价值“提纯”,是大数据时代等待解决的难题。(如海量的监控数据中只有极小的一部分有价值)
速度快、时效高(Velocity)
第四个特征是处理速度快,时效性要求高。这是大数据区分于传统数据挖掘最显著的特征。既有的技术架构和路线,以及无法高效处理如此海量的数据,而对于相关组织来说,如果投入巨大采集的信息无法通过及时处理反馈有效信息,那将是得不偿失的。可以说,大数据时代对人类的数据驾驭能力提出了新的挑战,也为人们获得更为深刻、全面的洞察能力提供了前所未有的空间与潜力。
(如很多过去做不到的事情,⽐如城市的智能交通管理。以前没有智能⼿机和智能汽车,很多⼤城市虽然有交管中⼼,但它们收集的路况信息最快也要滞后20分钟。⽤户看到的,可能已经是半⼩时前的路况了。但是,能定位的智能⼿机普及以后可就不⼀样了。⼤部分⽤户开放了实时位置信息,做地图服务的公司,就能实时得到⼈员流动信息,并且根据流动速度和所在位置,区分步⾏的⼈群和汽车,然后提供实时的交通路况信息,用于调节红绿灯、派遣交警去拥堵地段等,给⽤户带来便利。)
大数据对传统思维的影响
大数据时代,人们对待数据的思维方式会发生如下三个变化:第一,人们处理的数据从样本数据变成全部数据;第二,由于是全样本数据,人们不得不接受数据的混杂性,而放弃对精确性的追求;第三,人类通过对大数据的处理,放弃对因果关系的渴求,转而关注相关关系。
即全样而非抽样、效率而非准确、相关而非因果。
大数据能做什么
随着科学技术的快速发展,数据规模以几何级数的速度增长,大数据成为现代数据分析的重要研究对象。如何从已有的大规模、高维数据中挖掘新的有价值的信息?大数据具体是干什么的?
1、保障网络安全
大数据时代崛起,网络安全事件频频发出,想要解决蠕虫等病毒的暴发,可以部署终端安全管理系统,建立以终端安全管理为核心的出发点,从数据保护、终端控制、安全管理、桌面管理等方面构建完整的终端保护体系,这样可以有效阻止网络瘫痪和重要信息泄露,通过这一系列技术手段全面实施用户的安全管理策略。结合具体数据的更新情况,对此构建相应的数据安全分析机制,采用动态化的数据分析方式,对各类数据进行灵活处理,加强对各类数据运行的有效监控,提升对数据处理的针对性与有效性。可以在较短的时间内发现数据的问题或者可以通过数据发现实时的问题。
2、维持信息化运转
大数据的应用必然离不开云计算、云存储、物联网等技术,大数据涵盖了大数据技术、大数据工程、大数据分析、大数据应用等,以大体量、多类型、多变化、应用价值高为基本特征的数据集团,时时刻刻都在爆发式增长。大数据是当下的一种前沿技术,将数据源的定义、相关方的确定、数据获取、数据存储、数据分析、数据处理和应用呈现为一个整体。大数据的最终目的在于能够将获取的数据实际应用,提供服务,产生价值。大数据有助于维持企业的信息化运转,辅助企业运用。
3、数据源与挖掘
大数据技术研究不同于一般的传统逻辑学研究,是对海量的数据内不存在的系统性逻辑和个性化逻辑进行按需检索、比较、分聚类归纳,找到不同或相同数据存在的内部关系,深入挖掘传统分析技术无法发现的深层次的价值。比如,通过对某品牌电梯的历年检验数据进行分析,发现该电梯的常见隐患点、隐患周期、隐患程度等。 大数据的核心在于为行业领域带来新的价值空间,通过大数据来全面重塑企业各种模式,而如果单纯地站在数据的角度来看待大数据,大数据的核心在于数据的价值化,数据价值化的过程本身就能够开辟出一个巨大的价值空间。
4、数据监控
服务监控:基于大数据提供系统稳定性、服务波动监控等,业务异常及时发现,快速止损。
风控和反欺诈:基于算法模型(知识图谱、聚类分析等)识别黑产用户特征,防止薅羊毛等黑产或欺诈行为,减少业务损失。
舆情监控:利用大数据的手段,对涉及到公司业务或关键词的舆论数据进行爬虫爬取,利用文本挖掘,情感识别的手段对于负面舆论第一时间发现,公关及时对接处理,可以把舆论影响降低到最小。
大数据应用领域
大数据与云计算和物联网之间的关系
大数据生态里有什么
Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:
根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。接下来对Hadoop生态圈中出现的相关组件做一个简要介绍。
1、HDFS(分布式文件系统)
HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
client:切分文件,访问HDFS时,首先与NameNode交互,获取目标文件的位置信息,然后与DataNode交互,读写数据
NameNode:master节点,每个HDFS集群只有一个,管理HDFS的名称空间和数据块映射信息,配置相关副本信息,处理客户端请求。
DataNode:slave节点,存储实际数据,并汇报状态信息给NameNode,默认一个文件会备份3份在不同的DataNode中,实现高可靠性和容错性。
Secondary NameNode:辅助NameNode,实现高可靠性,定期合并fsimage和fsedits,推送给NameNode;紧急情况下辅助和恢复NameNode,但其并非NameNode的热备份。
Hadoop 2为HDFS引入了两个重要的新功能 ——Federation和高可用(HA):
Federation允许集群中出现多个NameNode,之间相互独立且不需要互相协调,各自分工,管理自己的区域。 DataNode 被用作通用的数据块存储设备。每个 DataNode 要向集群中所有NameNode 注册,并发送心跳报告,执行所有 namenode的命令。
HDFS中的高可用性消除了Hadoop 1中存在的单点故障,其中,NameNode故障将导致集群中断。HDFS的高可用性提供故障转移功能(备用节点从失败的主NameNode接管工作的过程)以实现自动化。
2、MapReduce(分布式计算框架)
MapReduce是一种基于磁盘的分布式并行批处理计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。
Jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给Tasktracker。
Tacktracker:slave节点,运行 Map task和Reduce task;并与Jobtracker交互,汇报任务状态。
Map task:解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。
Reduce task:从Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行。
3、Spark(分布式计算框架)
Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器
Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。
Driver: 运行Application 的main()函数
Executor:执行器,是为某个Application运行在worker node上的一个进程
Spark将数据抽象为RDD(弹性分布式数据集),内部提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。
Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据,通过短时批处理实现的伪流处理。
MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作
4、Flink(分布式计算框架)
Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。
Flink VS Spark
Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan。所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。
Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理。
5、Yarn/Mesos(分布式资源管理器)
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。
Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。
6、Zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。
7、Sqoop(数据同步工具)
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。
8、Hive/Impala(基于Hadoop的数据仓库)
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。
Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive。
9、HBase(分布式列存储数据库)
HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
10、Flume(日志收集工具)
Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。
同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。
Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单个Agent由Source、Sink和Channel三大组件构成
Source:从客户端收集数据,并传递给Channel。
Channel:缓存区,将Source传输的数据暂时存放。
Sink:从Channel收集数据,并写入到指定地址。
Event:日志文件、avro对象等源文件。
11、Kafka(分布式消息队列)
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。
生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。
12、Oozie(工作流调度器)
Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。
Oozie使用hPDL(一种XML流程定义语言)来描述这个图。
大数据业务架构图
大数据中数据流向
业务举例
大数据平台
开源大数据平台E-MapReduce
Hadoop思想
大道至简、分而治之
离线计算简易图示
Spark 简单计算数据处理
实时计算简易图示
流处理:持续不断的运算处理
可以比作一个水厂处理水的流程
框架处理角度(一个接着一个的时间窗口持续做运算【窗口大小可以调整,如100ms】)