admin管理员组

文章数量:1570208

什么是大数据

大数据(英语:Big data),又称为巨量资料,指的是在传统数据处理应用软件不足以处理的大或复杂的数据集的术语

数据也可以定义为来自各种来源的大量非结构化或结构化数据。从学术角度而言,大数据的出现促成广泛主题的新颖研究。这也导致各种大数据统计方法的发展。大数据并没有统计学的抽样方法;它只是观察和追踪发生的事情。因此,大数据通常包含的数据大小超出传统软件在可接受的时间内处理的能力。由于近期的技术进步,发布新数据的便捷性以及全球大多数政府对高透明度的要求,大数据分析在现代研究中越来越突出。 ——维基百科

大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

大数据是具有海量、高增长率和多样化的信息资产,它需要全新的处理模式来增强决策力、洞察发现力和流程优化能力。

大数据特征

1、数据量大
第一个特征是数据量大。大数据的起始计量单位至少是P(1000个T)、E(100万个T)或Z(10亿个T)。
2、类型繁多
包括网络日志、音频、视频、图片、地理位置信息等等,多类型的数据对数据的处理能力提出了更高的要求。
3、价值密度低
如随着物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低,如何通过强大的机器算法更迅速地完成数据的价值“提纯”,是大数据时代亟待解决的难题。
4、速度快、时效高
既有的技术架构和路线,已经无法高效处理如此海量的数据,而对于相关组织来说,如果投入巨大采集的信息无法通过及时处理反馈有效信息,那将是得不偿失的。可以说,大数据时代对人类的数据驾驭能力提出了新的挑战,也为人们获得更为深刻、全面的洞察能力提供了前所未有的空间与潜力。

大数据的处理过程

既有的技术架构和路线,已经无法高效处理如此海量的数据,而对于相关组织来说,如果投入巨大采集的信息无法通过及时处理反馈有效信息,那将是得不偿失的。可以说,大数据时代对人类的数据驾驭能力提出了新的挑战,也为人们获得更为深刻、全面的洞察能力提供了前所未有的空间与潜力。
一、数据收集

在数据收集过程中,数据源会影响大数据质量的真实性、完整性数据收集、一致性、准确性和安全性。对于Web数据,多采用网络爬虫方式进行收集,这需要对爬虫软件进行时间设置以保障收集到的数据时效性质量。比如可以利用易海聚采集软件的增值API设置,灵活控制采集任务的启动和停止。

二、数据预处理

大数据采集过程中通常有一个或多个数据源,这些数据源包括同构或异构的数据库、文件系统、服务接口等,易受到噪声数据、数据值缺失、数据冲突等影响,因此需首先对收集到的大数据集合进行预处理,以保证大数据分析与预测结果的准确性与价值性。

大数据的预处理环节主要包括数据清理、数据集成、数据归约与数据转换等内容,可以大大提高大数据的总体质量,是大数据过程质量的体现。 数据清理技术包括对数据的不一致检测、噪声数据的识别、数据过滤与修正等方面,有利于提高大数据的一致性、准确性、真实性和可用性等方面的质量;

数据集成则是将多个数据源的数据进行集成,从而形成集中、统一的数据库、数据立方体等,这一过程有利于提高大数据的完整性、一致性、安全性和可用性等方面质量;

数据归约是在不损害分析结果准确性的前提下降低数据集规模,使之简化,包括维归约、数据归约、数据抽样等技术,这一过程有利于提高大数据的价值密度,即提高大数据存储的价值性。

数据转换处理包括基于规则或元数据的转换、基于模型与学习的转换等技术,可通过转换实现数据统一,这一过程有利于提高大数据的一致性和可用性。

总之,数据预处理环节有利于提高大数据的一致性、准确性、真实性、可用性、完整性、安全性和价值性等方面质量,而大数据预处理中的相关技术是影响大数据过程质量的关键因素

三、数据处理与分析

1、数据处理

大数据的分布式处理技术与存储形式、业务数据类型等相关,针对大数据处理的主要计算模型有MapReduce分布式计算框架、分布式内存计算系统、分布式流计算系统等。MapReduce是一个批处理的分布式计算框架,可对海量数据进行并行分析与处理,它适合对各种结构化、非结构化数据的处理。分布式内存计算系统可有效减少数据读写和移动的开销,提高大数据处理性能。分布式流计算系统则是对数据流进行实时处理,以保障大数据的时效性和价值性。

总之,无论哪种大数据分布式处理与计算系统,都有利于提高大数据的价值性、可用性、时效性和准确性。大数据的类型和存储形式决定了其所采用的数据处理系统,而数据处理系统的性能与优劣直接影响大数据质量的价值性、可用性、时效性和准确性。因此在进行大数据处理时,要根据大数据类型选择合适的存储形式和数据处理系统,以实现大数据质量的最优化。

2、数据分析

大数据分析技术主要包括已有数据的分布式统计分析技术和未知数据的分布式挖掘、深度学习技术。分布式统计分析可由数据处理技术完成,分布式挖掘和深度学习技术则在大数据分析阶段完成,包括聚类与分类、关联分析、深度学习等,可挖掘大数据集合中的数据关联性,形成对事物的描述模式或属性规则,可通过构建机器学习模型和海量训练数据提升数据分析与预测的准确性。

数据分析是大数据处理与应用的关键环节,它决定了大数据集合的价值性和可用性,以及分析预测结果的准确性。在数据分析环节,应根据大数据应用情境与决策需求,选择合适的数据分析技术,提高大数据分析结果的可用性、价值性和准确性质量。

四、数据可视化与应用环节

数据可视化是指将大数据分析与预测结果以计算机图形或图像的直观方式显示给用户的过程,并可与用户进行交互式处理。数据可视化技术有利于发现大量业务数据中隐含的规律性信息,以支持管理决策。数据可视化环节可大大提高大数据分析结果的直观性, 便于用户理解与使用,故数据可视化是影响大数据可用性和易于理解性质量的关键因素。

大数据应用是指将经过分析处理后挖掘得到的大数据结果应用于管理决策、战略规划等的过程,它是对大数据分析结果的检验与验证,大数据应用过程直接体现了大数据分析处理结果的价值性和可用性。大数据应用对大数据的分析处理具有引导作用。

在大数据收集、处理等一系列操作之前,通过对应用情境的充分调研、对管理决策需求信息的深入分析,可明确大数据处理与分析的目标,从而为大数据收集、存储、处理、分析等过程提供明确的方向,并保障大数据分析结果的可用性、价值性和用户需求的满足。

大数据的来源和采集

