
信息平台和数据科学家的兴起.doc
8页信息平台和数据科学家的兴起信息平台和数据科学家的兴起————Facebook 工程师的一手工程实践工程师的一手工程实践 图书馆和大脑图书馆和大脑在我 17 岁的时候,我丢掉了在印第安纳州杂货铺的出纳员的工作,在我上大学前仅两 个月里,我看到了没有工作带来的机遇我没有告诉父母自己被解雇了每天下午,我仍 然穿着出纳员的工作服离开家:黑色裤子、黑色皮鞋、白色衬衫,还有罩衫在父母看来, 我这身穿着是为严谨的账单审查工作准备,实际上,我是要在公共图书馆看书 10 个小时 所有好奇心强的人都想知道大脑是如何工作的,17 岁的我更是超乎寻常的好奇我在 图书馆,里学习大脑如何工作、休息和重建除了使我们保持平衡、调整体温、不时地眨 眨眼,大脑还摄取、处理和生成大量的信息我们对周围的环境产生无意识的条件反射, 养成短期口头禅和肢体特征,做出择偶和教育的长期计划大脑令人感兴趣的不仅仅是它 对感官数据做出反应的能力,而是作为信息库,生成计划和创建新的信息我很想知道它 是如何工作的 然而,大脑的特点是其存储的信息只在一个人身上为了从很多大脑收集信息,我们 建造了图书馆为了今后利用,图书馆科学领域已经为图书馆的信息存储发展了众多的技 术。
关于该课题的一个有趣的读本是 Alex Wright 的《Glut》 除了今后检索存储信息,图 书馆在创建新信息方面也起了重大作用正如哲学家 Daniel Dennett 所说的:“学者是以 图书馆的方式创建另一个图书馆” 图书馆和大脑信息平台的两个例子它们组织进行摄取、处理和生成信息的场所,它 们加速了从经验数据中学习的过程当我在 2006 年加入 FaceBook 时,很自然地开始构建 了一个信息平台因为 FaceBook 用户数据剧增,我们团队构建系统最终需要管理超过 PB 的数据在本章中,我将详细阐述在构建 FaceBook 信息平台遇到挑战,以及在开源软件 上构建解决方案过程中汲取的教训我还会概述在利用信息构建数据密集型产品和服务, 并且帮助企业制定、实现目标过程中,数据科学家所起到的重大作用在整个过程中,我 还会描述一些其他企业在过去几十年如何构建信息平台来处理这些问题的 在介绍开始前,首先要指出的是我去图书馆而不是去杂货店的计划还是很快泡汤了 自在读了几天书后,某天晚上我从图书馆出来时,却找不到车子了对我来说,在那时丢 车很平常,但停车场是空的,所以我知道出事了;最后是母亲发现我的伎俩,把我的车拖 走了。
在走回家的漫长路上,我在心里学会了一课:应该带着怀疑的态度来考虑自己的策 略,另外,不要和母亲斗智Facebook 具有自知之明具有自知之明在 2005 年 9 月,Facebook 首次向非大学生开放,允许高中生注册账号忠实的用户 愤怒了,但 Facebook 团队认为这是网站做出正常的方向那么它该如何证明它是正确的呢?此外,几乎所有可登录 Facebook 网站的学校中,Facebook 已经渗入学生当中,但还 是在有部分学校中,该网站一直不受青睐和那些更成功的网站相比,这些落后的网络对 于 Facebook 有什么区别呢? Facebook 团队该如何做才能激励他们成功? 当我在 2006 年 2 月参加 Facebook 面试时,他们正在积极地期望找到这些问题的答案 我曾经在大学学习数学,在华尔街工作近一年,工作内容是构建模型来预测利率、价格复 杂的衍生品和对冲抵押贷款池;有一定的编程经验,GPA 成绩“暗淡” 虽然我的背景可能不太理想,但是 Facebook 却给了我研究科学家的职位 几乎同时,Facebook 聘用一个报告分析主管该主管在解决问题方面的经验远远超过 我我们和另一个工程师一起,开始着手构建一个数据收集和存储平台,以便找到我们产 品上的问题。
我们第一个尝试是构建一个离线信息库,其中涉及两个方面:一是用 Python 脚本把查 询发到 Facebook 的 MYSQL 服务器层,二是采用 C++实现守护进程,实时地处理事件日志 当脚本可以如期运行,我们每天收集大约 10G 的数据我后来明白系统的这部分通常称为 ETL 过程,即抽取、转换和加载 Python 脚本和 C++守护进程从 Facebook 的数据源系统中抽取数据,然后这些数据又 被加载到 MYSQL 数据库用于离线查询我们在包含这些数据的 MYSQL 上又运行了一些 脚本和查询,对数据进行聚集,以便得到更有用的表现方式这种用于决策支持的离线数 据库即数据仓库 最后通过简单的 PHP 脚本把数据从离线的 MYSQL 数据库中抽取出来,向内部用户展 示收集到信息摘要这是我们第一次可以回答网站特性对用户行为的影响早期通过以下 几种渠道分析最大分增长:登出用户的默认页面的布局、邀请来源、EMAIL 联系方式导入 器设计除以上分析,我们开始通过历史数据开发简单的产品,包括对赞助商成品特性进 行聚集的内部项目实践证明,该项目很受品牌广告商的欢迎 我那时没有意识到,实际上,通过 ETL 框架、数据仓库和内部控制台,我们已经构建 了一个简单的商业智能系统(BI) 。
商业智能系统商业智能系统在 1958 年 IBM 系统期刊的一篇论文中,HANS 描述了一个系统,该系统基于每个用 户动作点的兴趣信息,将文件通过“选择性传播”到动作点上作者描述了令人震撼的预 测科学理论该文章的标题是“一个商业智能系统” ,它是商业智能这一术语在现代环境中 的第一次应用 除了实时传播信息,该系统还可以进行信息检索,即搜索,可以在全文资料库中执行 他强调动作点,突出了信息处理角色在完成任务中的重要性换句话说,仅仅收集和聚集 数据是不够的;由于利用数据进行推断的洞察力很重要,企业必须提高能力来完成艰巨的 任务他还提出“报告人”需要周期性地筛选数据,有选择地将信息转移到需要的动作点 上 从他的论文发表之后,商业智能领域在过去五年得到不断发展, “商业智能”这个术 语和结构化数据的管理更加紧密相关今天,经典的商业智能系统是由 ETL 框架和商业智 能工具组成:ETL 有规律地把一组数据源中的数据抽取出来并加载到数据仓库中;商业分 析师利用商业智能工具在该数据仓库上生成报告供内部使用那么,我们是如何从他的愿 景走到今天的呢? 在 1970 年,E.F.Codd 首先提出关系模型;上个世纪七十年代中期,IBM 拥有了关系 数据库管理系统的工作原型。
RDBMS 极大地促进了构建面向用户的应用,到了数年之后, 这些应用已经非常普遍 在 1983 年,Teradata 出售了第一个关系数据库,该数据库是专门为 Fargo 公司的决策 支持而设计几年后,Red Brick Systems 公司成立,面向相同的市场构建数据库以后应 用开发商就使用 Teradata 和 Red Brick 系统来开发解决方案,但是直到 1991 年,在数据仓 库方面的首篇经典论文才发表 Bill Inmon 的《Building the Data WareHouse》一书,对数据仓库设计做了连贯清晰的阐述,它包含构建数据仓库的详细方面和最佳实践Inmon 提供先仔细研究已有的数据源 和商业目标,再构建企业数据模型 在 1995 年,随着他的书越来越受欢迎,数据仓库在企业数据中心内大量繁衍,数据 仓库机构 TDWI 诞生了TDWI 组织了有关会议和报告,在阐述和传播数据仓库方面知识 上,其仍然是个核心力量在斯坦福大学启动它的 WHIPS 研究机构那年,数据仓库在学 术领域开始传播 1996 年,Ralph Kimball 发布了《The Data Warehouse Tookit》一书,对 Inmon 理论进 行挑战。
Kimball 提出了实现数据仓库的 Nirvana 的不同方式,首先摒弃了企业数据模型 他认为不同企业单位应该构建他们自己的数据集市,这些集市可以通过总线相连此外, 他提倡使用多维建模,而不是使用范化的数据模型,前者的关系数据模型可以通过少量的 人工干预来适应很多数据仓库实现中特定的工作负荷 随着数据仓库的增长,通过情况下,商业分析家想要快速地操作少量的数据子集,通 常这些数据是通过几个维度参数来描述的基于这些观察,微软的一组研究人员,包括 Jim Gray,在 1997 年推出了 Cube 操作符该新的操作符允许在小的、多维的数据集上进 行快速查询 维度模型和 CUBE 操作符都意味着虽然关系模型在构建面向用户的应用方面获得了成 功,但它可能并不是构建信息平台的最佳方案此外,文档和动作点是 Luhn 关于商业智 能系统提议的核心,而不是表另一方面,整个工程师团队在构建关系数据处理系统中具 备出色的专业知识 在分析了一些背景知识后,我们再一起回到关于 Facebook 的探讨数据仓库的消亡和重起数据仓库的消亡和重起在 Facebook,我们不断地向 MYSQL 数据仓库加载更多的数据,执行更多的查询。
我 们只执行过为动态网站提供服务的数据查询,对于数据仓库上执行一条查询所需运行的时 间之长,令我们很惊讶在和一些经验丰富的数据仓库专家讨论后,我明白了由于查询复 杂性、数据量大或者两者兼备,查询执行几个小时甚至几天都是很正常的 有一天,我们的数据库数据总量接近 1TB,MYSQLD 守护进程突然中断了在诊断 了一段时间后,我们试着重启数据库,熬了一宿,直到重启操作开始执行,我们才回家 当我次日早上回去工作时,数据库还在恢复状态由于数据被很多客户修改,为了获 得一致性视图,数据库服务器维护了一张持久性列表,该列表包含了所有的修改操作,称 为“重做日志”或“预写日志” 如果数据加服务器被粗暴地终止和重启,它将会从重做日 志中读取最近操作日志,加快恢复速度由于我们的数据仓库系统规模很大,MYSQL 数 据库恢复需要一定的时间在那次崩溃之后,我们花了两三天时间才重新拥有可以正常工 作的数据仓库 我们那时决定把数据仓库迁移到 Oracle 上,Oracle 数据库软件对管理大数据集有更好 的支持我们还购买了一些昂贵的高密度存储服务器和一个强大的 Sun 服务器来运行新的 数据仓库 在我们把程序从 MYSQL 迁移到 Oracle 的过程中,我充分体验到所谓的标准关系数据 库在实现上还是存在许多差别的。
每个数据库的大批量导入导出工具使用完全不同的机制 此外,每个数据库支持的 SQL 语句很不一样,这迫使我们不得不重写很多查询更糟的是, Oracle 上的 Python 客户端库还不正式且有些 BUG,因此遇到问题时,我们需要直接和开 发人员联系 经过几周的努力,我们重写的脚本在新的 Oracle 平台上可以运行了夜间执行程序运行正常,我们很兴奋地尝试 Oracle 生态系统的其他工具尤其是 Oracle 有个名为 Oracle 仓 库建构器的 ETL 工具,我们期待用它替代自己手工写的 Python 脚本但是,该软件不支 持我们需要的数据源规模:在那时,通过每天晚上收集数据,Facebook 已经有几万个 MYSQL 数据库虽然连接 Oracle 都无法帮助我们解决 ETL 方面遇到的可扩展性挑战,但 是我们很高兴拥有一个能够正常运行的包含几 TB 级数据的数据仓库 然后,我们打开点击流日志:仅第一天,在 Oracle 数据库上就发送了 400G 的无结构 数据,我们再次对使用数据仓库表示怀疑超越数据仓库超越数据仓库根据互联网数据中心提供数据显示,数字世界在 2011 年将超过 1800EB。
这么庞大的 数据将无法通过关系数据库来管理因此,对数据库管理系统存在很紧迫的需求要求该 系统能够从无结构化数据和结构化数据中抽取信息,但是人们对如何进展没有达成一致 特别是,自然语言数据量丰富,信息量大,但是数据仓库管理不善自然语言和其他 无结构化数据通常在文档库和语音记录中获取,为了管理这些数据,企业组。





![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)






