首页 > 编程笔记

什么是大数据

想了解什么是大数据?首先需要知道什么是数据,其实文本、声音、图片、视频都是数据,例如你用手机数据线连上电脑的时候上传的都是数据。

那么大数据如何定义呢?大数据指的就是数据体量达到了一定的级别,而我们现有的算法和工具无法在合理的时间内给予处理,这样的数据才可以称为大数据。

当然,大数据还包括多样性(Variety)、价值密度低(Valueless)、处理速度快(Velocity)等特点,但最重要的特点还是数据量(Volume)要大。

我们知道描述一个物品很大的时候是需要带上单位的。比方说,姚明很高,身高 230,这样描述显然不准确,是 cm(厘米)还是 mm(毫米),如果 230mm,那它只是个模型。同样道理,大数据也需要带有度量单位,下面是一些数据单位之间的换算关系。

表:数据单位
数据单位 含 义 换算公式
B Byte,字节 1B = 8bit
KB Kilobyte,千字节 1KB = 1024B
MB Mega byte,兆字节,简称兆 1MB = 1024KB
GM Giga byte,吉字节,又称千兆 1GB = 1024MB
TB Tera byte,万亿字节,太字节 1TB = 1024GB
PB Peta byte,千万亿字节,拍字节 1PB = 1024TB
EB Exa byte,百亿亿字节,艾字节 1EB = 1024PB
ZB Zetta byte,十万亿亿字节,泽字节 1ZB = 1024 EB
YB Yotta byte,一亿亿亿字节,尧字节 1YB = 1024 ZB
BB Bronto byte,一千亿亿亿字节 1BB = 1024 YB
NB Nona byte 1NB = 1024BB
DB Dogga byte 1DB = 1024NB

大家使用迅雷下载电影,下载速度显示的 500KB,B 指的就是基本单位,即字节 byte。其实大家对 KB、MB、GB 应该都是有一定的概念,例如使用手机拍一幅帅照大约 1MB 左右,一部电影差不多是几个 GB,甚至大家对 TB 也有概念,大家现在买移动硬盘基本都是 TB 级的容量了。而真正的大数据是需要至少达到这些单位的级别的,比如 PB、EB、ZB、YB、NB 等。

其实,这些单位是为大数据而生的,本来没有这些单位。1PB 就相当于美国国家图书馆藏书的所有内容之和。而 Google 每天都在处理 20PB 的数据。一般认为达到 PB 级别的数据才可以称为大数据。

这里最大的单位是 YB,有家统计机构给出 1YB 相当于世界上所有海滩上的沙子粒数总和,准不准确无法验证,这只是说明数据体量达到了一个海量的级别。当然,还有更大的单位没有列出,比如比 YB 更大还有 NB,等等,数据增长不停止的话,单位定义不会停止。

大数据的来源

大数据一共有三个来源。

第一个来源是传统互联网企业依旧在产生巨大的数据,如京东、淘宝,等等。例如淘宝双 11 的当天,交易额可以突破千亿元,由交易产生的数据高达 46GB,这仅仅是一天的数据。

第二个来源是物联网的发展带来了大数据。我们已经进入了物联网时代,也就是在原来只有计算机组成的互联网基础上,加入许多非计算机节点。大街小巷的监控每天都在记录视频数据,物流中转站每天都在用手持设备扫描货物入库/出库记录,门禁数据,校园卡消费数据,家居智能产品产生的数据等。这些物联网设备在城市的每个角落随处可见,所以现在就有了智慧城市、智慧地球的概念,这是大数据很重要的一个来源。

第三个来源就是移动应用快速发展,人们都成了低头族,聊着 QQ,发着微信,顾不上跟人打招呼,都在忙着造大数据。移动应用也是大数据的重要来源。

如何处理大数据

随着数据越来越多,我们自然就会面临两个问题,第一个问题是这些大量历史数据还有用吗,为了节省空间可否删除呢?毕竟硬件资源有限。

答案是有用的,而且可能带来意想不到的价值。我们可能从大量数据中找到某些行业的规律或规则,这些规则可能会带来巨大收益。