大数据价值的完美体现需要多种技术的协同。根据涉及领域的不同,大数据的关键技术可以分为大数据采集、大数据预处理、大数据存储及管理、大数据处理、大数据分析及挖掘、大数据展示等几大方面。
大数据采集处于大数据生命周期中第一个环节,是大数据分析至关重要的一个环节,也是大数据分析的入口。
在互联网行业技术快速发展的今天,数据采集广泛应用于互联网及分布式领域(常见的摄像头、麦克风等都可以成为数据采集的工具),此外还集合了信号、传感器、激励器、信号调流、数据采集设备和软件应用等。
大数据采集技术通过RFID射频数据、传感器数据、社交网络数据、移动互联网数据等方式获得各种类型的结构化、半结构化、非结构化的海量数据。
因此,大数据采集技术也面临着诸多挑战:一方面数据源的种类多,数据的类型繁杂,数据量大,并且产生的速度快;另一方面需要保证数据采集的可靠性和高效性,同时还要避免重复数据。
传统的数据采集来源单一,且存储、管理和分析数据量也相对较小,大多采用关系型数据库和并行数据仓库即可处理。
在大数据体系中,传统数据分为业务数据和行业数据,传统数据体系中没有考虑过的新数据源包括内容数据、线上行为数据和线下行为数据 3 大类。
和传统的数据采集技术相比,大数据采集技术有2个特点:
1.大数据采集通常采用分布式架构
大数据采集的数据流量大,数据集记录条数多,传统的单机采集方式,在性能和存储空间上都无法满足需求。
2.多种采集技术混合使用
大数据不像普通数据采集那样单一,往往是多种数据源同时采集,而不同的数据源对应的采集技术通常不一样,很难有一种平台或技术能够统一所有的数据源,因此大数据采集时,往往是多种技术混合使用,要求更高。
大数据的采集从数据源上可以分为四类:
Web数据(包括网页、视频、音频、动画、图片等)
日志数据
数据库数据
其它数据(感知设备数据等)
针对不同的数据源,所采用的数据采集的方法和技术也不相同。
1.web数据采集
网络数据采集是指通过网络爬虫或网站公开 API 等方式从网站上获取数据信息的过程。
网络爬虫会从一个或若干初始网页的 URL 开始,获得各个网页上的内容,并且在抓取网页的过程中,不断从当前页面上抽取新的 URL 放入队列,直到满足设置的停止条件为止。
这样可将非结构化数据、半结构化数据从网页中提取出来,并以结构化的方式存储在本地的存储系统中。
2. 系统日志采集
系统日志采集主要是收集公司业务平台日常产生的大量日志数据,供离线和在线的大数据分析系统使用。
高可用性、高可靠性、可扩展性是日志收集系统所具有的基本特征。系统日志采集工具均采用分布式架构,能够满足每秒数百 MB 的日志数据采集和传输需求。
3. 数据库采集
传统企业会使用传统的关系型数据库 MySQL 和 Oracle 等来存储数据。
随着大数据时代的到来,Redis、MongoDB 和 HBase 等 NoSQL 数据库也常用于数据的采集。企业通过在采集端部署大量数据库,并在这些数据库之间进行负载均衡和分片,来完成大数据采集工作。
4. 其他数据(感知设备等数据采集)
感知设备数据采集是指通过传感器、摄像头和其他智能终端自动采集信号、图片或录像来获取数据。
大数据智能感知系统需要实现对结构化、半结构化、非结构化的海量数据的智能化识别、定位、跟踪、接入、传输、信号转换、监控、初步处理和管理等。其关键技术包括针对大数据源的智能识别、感知、适配、传输、接入等。
数据的采集是挖掘数据“石油”的第一步,当数据量越来越大时,可发掘的有价值的信息也就更多,反应信息也就越加全面。只有更加充分地利用数据化处理平台,才可以保证分析结果的有效性和准确性,以便更加有效地助力企业实现驱动的数据化。

大数据的存储技术

大数据从获取到分析的各个阶段都可能会涉及到数据集的存储,考虑到大数据有别于传统数据集,因此大数据存储技术有别于传统存储技术。大数据一般通过分布式系统、NoSQL数据库等方式(还有云数据库)进行存储。同时涉及到以下几个新理念。
本篇summary主要围绕以下三方面内容:
大数据存储方案(分布式系统、NoSQL数据库系统);
分布与集群、数据分布的途径;
数据库设计时涉及到的原则与遵循的定理。

集群

将多台服务器集中在一起,每台服务器(节点)实现相同的业务。因此每台服务器并不是缺一不可,集群的目的是缓解并发压力和单点故障转移问题。例如:新浪网微博的访问量巨大,因此可以通过群集技术,几台服务器完成同一业务。当有业务访问时,选择负载较轻的服务器完成任务。

分布式

传统的项目中,各个业务模块存在于同一系统中,导致系统过于庞大,开发维护困难,无法针对单个模块进行优化以及水平扩展。因此考虑分布式系统:
将多台服务器集中在一起,分别实现总体中的不同业务。每台服务器都缺一不可,如果某台服务器故障,则网站部分功能缺失,或导致整体无法运行。因此可大幅度的提高效率、缓解服务器的访问存储压力。
从上图中可看出:每个Web服务器(Tomcat)程序都负责一个网站中不同的功能,缺一不可。如果某台服务器故障,则对应的网站功能缺失,也可以导致其依赖功能甚至全部功能都不能够使用。
分布式与集群的关系、区别
关系:
分布式方便我们系统的维护和开发,但是不能解决并发问题,也无法保证我们的系统崩溃后的正常运转。
集群则恰好弥补了分布式的缺陷,多个服务器处理相同的业务,这可以改善系统的并发问题,同时保证系统崩溃后的正常运转。
因此,分布式和集群技术一般同时出现,密不可分。(分布式中的每一个节点,都可以做集群)
区别:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
【补充】例如:
如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。
采用分布式方案:提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)
而采用集群方案:同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小时后,10个任务同时完成。整身来看,还是1小时内完成一个任务。

文件系统 & 分布式文件系统

文件系统——是一种存储和组织计算机数据的方法。
数据是以文件的形式存在,提供 Open、Read、Write、Seek、Close 等API 进行访问;
文件以树形目录进行组织,提供重命名(Rename)操作改变文件或者目录的位置。
分布式文件系统——允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
几种常见的分布式文件存储系统有GFS(Google分布式文件系统)、HDFS(Hadoop分布式文件系统)、TFS、Swift、Ceph等。

NoSQL(非关系型数据库)

NoSQL(Not Only SQL),意即"不仅仅是SQL"。NoSQL数据库可同时存储结构化、非结构化数据、半结构化数据。

相比于关系型数据库,非关系型数据库提出另一种理念:每一个样本(元组)根据需要可以有不同的字段,这样就不局限于固定的结构,调取数据时也更方便。可以减少一些时间和空间的开销。因此为了获取用户的不同信息,不需要像关系型数据库中,对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询,通过XQuery、SPARQL等查询语言完成查询过程。

非关系型数据库有以下几种类型:
大数据集的数据量巨大,单机无法存储与处理如此规模的数据量,只能依靠大规模集群以进行存储和处理,因此系统需要具备可扩展性。

目前主流的大数据存储与计算系统往往采用横向扩展(Scale Out)的方式。因此,对于待存储处理的海量数据,需要用过数据分片将数据进行切分,并分配到各服务器中。

数据分布的两条途径:复制 & 分片

