世俗之人
外行人一看就知道是要让所有东西都联上因特网。后来,又是云计算,说是要把计算放到云里去。云在哪里呢?反正在远处,也还可以理解。最近,在计算机软件领域,到处都在喊大数据。这有点不好理解。数据(data)是个不可数名词,怎么来大小了?我自己也一样,最近大致学习了一下,看大数据究竟要研究什么?提出来抛砖引玉吧!何谓“大”数据?70年代若干兆字节(MB)就算大量数据了,以后是千兆字节(GB)、兆兆字节(TB),而现在已经到了PB级(1PB=1024TB),而高端数据仓库已达EB级(1EB=1024PB)。反正是千倍千倍的往上翻。想想,光是全世界各地装的摄像头有多少,每时每刻都在产生数据。唱歌、通话、录音产生多少数据。多少亿人上网、发微博,多少数据!有了因特网,这些数据就都在网上流通,而不是死在那里。票子不流通就没有价值,数据也一样。数据不利用也毫无价值。所以,的确每天都产生大量的数据,需要处理。所以有大数据,而且需要处理。这一点,没有疑义。 在计算机领域,早就有数据库分支,后来发展到数据仓库,也有人叫海量数据处理。现在又提出所谓“大数据”。有了因特网以后,数据的一个重要特征是互动性和动态性,就是说任何用户既可以下载,也可以上传,也可以实时对话。例如在线商务,政府的群众情绪分析,卫生部门的流行病疫情分析,社会科学家研究社会网络如何扩散社会呼声及如何有效处理。但是,这些都属于大数据技术的应用,虽然每一个都需要一个应用程序,但不属于大数据技术本身。可这些都要求支持大量数据的计算、搜索和存储。因此,大数据分析和管理成为当今计算领域最关键性的挑战。 有人认为,大数据主要是数理统计,对大量同类型数据进行统计分析。这属于数理统计学科,不属于计算学科。也有人认为,大数据主要是数据挖掘、机器学习。这倒有点靠谱。但是,数据挖掘、机器学习是另外两个学科领域。不能把数据挖掘、机器学习包括在大数据的研究范围之内。大数据是数据库发展而来的。数据库要做的是数据的组织、存储和管理。关系数据库比较容易创建和存取,而且容易扩充。在数据库创建之后,一个新的数据种类能被添加而不需要修改所有的现有应用软件。并行数据库的SQL语言应运而生。但是,大数据来了以后,没有一个设备能存储这么大量的数据,它必须存储在许多的存储设备中。一个硬盘即使能存1TB,对于EB的数据也无济于事。而且,读写都很费时。串行地组织、管理、搜索这么大量的数据,用多么快的计算机都无能为力。因为超级计算机可以计算得很快,但与存储设备的输入输出快不了。所以,串行根本是不可取的,必须并行化。当前的大数据基本都运行于网络化的计算机群(Cluster of computers)上,每一个都有自己的处理器、存储器和硬盘。数据分布在多个计算机机群上,通常采用哈希分块,或者按范围、随机分块,或者队列,其处理一般用并行基于哈希的分而治之的算法。这里,“分布”和“并行”成了两个关键词。不可想象,能有一个计算机来管理整个计算机机群。更新、搜索数据都必须是分布式的,而且不能串行,一个一个地来做。Google开发了一个谷歌文件系统(GFS),可以在成百上千的机群里进行基于字符串的文件搜索。用户可以并行地加入数据,也可以实时地把数据加入到某一类中(MapRece)。Yahoo和其他Web公司,譬如Facebook,搞了一个谷歌大数据栈的开源软件,从而产生了现在很时髦的Hadoop平台及HDFS存储层。为了要实现在线事务处理(OLTP),容错不可少。由于上亿用户的同时使用,OLTP系统必须很快查找、更新用户资料,任务很多,要快、不能错、防攻击,而且还不能太贵。Google和Amazon都开发了他们自己的系统。今天,Hadoop和HDFS已经成为大数据分析占有统治地位的平台了。数据分析不能停留在MapRece水平,而是要更高层次的说明性语言,更容易表达、书写、找错。这样的语言大家都在搞。这样,问题就来了:我们是跟着这些大公司,跟踪和改进Hadoop,还是另辟蹊径。我们搞跟踪搞了几十年了,基本都用人家的,然后搞汉化。人家搞汉化甚至比我们还快。我们搞出来的东西常常没人家好用,市场就先入为主,被人家占领了。另外搞一个类似的东西,既抢不到市场,学术价值也不大。这时候,科学研究就见功力了。抓不住基础性问题,没有全新的想法,就很难出原始创新的成果。 归根结底,基础性问题是大数据的分布存储,并行处理。就像一个人有一个任务,需要许多人参与才能完成,而且他们互不相识,任何个人都完不成。应该怎么做?大家想想,也许能把这个问题说得更加确切一些。