第二个问题就是如何处理这些海量历史大数据呢?我们的处理办法就是传统的商业智能领域的数据挖掘技术。另外,还有一种处理技术是目前比较火的云计算技术,这种技术对数据处理的实时性要求很高,一般要求秒级处理。

数据分析与挖掘

分享一个真正通过数据挖掘收益的经典案例,最大零售超市沃尔玛拥有世界上最大的数据仓库系统,为了能够准确了解顾客在其门店的购买习惯,沃尔玛对其顾客的购物行为进行购物篮分析,想知道顾客经常一起购买的商品有哪些。通过数据挖掘和分析,一个意外的发现是:美国中年男子购买尿布的同时一般存在很大的可能会购买啤酒。通过分析后超市将啤酒和尿布摆放位置靠近,这样给超市带来了巨大收益。

国内百度大数据也做过很多次预测分析。2014 年世界杯足球赛,百度通过大数据分析了所有比赛,小组赛准确率达到 60%,淘汰赛阶段高达 100%。还有微软、Google等几家公司都利用大数据做了相应的预测。

这两个案例都是传统的数据分析领域,最终目的都是为了从大数据中找到一些规则或者作出预测,为企业决策提供帮助,有点像沙里淘金。为了一点点金粒,就要留住所有沙子。这里的金子就是规则和结果,大量沙子就是大数据。

数据分析的步骤类似于从沙子里淘金的步骤,其步骤如下:
上面讲到的两个案例都是实时性要求不高,不要求马上得到结果。如果希望快速得到结果,比如几秒钟得到处理结果,这就是大数据处理的另一个领域,即云计算。

基于云平台的分布式处理

介绍云计算之前,首先思考一个小问题:给出一篇文档,让你从中找出出现的单词以及这些单词出现的次数。

解题思路其实很简单,就是从头到尾读取文档,碰到单词记录下来,同时记录它出现的次数,如果之前出现过,计数就加1。

理清了思路,再思考一个问题,如果读取一个 100GB 的文档,使用原来的算法还能处理吗?还能在合理的时间内给出答案吗?我们知道从硬盘读取文件到内存是通过 IO 流进行的,而计算的大量时间耗费都在 IO 上了。由于读取的数据体量很大,所以无论你对算法本身如何调整和优化,数据处理的效率依然会很低。

那么应该如何快速处理呢?有两种解决方法,一是找一台运算性能非常高的服务器,存储和运算能力都很惊人,但造价同样惊人。SAP 公司内存数据库产品 HANA,直接将所有数据存储到内存,全部数据存储和运算在内存中进行。但造价非常昂贵。国内有几家公司在使用这样的产品,比如农夫山泉。但并不是所有企业都负担得起。

另一个方法就是把一些廉价的服务器形成集群,每个服务器都需要承担一定运算任务,合作完成。就这个例子而言,可以用 100 台普通计算机,每台计算 1GB 的数据,最后统计出来的结果合并在一起就可以了。这个方法既节省成本,而且速度又快,因为服务器之间是并行运算的。这种技术早期叫网格计算,后来叫分布式计算,其实本质上就是如今的云计算。

上面这个思想需要解决两个问题:一是分布式存储,大数据分别存储到不同机器,而对使用者感觉好像是一台机器;二是分布式计算问题,每台机器都需要分配一个任务执行运算,所有任务同时进行,最后还需要对各个节点的运算结果进行合并得到结果。能够解决这两个问题流行的云计算框架就是Apache的Hadoop项目,里面包含好多的子项目和模块。

Hadoop 被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop在开发工具、开源软件、商业化工具和技术服务。大型企业,如 Oracle、IBM、Microsoft、Intel、Cisco 都明显增加了 Hadoop 方面的投入。

淘宝从 2009 年开始,用于对海量数据的离线处理,例如对日志的分析、交易记录的分析等。规模从当初的 3~400 台节点,增加到现在的一个集群有 3000 个节点。淘宝现在已经有 2~3 个这样的集群,在支付宝的集群规模也有 700 台节点,对用户的消费记录可以实现毫秒级查询。

随着以博客、社交网络、基于位置的服务 LBS 为代表的新型信息发布方式的不断涌现,以及云计算、物联网等技术的兴起,数据正以前所未有的速度在不断地增长和累积,大数据时代已经到来。

推荐阅读