分布式NoSQL的两大特性:复制和分片。
数据分片与数据复制是紧密联系的两个概念。对于海量数据,可通过数据分片实现系统的水平扩展,通过数据复制保证数据的高可用性。

分片(sharding/partition)——将数据的各个部分存放在不同的服务器/节点中,每个服务器/节点负责自身数据的读取与写入操作,以此实现横向扩展。
复制(replication)——将同一份数据拷贝到多个节点。分为主从复制master-slave方式、对等式复制peer-to-peer
主从式复制:master节点用于存放权威数据,通常负责数据的更新,其余节点都叫做slave节点,复制操作就是让slave节点的数据与master节点的数据同步。适用于读请求密集的负载。
对等式复制:两个节点相互为各自的副本,也同时可以接受写入请求,丢失其中一个不影响整个数据库的访问。但同时接受写入请求,容易出现数据(写入)不一致问题,实际使用上,通常是只有一个节点接受写入请求,另一个master作为stand-by,在对方出现故障的时候自动承接写操作请求。
分片与复制可以组合,即同时采用主从复制与分片、对等复制与分片。
【补充】优缺点对比:
分片可以极大地提高读取性能,但对于要频繁写的应用,帮助不大。另外,分片对改善故障恢复能力并没有帮助,但是它减少了故障范围,只有访问这个节点的那些用户才会受影响,其余用户可以正常访问。虽然数据库缺失了一部分,但是还是其余部分还是可以正常运转。

复制除保证可用性之外,还可增加读操作的效率。(即客户端可以从多个备份数据中选择物理距离较近的进行读取,这既增加了读操作的并发性又可以提高单次读的读取效率。)
对于分布式数据库系统的设计过程,需遵循CAP定理:CAP定理(布鲁尔定理)
布式数据库系统不可能同时满足以下三点,最多只能同时满足两个:

一致性(Consistency)——所有节点在同一时间具有相同的数据;
可用性(Availability)——保证每个请求不管成功或者失败都有响应;
分区容忍(Partition tolerance)——系统中任意信息的丢失或失败不会影响系统的继续运作。
因此,当代的分布式数据存储服务,均是针对各自服务的内容、性质取舍。
而NoSQL数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三大类。
关系型数据库的设计原则与事务管理遵循ACID规则:

ACID

事务(transaction),具有如下四个特性:

A (Atomicity) 原子性——事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务失败,需要回滚。
C (Consistency)一致性——数据库要一直处于一致的状态,事务的运行不会改变数据库原本的约束。
I (Isolation) 独立性——并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。
D (Durability) 持久性——是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使系统崩溃也不会丢失。
基于CAP定理演化而来BASE数据库设计原则:

BASE

包括:Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)。
针对数据库系统要求的可用性、一致性,BASE放宽要求,形成基本可用和软状态/柔性事务。而一致性是最终目的。

ACID vs.BASE

大数据的价值

随着移动互联网的飞速发展,信息的传输日益方便快捷,端到端的需求也日益突出,纵观整个移动互联网领域,数据已被认为是继云计算、物联网之后的又一大颠覆性的技术性革命,毋庸置疑,大数据市场是待挖掘的金矿,其价值不言而喻。可以说谁能掌握和合理运用用户大数据的核心资源,谁就能在接下来的技术变革中进一步发展壮大。

大数据,可以说是史上第一次将各行各业的用户、方案提供商、服务商、运营商以及整个生态链上游厂商,融入到一个大的环境中,无论是企业级市场还是消费级市场,亦或政府公共服务,都正或将要与大数据发生千丝万缕的联系。

近期有不少文章畅谈大数据的价值,以及其价值主要凸显在哪些方面,这里我们对大数据的核心具体价值进行了分门别类的梳理汇总,希望能帮助读者更好的获悉大数据的大价值。

核心价值究其用户到底是谁?

谈及价值,首先必须要弄清楚其用户到底是谁?有针对企业数据市场的,还有针对终端消费者的,还有针对政府公共服务的;其次要弄清楚大数据核心价值的表现形式、价值的体现过程以及最后呈现的结果。

商业的发展天生就依赖于大量的数据分析来做决策,对于企业用户,更关心的还是决策需求,其实早在BI时代这就被推上了日程,经过十余年的探索,如今已形成了数据管理、数据可视化等细分领域,来加强对决策者的影响,达到决策支持的效果。还有企业营销需求,从本质上来说,主要聚焦在针对消费者市场的精准营销。

对于消费者用户,他们对大数据的需求主要体现在信息能按需搜索,并能提供友好、可信的信息推荐,其次是提供高阶服务,例如智能信息的提供、用户体验更快捷等等。

还有,大数据也不断被应用到政府日常管理和为民服务中,并成为推动政府政务公开、完善服务、依法行政的重要力量。从户籍制度改革,到不动产登记制度改革,再到征信体系建设等等都对数据库建设提出了更高的目标要求,而此时的数据库更是以大数据为基础的,可见,大数据已成为政府改革和转型的技术支撑杠杆。

数据,除了它第一次被使用时提供的价值以外,那些积累下来的数据海洋并不是无用的废物,它还有着无穷无尽的“剩余价值”,关于这一点,人们已经有了越来越多的认识。事实上,大数据已经开始并将继续影响我们的生活,接下来让我们共同探索大数据的核心价值吧!当然这是需要借助于一些具体的应用模式和场景才能得到集中体现的。

《大数据时代》一书作者维克托认为大数据时代有三大转变:“第一,我们可以分析更多的数据,有时候甚至可以处理和某个特别现象相关的所有数据,而不是依赖于随机采样。更高的精确性可使我们发现更多的细节。第二,研究数据如此之多,以至于我们不再热衷于追求精确度。适当忽略微观层面的精确度,将带来更好的洞察力和更大的商业利益。第三,不再热衷于寻找因果关系,而是事物之间的相关关系。例如,不去探究机票价格变动的原因,但是关注买机票的最佳时机。”大数据打破了企业传统数据的边界,改变了过去商业智能仅仅依靠企业内部业务数据的局面,而大数据则使数据来源更加多样化,不仅包括企业内部数据,也包括企业外部数据,尤其是和消费者相关的数据。

随着大数据的发展,企业也越来越重视数据相关的开发和应用,从而获取更多的市场机会。

一方面,大数据能够明显提升企业数据的准确性和及时性;此外还能够降低企业的交易摩擦成本;更为关键的是,大数据能够帮助企业分析大量数据而进一步挖掘细分市场的机会,最终能够缩短企业产品研发时间、提升企业在商业模式、产品和服务上的创新力,大幅提升企业的商业决策水平,降低了企业经营的风险。

一、大数据助企业挖掘市场机会探寻细分市场

大数据能够帮助企业分析大量数据而进一步挖掘市场机会和细分市场,然后对每个群体量体裁衣般的采取独特的行动。获得好的产品概念和创意,关键在于我们到底如何去搜集消费者相关的信息,如何获得趋势,挖掘出人们头脑中未来会可能消费的产品概念。用创新的方法解构消费者的生活方式,剖析消费者的生活密码,才能让吻合消费者未来生活方式的产品研发不再成为问题,如果你了解了消费者的密码,就知道其潜藏在背后的真正需求。大数据分析是发现新客户群体、确定最优供应商、创新产品、理解销售季节性等问题的最好方法。

在数字革命的背景下,对企业营销者的挑战是从如何找到企业产品需求的人到如何找到这些人在不同时间和空间中的需求;从过去以单一或分散的方式去形成和这群人的沟通信息和沟通方式,到现在如何和这群人即时沟通、即时响应、即时解决他们的需求,同时在产品和消费者的买卖关系以外,建立更深层次的伙伴间的互信、双赢和可信赖的关系。

大数据进行高密度分析,能够明显提升企业数据的准确性和及时性;大数据能够帮助企业分析大量数据而进一步挖掘细分市场的机会,最终能够缩短企业产品研发时间、提升企业在商业模式、产品和服务上的创新力,大幅提升企业的商业决策水平。因此,大数据有利于企业发掘和开拓新的市场机会;有利于企业将各种资源合理利用到目标市场;有利于制定精准的经销策略;有利于调整市场的营销策略,大大降低企业经营的风险。

企业利用用户在互联网上的访问行为偏好能为每个用户勾勒出一副“数字剪影”,为具有相似特征的用户组提供精确服务满足用户需求,甚至为每个客户量身定制。这一变革将大大缩减企业产品与最终用户的沟通成本。例如:一家航空公司对从未乘过飞机的人很感兴趣(细分标准是顾客的体验)。而从未乘过飞机的人又可以细分为害怕飞机的人,对乘飞机无所谓的人以及对乘飞机持肯定态度的人(细分标准是态度)。在持肯定态度的人中,又包括高收入有能力乘飞机的人(细分标准是收入能力)。于是这家航空公司就把力量集中在开拓那些对乘飞机持肯定态度,只是还没有乘过飞机的高收入群体。通过对这些人进行量身定制、精准营销取得了很好的效果。

二、大数据提高决策能力

当前,企业管理者还是更多依赖个人经验和直觉做决策,而不是基于数据。在信息有限、获取成本高昂,而且没有被数字化的时代,让身居高位的人做决策是情有可原的,但是大数据时代,就必须要让数据说话。

大数据能够有效的帮助各个行业用户做出更为准确的商业决策,从而实现更大的商业价值,它从诞生开始就是站在决策的角度出发。虽然不同行业的业务不同,所产生的数据及其所支撑的管理形态也千差万别,但从数据的获取,数据的整合,数据的加工,数据的综合应用,数据的服务和推广,数据处理的生命线流程来分析,所有行业的模式是一致的。

这种基于大数据决策的特点是:一是量变到质变,由于数据被广泛挖掘,决策所依据的信息完整性越来越高,有信息的理性决策在迅速扩大,拍脑袋的盲目决策在急剧缩小。二是决策技术含量、知识含量大幅度提高。由于云计算出现,人类没有被海量数据所淹没,能够高效率驾御海量数据,生产有价值的决策信息。三是大数据决策催生了很多过去难以想象的重大解决方案。如某些药物的疗效和毒副作用,无法通过技术和简单样本验证,需要几十年海量病历数据分析得出结果;做宏观经济计量模型,需要获得所有企业、居民以及政府的决策和行为海量数据,才能得出减税政策最佳方案;反腐倡廉,人类几千年历史都没解决,最近通过微博和人肉搜索,贪官在大数据的海洋中无处可藏,人们看到根治的希望等等。

如果在不同行业的业务和管理层之间,增加数据资源体系,通过数据资源体系的数据加工,把今天的数据和历史数据对接,把现在的数据和领导和企业机构关心的指标关联起来,把面向业务的数据转换成面向管理的数据,辅助于领导层的决策,真正实现了从数据到知识的转变,这样的数据资源体系是非常适合管理和决策使用的。

在宏观层面,大数据使经济决策部门可以更敏锐地把握经济走向,制定并实施科学的经济政策;而在微观方面,大数据可以提高企业经营决策水平和效率,推动创新,给企业、行业领域带来价值。

三、大数据创新企业管理模式,挖掘管理潜力

当下,有多少企业还会要求员工像士兵一样无条件服从上级的指示?还在通过大量的中层管理者来承担管理下属和传递信息的职责?还在禁止员工之间谈论薪酬等信息?《华尔街日报》曾有一篇文章就说,NO。这一切已经过时了,严格控制,内部猜测和小道消息无疑更会降低企业效率。一个管理学者曾经将企业内部关系比喻为成本和消耗中心,如果内部都难以协作或者有效降低管理成本和消耗,你又如何指望在今天瞬息万变的市场和竞争环境下生存、创新和发展呢?

我们试着想想,当购物、教育、医疗都已经要求在大数据、移动网络支持下的个性化的时代,创新已经成为企业的生命之源,我们还有什么理由还要求企业员工遵循工业时代的规则,强调那种命令式集中管理、封闭的层级体系和决策体制吗?当个体的人都可以通过佩戴各种传感器,搜集各种来自身体的信号来判断健康状态,那样企业也同样需要配备这样的传感系统,来实时判断其健康状态的变化情况。

今天信息时代机器的性能,更多决定于芯片,大脑的存储和处理能力,程序的有效性。因而管理从注重系统大小、完善和配合,到注重人,或者脑力的运用,信息流程和创造性,以及职工个性满足、创造力的激发。

在企业管理的核心因素中,大数据技术与其高度契合。管理最核心的因素之一是信息搜集与传递,而大数据的内涵和实质在于大数据内部信息的关联、挖掘,由此发现新知识、创造新价值。两者在这一特征上具有高度契合性,甚至可以标称大数据就是企业管理的又一种工具。因为对于任何企业,信息即财富,从企业战略着眼,利用大数据,充分发挥其辅助决策的潜力,可以更好地服务企业发展战略。

大数据时代,数据在各行各业渗透着,并渐渐成为企业的战略资产。数据分析挖掘不仅本身能帮企业降低成本:比如库存或物流,改善产品和决策流程,寻找到并更好的维护客户,还可以通过挖掘业务流程各环节的中间数据和结果数据,发现流程中的瓶颈因素,找到改善流程效率,降低成本的关键点,从而优化流程,提高服务水平。大数据成果在各相关部门传递分享,还可以提高整个管理链条和产业链条的投入回报率。

四、大数据变革商业模式催生产品和服务的创新

在大数据时代,以利用数据价值为核心,新型商业模式正在不断涌现。能够把握市场机遇、迅速实现大数据商业模式创新的企业,将在IT发展史上书写出新的传奇。

大数据让企业能够创造新产品和服务,改善现有产品和服务,以及发明全新的业务模式。回顾IT历史,似乎每一轮IT概念和技术的变革,都伴随着新商业模式的产生。如个人电脑时代微软凭借操作系统获取了巨大财富,互联网时代谷歌抓住了互联网广告的机遇,移动互联网时代苹果则通过终端产品的销售和应用商店获取了高额利润。

纵观国内,以金融业务模式为例,阿里金融基于海量的客户信用数据和行为数据,建立了网络数据模型和一套信用体系,打破了传统的金融模式,使贷款不再需要抵押品和担保,而仅依赖于数据,使企业能够迅速获得所需要的资金。阿里金融的大数据应用和业务创新,变革了传统的商业模式,对传统银行业带来了挑战。

还有,大数据技术可以有效的帮助企业整合、挖掘、分析其所掌握的庞大数据信息,构建系统化的数据体系,从而完善企业自身的结构和管理机制;同时,伴随消费者个性化需求的增长,大数据在各个领域的应用开始逐步显现,已经开始并正在改变着大多数企业的发展途径及商业模式。如大数据可以完善基于柔性制造技术的个性化定制生产路径,推动制造业企业的升级改造;依托大数据技术可以建立现代物流体系,其效率远超传统物流企业;利用大数据技术可多维度评价企业信用,提高金融业资金使用率,改变传统金融企业的运营模式等。

过去,小企业想把商品卖到国外要经过国内出口商、国外进口商、批发商、商场,最终才能到达用户手中,而现在,通过大数据平台可以直接从工厂送达到用户手中,交易成本只是过去的十分之一。以我们熟悉的网购平台淘宝为例,每天有数以万计的交易在淘宝上进行,与此同时相应的交易时间、商品价格、购买数量会被记录,更重要的是,这些信息可以与买方和卖方的年龄、性别、地址、甚至兴趣爱好等个人特征信息相匹配。运用匹配的数据,淘宝可以进行更优化的店铺排名和用户推荐;商家可以根据以往的销售信息和淘宝指数进行指导产品供应、生产和设计,经营活动成本和收益实现了可视化,大大降低了风险,赚取更多的钱;而与此同时,更多的消费者也能以更优惠的价格买到了更心仪的产品。

维克托曾预言2020年,大数据时代就会真正来临。在那个时候,最经常会用到的应用就是个性化生活所需要的,尤其是智能手机的应用。

五、大数据让每个人更加有个性

对个体而言,大数据可以为个人提供个性化的医疗服务。比如,我们的身体功能可能会通过手机、移动网络进行监控,一旦有什么感染,或身体有什么不适,我们都可以通过手机得到警示,接着信息会和手机库进行对接或者咨询相关专家,从而获得正确的用药和其他治疗。

过去我们去看病,医生只能对我们的当下身体情况做出判断,而在大数据的帮助下,将来的诊疗可以对一个患者的累计历史数据进行分析,并结合遗传变异、对特定疾病的易感性和对特殊药物的反应等关系,实现个性化的医疗。还可以在患者发生疾病症状前,提供早期的检测和诊断。早期发现和治疗可以显著降低肺癌给卫生系统造成的负担,因为早期的手术费用是后期治疗费用的一半。

还有,在传统的教育模式下,分数就是一切,一个班上几十个人,使用同样的教材,同一个老师上课,课后布置同样的作业。然而,学生是千差万别的,在这个模式下,不可能真正做到“因材施教”。

如一个学生考了90分,这个分数仅仅是一个数字,它能代表什么呢?90分背后是家庭背景、努力程度、学习态度、智力水平等,把它们和90分联系在一起,这就成了数据。大数据因其数据来源的广度,有能力去关注每一个个体学生的微观表现:如他在什么时候开始看书,在什么样的讲课方式下效果最好,在什么时候学习什么科目效果最好,在不同类型的题目上停留多久等等。当然,这些数据对其他个体都没有意义,是高度个性化表现特征的体现。同时,这些数据的产生完全是过程性的:课堂的过程,作业的情况,师生或同学的互动情景……而最有价值的是,这些数据完全是在学生不自知的情况下被观察、收集的,只需要一定的观测技术与设备的辅助,而不影响学生任何的日常学习与生活,因此它的采集也非常的自然、真实。

在大数据的支持下,教育将呈现另外的特征:弹性学制、个性化辅导、社区和家庭学习、每个人的成功……大数据支撑下的教育,就是要根据每一个人的特点,释放每一个人本来就有的学习能力和天分。

此外,维克托还建议中国政府要进一步补录数据库。政府以前提供财政补贴,现在可以提供数据库,打造创意服务。在美国就有完全基于政府提供的数据库,如为企业提供机场、高速公路的数据,提供航班可能发生延误的概率,这种服务这可以帮助个人、消费者更好地预测行程,这种类型的创新,就得益于公共的大数据。

六、智慧驱动下的和谐社会

美国作为全球大数据领域的先行者,在运用大数据手段提升社会治理水平、维护社会和谐稳定方面已先行实践并取得显着成效。

近年来,在国内,“智慧城市”建设也在如火如荼的开展。截止去年底,我国的国家智慧城市试点已达193个,而公开宣布建设智慧城市的城市超过400个。智慧城市的概念包含了智能安防、智能电网、智慧交通、智慧医疗、智慧环保等多领域的应用,而这些都要依托于大数据,可以说大数据是“智慧”的源泉。

在治安领域,大数据已用于信息的监控管理与实时分析、犯罪模式分析与犯罪趋势预测,北京、临沂等市已经开始实践利用大数据技术进行研判分析,打击犯罪。

在交通领域,大数据可通过对公交地铁刷卡、停车收费站、视频摄像头等信息的收集,分析预测出行交通规律,指导公交线路的设计、调整车辆派遣密度,进行车流指挥控制,及时做到梳理拥堵,合理缓解城市交通负担。

在医疗领域,部分省市正在实施病历档案的数字化,配合临床医疗数据与病人体征数据的收集分析,可以用于远程诊疗、医疗研发,甚至可以结合保险数据分析用于商业及公共政策制定等等。

伴随着智慧城市建设的火热进行,政府大数据应用已进入实质性的建设阶段,有效拉动了大数据的市场需求,带动了当地大数据产业的发展,大数据在各个领域的应用价值已得到初显。

七、大数据如何预言未来?

著名的玛雅预言,尽管背后有着一定的天文知识基础,但除催生了一部很火的电影《2012》外,其实很多人的生活尚未受到太大的影响。现在基于人类地球上的各种能源存量,以及大气受污染、冰川融化的程度,我们获取真的可以推算出按照目前这种工业生产、生活的方式,人类在地球上可以存活的年数。《第三次工业革命》中对这方面有很深入的解释,基于精准预测,发现现有模式是死路一条后,人类就可以进行一些改变,这其实就是一种系统优化。

这种结合之前情景研究,不断进行系统优化的过程,将赋予系统生命力,而大数据就是其中的血液和神经系统。通过对大数据的深入挖掘,我们将会了解系统的不同机体是如何相互协调运作的,同样也可以通过对他们的了解去控制机体的下一个操作,甚至长远的维护和优化。从这个角度讲,基于网络的大数据可以看作是人类社会的神经中枢,因为有了网络和大数据人类社会才开始灵活起来,而不像以前那么死板。基于大数据,个体之间相互连接有了基础,相互的交互过程得到了简化,各种交易的成本减少很多。厂家等服务提供方可以基于大数据研发出更符合消费者需求的服务,机构内部的管理也更为细致,有了血液和神经系统的社会才真的拥有生命活力。

结语

透过以上这些行业典型的大数据应用案例和场景,不难悟出大数据的典型的核心价值。大数据是看待现实的新角度,不仅改变了市场营销、生产制造,同时也改变了商业模式。数据本身就是价值来源,这也就意味着新的商业机会,没有哪一个行业能对大数据产生免疫能力,适应大数据才能在这场变革中继续生存下去。

当下,正处于数据大爆发的时代,如何获取这些数据并对这些数据进行有效分析就显得尤为重要。各种企业机构之间的竞争非常残酷。如何基于以往的运行数据,对未来的运行模式进行预测,从而提前进行准备或者加以利用、调整,对很多企业机构其实是一种生死存亡的问题。这样一种情况同样适用于国家级别。正因为这一点,目前无论是在企业级别还是国家级别都开始研究、部署大数据。

可见,大数据应用已经凸显出了巨大的商业价值,触角已延伸到零售、金融、教育、医疗、体育、制造、影视、政府等各行各业。你可能会问这些具体价值实现的推动者有哪些呢?就是所谓的大数据综合服务提供商,从实践情况看,主要包括大数据解决方案提供商、大数据处理服务提供商和数据资源提供商三个角色,分别向大数据的应用者提供大数据服务、解决方案和数据资源。

未来大数据还将彻底改变人类的思考模式、生活习惯和商业法则,将引发社会发展的深刻变革,同时也是未来最重要的国家战略之一。

大数据的计算问题

大数据计算发展至今,已经形成了一个百花齐放的大数据生态,通用计算、定制开发,批量处理、实时计算,关系查询、图遍历以及机器学习等等,我们都可以找到各种对应的计算引擎来协助我们处理这些任务。本系列文章拟以大数据平台从低到高的层次为主线,梳理整个大数据计算生态组件及其功能。

计算层是整个大数据计算生态的核心,计算引擎为各个数据任务提供算力支持。本文将详细介绍计算层的各个计算引擎。
目前可以大致把计算引擎分为批处理、流处理和即席(Ad-Hoc)查询和图查询四类。
批处理指的是大规模复杂的数据处理过程,通常的时间跨度在几分钟到数小时甚至数日;流处理指的是实时的数据处理和查询,通常的时间跨度在数百毫秒到数秒之间;即席(Ad-Hoc)查询指的是介于实时和批处理之间的一种查询处理,如一些交互式的数据探查任务,需要秒级或分钟级的较快的响应时间。图查询是基于图模型进行的数据查询,图查询涉及到更多的是迭代类的操作,常见的图算法如路径搜索算法、中心性算法以及社群发现算法等,这些算法在公安系统和银行金融领域中的打击犯罪团伙、金融欺诈、信用卡盗刷等领域有着重要的应用。

一、批处理

目前,在批处理领域,使用最多的计算引擎当属HadoopMR和Spark两者。HadoopMR是最早的批处理引擎,是根据Google的”三驾马车“实现的开源计算框架,主要是解决海量数据的计算问题。由于HadoopMR在处理效率上的一系列问题,Spark应运而生,Spark 针对Hadoop MR2.0存在的问题,对MapReduce做了大量优化。

1.MapReduce(Hadoop)

MapReduce就是指我们常说的Hadoop MapReduce,它是一个批处理计算引擎。每个MapReduce任务都包含两个过程:Map过程和Reduce过程。

2. Spark

与Hadoop MapReduce不同的是,Spark是基于内存的批处理计算引擎。SparkSpark及其组件已经形成了一个大数据生态,Spark基于这个引擎,提供了很多的高级应用模块解决不同场景中的业务需求。Spark分为Spark Core、SparkSQL、SparkStreaming、GraphX以及MLLib等,SparkCore为Spark的核心和基础,提供基本的批处理功能,其他的每个组件专注于不同的处理任务。
Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core;

Spark SQL:Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;

Spark Streaming:Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业。Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等;

MLlib(机器学习):MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;

GraphX(图计算):GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

Spark与Hadoop相比主要有且不限于以下几个优势:

(1)减少磁盘I/O

Hadoop的的map和reduce过程每此处理都要涉及读写磁盘,map端的中间结果也要排序并写入磁盘,reduce从磁盘中进行读取;这样整个处理过程中磁盘I/O就成了处理瓶颈;Spark允许将map端的中间结果放入内存,reduce直接从内存中拉取数据,避免了大量的磁盘I/O。

(2)提高并行度

MapReduce的并行度是进程级别,Spark是线程级别;MapReduce需要进行磁盘的map写入,reduce读取,属于串行执行;spark把不同环节抽象为stage,允许多个stage串行执行或并行执行。

(3)避免重复计算

Spark中通过DAG(有向无环图)来串起数据处理的各个Stage阶段,如果某个阶段发生故障或者数据丢失,可以利用血缘机制来回溯某个RDD,从而减少数据的重新计算,提高效率。

从以上我们看到Spark对Hadoop MR存在的问题都进行了优化,从而提升了数据处理的效率。根据Spark官方提供的性能对比数据,Spark性能比Hadoop高出120倍。
通过上图简单的一个wordCount统计的例子,可以大致了解Spark进行数据处理的流程,体会Spark的pipeline管道计算模式的优势。

二、流处理

Spark的Spark Streaming和Storm是比较早的流计算框架,随着流计算技术的发展,Storm逐渐被遗弃,Flink作为一匹流计算的黑马得到了业界的广泛应用。Spark Streaming也依靠Spark生态生存了下来。但是面对Spark Streaming对于Flink表现出的不足,从Spark 2.3开始,Structured Streaming引入了低延迟的持续流处理模式,这时候已经不再采用批处理引擎,而是一种类似Flink机制的持续处理引擎,可以达到端到端最低1ms的延迟。

1.Storm

Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。Apache Storm从一端读取实时数据的原始流,并将其传递通过一系列小处理单元,并在另一端输出处理/有用的信息。

在Storm中,需要先设计一个实时计算结构,也就是拓扑(topology)。这个拓扑结构会被提交给集群,其中主节点(master node)负责给工作节点(worker node)分配代码,工作节点负责执行代码。在一个拓扑结构中,包含spout和bolt两种角色。数据在spouts之间传递,这些spouts将数据流以tuple元组的形式发送;而bolt则负责转换数据流。


下图描述了Apache Storm的核心概念。

2.Spark Streaming

Spark Streaming属于Spark的一个组件,是基于批的流式计算框架,支持Kafka、Flume及简单的TCP套接字等多种数据输入源,输入流接收器(Reciever)负责接入数据。DStream是SparkStreaming中的数据流抽象,它也可以被组织为DStreamGraph。Dstream本质上由一系列连续的RDD组成。

Spark Streaming,即核心Spark API的扩展,不像Storm那样一次处理一个数据流。相反,它在处理数据流之前,会按照时间间隔对数据流进行分段切分。Spark针对连续数据流的抽象,我们称为DStream(Discretized Stream)。

DStream是小批处理的RDD(弹性分布式数据集), RDD则是分布式数据集,可以通过任意函数和滑动数据窗口(窗口计算)进行转换,实现并行操作。

3.Flink

Flink是一个面向数据流处理和批量数据处理的可分布式的开源计算框架,它基于同一个Flink流式执行模型(streaming execution model),能够支持流处理和批处理两种应用类型。

Flink最核心的数据结构是Stream,它代表一个运行在多分区上的并行流。

在 Stream 上同样可以进行各种转换操作(Transformation)。与 Spark 的 RDD 不同的是,Stream 代表一个数据流而不是静态数据的集合。所以,它包含的数据是随着时间增长而变化的。而且 Stream 上的转换操作都是逐条进行的,即每当有新的数据进来,整个流程都会被执行并更新结果。这样的基本处理模式决定了 Flink 会比 Spark Streaming 有更低的流处理延迟性。当一个 Flink 程序被执行的时候,它会被映射为 Streaming Dataflow,上图就是一个Streaming Dataflow。

Structured Streaming

Spark 2.0 引入了Structured Streaming, 将微批次处理从高级 API 中解耦出去。它简化了 API 的使用,API 不再负责进行微批次处理;开发者可以将流看成是一个没有边界的表,并基于这些“表”运行查询。Structured Streaming的默认引擎基于微批处理引擎,并且可以达到最低100ms的延迟和数据处理的exactly-once保证。采用何种处理模式只需要进行简单的模式配置即可。

Structured Streaming定义了无界表的概念,即每个流的数据源从逻辑上来说看做一个不断增长的动态表(无界表),从数据源不断流入的每个数据项可以看作为新的一行数据追加到动态表中。用户可以通过静态结构化数据的批处理查询方式(SQL查询),对数据进行实时查询。

Structured Streaming通过不同的触发模式来实现不同的延迟级别和一致性语义。主要提供了以下四种触发模式:

单次触发:顾名思义就是只触发一次执行,类似于Flink的批处理;
周期性触发:查询以微批处理模式执行,微批执行将以用户指定的时间间隔来进行;
默认触发:一个批次执行结束立即执行下个批次;
连续处理:是Structured Streaming从2.3开始提出的新的模式,对标的就是Flink的流处理模式,该模式支持传入一个参数,传入参数为checkpoint间隔,也就是连续处理引擎每隔多久记录查询的进度;

三、即席查询(Ad-Hoc)

1.Impala

Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。与其他Hadoop的SQL引擎相比,它提供了查询的高性能和低延迟。它提供了访问存储在Hadoop分布式文件系统中的数据的最快方法。与Hive依赖于MapReduce计算不同,Impala采用的是基于内存的计算,因此可以更快地完成计算任务。

上图是Impala的结构图,Impala主要包括三大核心组件:

Impala Daemon:impalad是Impala的核心进程,运行在所有的数据节点上,可以读写数据,并接收客户端的查询请求,并行执行来自集群中其他节点的查询请求,将中间结果返回给调度节点。调用节点将结果返回给客户端。用户在impala集群上的某个节点提交数据处理请求 则该节点称为coordinator node(协调器节点),其他的集群节点传输其中的处理的部分数据到该coordinator node,coordinator node负责构建最终的结果数据返回给用户;impala 支持在提交任务的时候(采用JDBC ,ODBC 方式) 采用round-robin算法来实现负载均衡,将任务提交到不同的节点上;impalad 进程通过持续的和statestore 通信来确认自己所在的节点是否健康 和是否可以接受新的任务请求
Impala Statestore(主要优化点,线程数):状态管理进程,定时检查The Impala Daemon的健康状况,协调各个运行impalad的实例之间的信息关系,Impala正是通过这些信息去定位查询请求所要的数据,进程名叫做 statestored,在集群中只需要启动一个这样的进程,如果Impala节点由于物理原因、网络原因、软件原因或者其他原因而下线,Statestore会通知其他节点,避免查询任务分发到不可用的节点上。
Impala Catalog Service(元数据管理和元存储):元数据管理服务,进程名叫做catalogd,将数据表变化的信息分发给各个进程。接收来自statestore的所有请求,每个Impala节点在本地缓存所有元数据。当处理极大量的数据和/或许多分区时,获得表特定的元数据可能需要大量的时间。 因此,本地存储的元数据缓存有助于立即提供这样的信息。当表定义或表数据更新时,其他Impala后台进程必须通过检索最新元数据来更新其元数据缓存,然后对相关表发出新查询。
Impala的优点是支持JDBC/ODBC远程访问,支持SQL查询,快速查询大数据,无需转换为MR,直接读取HDFS数据,支持列式存储,多种存储格式可以选择,可以与Hive配合使用,兼容HiveSQL,基于内存进行计算,能够对PB级数据进行交互式实时查询、分析;缺点是不支持用户定义函数UDF,不支持text域的全文搜索,不支持Transforms,不支持查询期的容错,对内存要求高,完全依赖于Hive等。

2.Presto

Presto是一个Facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。Presto的架构由关系型数据库的架构演化而来。Presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点:

(1) 清晰的架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。例如调度,Presto自身提供了对集群的监控,可以根据监控信息完成调度。

(2)简单的数据结构,列式存储,逻辑行,大部分数据都可以轻易的转化成presto所需要的这种数据结构。

(3)丰富的插件接口,完美对接外部存储系统,或者添加自定义的函数。
上图为Presto的架构图,Presto采用典型的master-slave模型:

(1)coordinator(master)负责meta管理,worker管理,query的解析和调度;

(2)worker则负责计算和读写;

(3)discovery server, 通常内嵌于coordinator节点中,也可以单独部署,用于节点心跳。在下文中,默认discovery和coordinator共享一台机器;

联邦查询:Presto另外一个非常重要的优点是可以兼容不同的数据源,上图详细展示了Presto用于数据源扩展的Connector模块的逻辑架构。逻辑架构中展示了进行自定义数据源开发的三个主要的API,分别是元数据提取、数据存储位置获得和读数据,只要实现了对应的接口便可以进行新的数据源的接入。通过这一特定,可以支持跨数据源的数据探查、即席查询,从而减少传统OLAP分析过程中的数据搬家等步骤。

3.ClickHouse

ClickHouse是一个面向联机分析处理(OLAP)的开源的面向列式存储的DBMS,与Hadoop和Spark相比,ClickHouse很轻量级,由俄罗斯第一大搜索引擎Yandex于2016年6月发布。

ClickHouse的特点:

(1)开源的列存储数据库管理系统,支持线性扩展,简单方便,高可靠性;

(2)容错跑分快:比Vertica快5倍,比Hive快279倍,比MySQL快800倍,其可处理的数据级别已达到10亿级别;

(3)功能多:支持数据统计分析各种场景,支持类SQL查询,异地复制部署;

ClickHouse最近也是比较火,很多公司用它来进行即时查询任务,如字节、携程等。ClickHouse有如下特色;

列式存储:牛逼的OLAP,列式存储已经是标配,使得数据压缩也有了用武之地。直接效果就是减少数据扫描范围,让I/O更高效。
MPP架构:多主架构,角色对等,数据分片(Shard)和副本(Replica)的结合,既保证了扩展能力,也增强可数据冗余保护,坏几块硬盘,宕几台服务器都能扛得住。
CPU计算:支持CPU向量运算,将单体循环变为并行处理,充分利用硬件和算法,提升计算效率,所以彪悍的快。
存储引擎:我感觉是过于繁杂了。从ClickHouse的发展历史看,明显受到MySQL的影响。在数据库和表层面都需要规划存储引擎。有人说通用,意味着平庸。像ClickHouse这样,繁杂代表着专业和场景定制。
MergeTree系列表引擎,与ZooKeeper配合支撑Distributed表。另外,ClickHouse的数据类型也是别具一格,对负责设计的架构师有很高的要求。
总之,ClickHoue是个小巧玲珑,性能极佳的数据库管理系统。这一点与我印象中的俄式米格战斗机相去甚远。

四、图计算

图计算主要将客观世界中事物间关系完整地刻画、计算和分析的一门技术。它可以用于银行对于不良贷款的预测,也可以用于网站大数据分析推荐等功能。图算法有很多种,每一种算法都有其实际的应用场景。常见的图算法有PageRank、最短路径、社群发现等算法。

图计算有两种模型的计算框架,分别是基于同步的BSP模型(Bulk Synchronous Parallel Computing Model,整体同步并行计算模型)的GraphX和Giraph,这样的优势在于可以提升数据处理的吞吐量和规模,但在速度会稍逊一筹。另一种是基于MPI模型的异步图计算模型GraphLab。

GraphX


与GraphX可以组合使用的有图数据库Neo4j、Titan。Titan是一个分布式的图形数据库,特别为存储和处理大数据图形而优化,它们都可以作为GraphX的持久层,存储大规模图数据。

Spark的每一个模块,都有自己的抽象数据结构,GraphX的核心抽象是弹性分布式属性图(resilient distribute property graph),一种点和边都带有属性的有向多重图。它同时拥有Table和Graph两种视图,而只需一种物理存储,这两种操作符都有自己独有的操作符,从而获得灵活的操作和较高的执行效率。
在工业级的应用中,图的规模很大,为了提高处理的速度和数据量,我们希望使用分布式的方式来存储,处理图数据。图的分布式存储大致有两种方式,边分割(Edge Cut),点分割(Vertex Cut),在早期的图计算框架中,使用的是边分割的存储方式,后期考虑到真实世界中大规模图大多是边多于点的图,所以采用点分割方式来存储。点分割能减少网络传输和存储开销,底层实现是将边放到各个节点存储,而进行数据交换的时候将点在各个机器之间广播进行传输。

GraphX的整体架构可以分为三个部分:

存储层和原语层:Graph类是图计算的核心类,内部含有VertexRDD、EdgeRDD和RDD[EdgeTriplet]引用。GraphImpl是Graph类的子类,实现了图操作。

接口层:在底层RDD的基础之上实现Pragel模型,BSP模式的计算接口。

算法层:基于Pregel接口实现了常用的图算法。包含:PageRank、SVDPlusPlus、TriangleCount、ConnectedComponents、StronglyConnectedConponents等算法。

2.Giraph

Google 提出了 Pregel 来解决图算法在 MapReduce 上运行低效的问题,但没有开源。Facebook 根据 Pregel 的思路发展了开源系统 Giraph,但 Giraph 有两个问题:一是 Giraph 的社区不是很活跃;二是现实生活中的图都是符合幂律分布的图,即有一小部分点的边数非常多,这些点在 Pregel 的计算模式下很容易拖慢整个计算任务。

计算模型

Giraph 的整个计算模型,主要由输入、一系列 Superstep 迭代计算、输出构成,其中这些 Superstep 被称之为 BSP(Bulk Synchronous Parallelism) 模型。

BSP 模型

BSP 模型是一个块同步并行模型,其由许多个 Superstep 组成。对于 BSP 模型而言,其在 Superstep 内的操作是并行的,但在两个 Superstep 之间则是由一个同步操作进行隔离的。也就是说 Superstep(N + 1) 会等待 Superstep(N) 执行完成之后才会开始。

上图显示了 Superstep 的结构图,一个 Superstep 由局部计算、通讯、栅栏同步 三个部分构成。可以看到即使有部分的计算比较快,但最终还是会在栅栏同步这里停下等待其余的计算完成。在图计算中应用这种模型的好处是:可以解决图计算的同步问题,同步模型有利于推断程序语义(即利于编程),并且消除了死锁和数据竞争的问题。

最后再简单介绍一下 Giraph 的整个运行流程:

Giraph 向 Hadoop 提交 Job 之后,Zookeeper 将会选出一个 MapTask 作为 Giraph 的 Master,其余的 MapTask 则作为 Worker。然后这些 Worker 会通过 Zookeeper 命名服务找到 Master,并向 Master 进行注册。

Master 将会对输入图进行分区,并发送分区信息给 Worker,Woker 会对分区进行读取,期间可能会发生 Worker 之间的分区交换。

之后 Master 会开始协调 Worker 迭代执行 Superstep,Worker 将会在 Superstep 中完成顶点的计算过程,直到所有的顶点处于不活跃状态之后结束计算。

在计算结束之后,Giraph 将会根据用户指定的格式输出结果。

3.GraphLab


GraphLab是最早由卡耐基梅隆大学SELECT实验室于Pregel同时期推出的图计算系统。与Pregel的动机或者说目标不同,GraphLab主要面向机器学习/数据挖掘问题:针对很多这类算法需要在稀疏数据上进行迭代式计算的特点,GraphLab把输入/输出数据以图的形式进行表示,并将算法抽象为图上的计算过程。因此,尽管都采用了以顶点为中心的图计算模型,GraphLab在一些设计决策上与Pregel有较大的不同:GraphLab中的通信发生在各个顶点不同副本间的状态同步,而非Pregel中的消息传递;GraphLab主要采用异步的计算模式,通过多种级别的一致性来保证算法的收敛效率,而Pregel是典型的同步计算模式。

GraphLab的执行模型:每个顶点每一轮迭代经过gather->apple->scatter三个阶段。

(1)gather:从邻接顶点和自身收集数据,记为gather_data_i,各个边的数据graphlab会求和,记为sum_data。

(2)Mirror将gather计算的结果sum_data发送给master顶点,master进行汇总为total。Master利用total和上一步的顶点数据,按照业务需求进行进一步的计算,然后更新master的顶点数据,并同步mirror。

(3)顶点更新完成之后,更新边上的数据,并通知对其有依赖的邻结顶点更新状态。

以上的介绍的图计算引擎都是大数据计算生态中用于图处理的计算框架,随着图数据的广泛应用,还有很多其他用于图数据存储和图计算的系统,例如JanusGraph、HugeGraph、PowerGraph等。

本文标签: 相关内容数据