5.1 分析沙箱

在第4章,我们讨论了海量并行数据库系统的巨大威力。这种数据库系统的一种应用是加快高级分析流程的构建与部署。为了帮助分析专家高效地使用企业级数据仓库和数据集市,分析专家必须获得这些系统的正确权限,并进行访问。分析沙箱就是这样的一种管理机制,如果被恰当地使用,分析沙箱能给大数据领域带来巨大价值。

“沙箱”这个词来自一种孩子们常见的玩具。在沙箱里,孩子们可以创建他们想要的任何东西,他们可以根据自己的意愿把沙子堆砌成各种形状。类似地,分析环境的沙箱就是一个资源组。在这个资源组里,分析专家能根据自己的意愿对数据进行各种探索研究。沙箱还有另外一个名称,叫做敏捷分析云或数据实验室。具体是什么名称并不重要,重要的是你理解了背后的理念。

5.1.1 分析沙箱:定义与范围

分析沙箱提供了一个资源组,可以支持各种高级分析,以找到各类关键业务问题的答案。分析沙箱最适合进行数据探索、分析流程开发、概念验证以及原型开发。这些探索性的分析流程一旦发展为用户管理流程或者生产流程,就应该从分析沙箱里挪出去。

分析沙箱只被一小部分用户使用。分析沙箱中创建的数据与生产数据库彼此隔离。沙箱用户也可以把自己的数据导入到沙箱内,在短期内作为整个分析项目的一部分数据源,即使这些数据不在企业的数据模型范围内。

沙箱中的数据都有时间限制。沙箱的理念并不是建立一个永久数据集,而是根据每个项目的需求构建项目所需的数据集。一旦这个项目完成了,数据就被删除了。如果沙箱被恰当地使用,沙箱将是提升企业分析价值的主要驱动力。

5.1.2 分析沙箱的好处

分析沙箱有什么好处?我们将从分析专家与IT人员两种视角来进行阐述。

对于分析专家而言,沙箱的好处有以下几个。

■ 独立:分析专家可以在数据库系统中独立开展工作,不需要经常来回申请项目所需的各种权限。

■ 灵活性:分析专家可以自由地使用各种分析工具,包括商业智能、统计分析或可视化数据工具等。

■ 效率:分析专家可以直接使用企业数据仓库或数据集市来进行分析,不需要抽取或移动数据。

■ 自由:分析专家不需要负责系统管理与生产流程的监控,这些维护性工作都转移给了IT部门。

■ 速度:通过并行处理可以实现大范围的快速优化。这也带来了“快速迭代”与“快速试错”的能力,降低了创新的风险。


沙箱对每一个人都有好处!

分析沙箱对分析专家和IT人员有不同的好处,它不会伤害任何一方。双方人员在不理解沙箱时,常常害怕这个概念。建议开展内部培训后再启动沙箱建设,这可能会耗费一些时间,但绝对值得。


分析沙箱对IT人员有以下几个好处。

■ 集中化:IT人员可以像管理其他数据库一样对分析沙箱进行集中管理。

■ 流水线作业:沙箱显著地简化了推动在生产流程中使用分析流程的难度,因为开发与部署都发生在同一平台。

■ 简化:应用从开发环境迁移到生产环境时,不需要进行任何形式的重新开发。

■ 控制:IT可以管理沙箱环境,平衡沙箱用户和其他用户的资源需求。如果沙箱环境的探索工作发生了错误,也不会影响生产环境。

■ 降低成本:通过把许多分析型数据集市集中到一个中央集中系统内,可以显著地降低成本。

5.1.3 内部分析沙箱

从企业级数据仓库或数据集市中划分出一块区域形成的分析沙箱,就是内部分析沙箱。在这个例子里,沙箱物理上是部署在生产系统中的,但沙箱的数据并不是生产数据库的一部分。沙箱是系统中独立存在的数据库区域,如图5-1所示。

5.1 分析沙箱 - 图1

图5-1 内部分析沙箱

使用大数据时需要注意,最好增加一个MapReduce环境到混合环境中。通常会同数据库平台一起安装,除非你现在使用的系统没有同时包括这两个环境。MapReduce环境需要访问内部沙箱,数据可以在所需的两个环境中进行共享。我们已经在第4章中讨论过了MapReduce。

内部沙箱的一个优势是,它可以利用现有的硬件资源和基础设施。这使得我们可以方便地搭建内部沙箱。从系统管理员的角度来看,在系统中搭建一个沙箱与创建一个数据库容器没什么两样。沙箱唯一的不同之处在于,它可以将某些权限授予某些用户,并规定了如何使用它。

内部分析沙箱最大的优势是,可以直接把生产环境的数据与沙箱的数据进行关联分析。既然生产环境数据与分析沙箱的数据都保存在生产系统中,那么把某一个数据源与另外一个数据源联合起来一起分析就很容易实现了,图5-2介绍了这一工作原理。

5.1 分析沙箱 - 图2

图5-2 内部沙箱的详细视图

内部分析沙箱能显著节约成本,因为没有增加任何新的硬件设备。生产系统已经建立好了,只需要用一种新的方式来使用它。此外,除了在数据库与MapReduce环境之间,不存在其他类型的数据迁移,这也能降低成本。

内部分析沙箱也有缺点。第一,数据导入企业数据仓库或数据集市后,还要把数据导入沙箱中,这增加了工作量。其次,沙箱会占用系统的存储空间与CPU资源(可能是很大一部分资源)。还有一个缺点是,内部分析沙箱受到生产环境管理政策与流程的限制。例如,如果周一早晨生成报表的任务会占用全部系统资源,那么此时分析沙箱用户就没有足够的资源可以使用了。

5.1.4 外部分析沙箱

外部分析沙箱,是一个物理独立的分析环境,用于测试和开发各类分析流程。通常来说,构建一个纯外部的分析环境是很少见的。内部分析沙箱以及随后会谈到的混合式分析沙箱通常更为常见。外部分析沙箱通常是混合式沙箱环境的一个组成部分,因此理解外部沙箱是什么非常重要,如图5-3所示。

5.1 分析沙箱 - 图3

图5-3 外部分析沙箱

外部分析沙箱的最大的优势是它的架构简单。沙箱是一个独立的环境,完全用于开发高级分析。它不会影响其他任何系统,这给沙箱的设计与使用带来了便利。例如,可以尝试不同类型的数据库设置,或者把沙箱数据库升级到新版本,以测试新版本特性。这与开发应用的传统测试开发环境有点类似。

一个常见问题是:“这个外部的分析系统,是不是违背了把数据放在数据库中进行分析的原则”。如果你把沙箱当作一个分析开发环境,那么答案是没有违背。大多数企业都有一个测试环境和开发环境,用于支持应用与商业智能类的工作,并且独立于生产环境。外部分析沙箱也是同样的道理,只是它支持的是分析活动。

外部分析沙箱的另外一个优点是减少了系统负载管理。只有分析专家使用这个系统,自然就不用去考虑不同系统间的负载平衡。分析沙箱和生产环境的性能表现都是可预测的、稳定的。例如,沙箱用户不用担心周一早上系统资源不够用,他们可以获得稳定的沙箱访问能力。


外部分析沙箱并不违背原则

外部分析沙箱并没有违背库内分析的原则。可以把外部沙箱当作支持分析的一个测试开发环境。这些环境有不少合理且有力的存在理由,应用与报表的开发测试环境更是无处不在。


外部分析沙箱最好使用与生产系统一样的关系型数据库。如果这样,那么把沙箱的分析流程导入生产系统就只是一个简单的复制过程。如果沙箱中的数据格式与生产系统的源数据保持一致,也会简化迁移过程。

当处理大数据时,MapReduce环境应该包含在外部分析沙箱环境中。在这种情况下,外部分析沙箱环境将包含一个关系型数据库和一个MapReduce组件。有些情况下可能是同一个系统承担这两项任务,也可能存在两个独立的物理平台。

外部分析沙箱的主要缺点是作为沙箱平台的独立系统带来的成本增加。为了降低成本,很多企业构建沙箱环境时会使用生产系统升级后替换下来的旧设备。使用这些原本要丢弃的旧设备来构建沙箱,能降低分析沙箱的硬件成本。

另外一个缺点是,外部分析沙箱需要进行数据迁移。在开发一个新分析内容时,必须提前把数据从生产环境导入到沙箱中。这个数据迁移过程通常要持续地进行维护与管理。这些数据也许并不是太复杂,但带来了需要进行管理和执行的额外任务。因此,沙箱的数据需求必须被严格管理,并专注于那些绝对必要的数据。

5.1.5 混合式分析沙箱

混合式分析沙箱是内部沙箱和外部沙箱的组合。它允许分析专家利用生产系统计算能力的灵活性,又保留了外部系统可以执行数据库难以完成某些高级探索任务的优点,如图5-4所示。

5.1 分析沙箱 - 图4

图5-4 混合式分析沙箱

混合式分析沙箱最大的优点就是同时具有内部沙箱和外部沙箱两个环境的优点,还有处理某些复杂分析时无与伦比的灵活性。早期的测试与探索工作通常是在外部沙箱中完成的,这避免了对生产系统的影响。最终测试和预先部署工作则在生产环境下的内部沙箱完成。一个独立的MapReduce环境可以同时支持内部和外部沙箱。

另外一个优点是,在分析流程已经开发完成、生产系统进行全面部署前,可以构建一个临时性的“模拟生产系统”来进行测试。通过使用内部沙箱,这很容易实现。

混合式环境的缺点相当于内部沙箱和外部沙箱缺点的汇总,此外还增加了一些新的缺点。一个缺点是,需要同时管理维护内部沙箱与外部沙箱两个环境。在这种情况下,不仅要保持外部沙箱和生产系统的数据一致性,还需要保证外部沙箱和内部沙箱的数据一致性。

有必要建立一些原则来指导沙箱构建模式的选择。外部沙箱和内部沙箱都有一些适合承载的特定任务。分析专家不能武断地决定使用这种或那种沙箱,而是应该建立指导原则并严格执行。


不要把沙箱撑爆了!

只将分析必需的、最少量的数据导入外部分析沙箱。沙箱只会保存生产环境的一小部分数据。沙箱内的数据范围会根据特定分析需求变化,千万不要导入非必要的数据。


混合式分析沙箱的最后一个缺点是,可能需要建立两个不同的数据导入流程,这增加了系统的复杂性。外部沙箱和内部沙箱必须保证数据的一致性。当某个沙箱环境生成了新的数据,那么这些处理过程必须在另一个环境中重复执行一遍。

5.1.6 不要仅仅使用数据,而要丰富数据

沙箱环境最适合于对新数据进行探索分析,确定是否需要把这个数据源导入到企业系统和分析流程中并固化下来。这些新数据源可以是社交网络数据,家庭的人口统计信息,或者其他类型的大数据源。那么,分析专家应该如何探索研究这些数据并评估其价值呢?

想象一下,如果不经过研究,就直接建立一个数据处理任务,并正式地把新数据导入生产系统,这会带来什么后果?首先,你必须评估数据导入工作的范围与要求。然后,建立一个新的项目来负责开发数据的提取、转换和加载(ETL)流程。此外,还必须设计一个包含新数据的数据模型,并通过审批,以及在生产系统中实现。所有的这一切都必须经过测试。3~6个月后,这个处理流程上线了,新数据终于导入了生产系统以供人们使用。这时,也许分析会显示这些新数据并没有什么业务价值,你甚至根本就不需要这些数据。这种做法会带来多么大的资源浪费啊!


先分析一下样本数据!

当人们并不确定是否喜欢某一口味的冰激凌时,他们会先试吃一口。如果喜欢,他们就买下来;如果不喜欢,他们就再试试其他口味。对于新的数据源也是一样的逻辑。要是你不知道它是否就是你需要的,就不要全部导入生产系统,先在分析沙箱里试着研究一下吧!


沙箱可以避免刚才描绘的场景。可以一次性地抽取部分新数据并导入沙箱,然后研究这些新数据。如果结果不太好,那就分析其他的新数据源;如果数据研究结果很好,那就启动把数据导入生产系统这个漫长又昂贵的工作任务吧。使用分析沙箱来探索并验证新数据源的价值,不仅比传统的方式快得多,成本也低得多。

5.1.7 系统负载管理和容量规划

当分析专家开始使用沙箱时,有很多内置的数据库组件帮助这项工作更顺利地进行。沙箱用户可以被分配到不同的用户组里,不同组可以拥有不同的系统权限来开发使用新的高级分析。例如,你可以限制在同一时间某一个沙箱用户能使用多少CPU资源。企业级系统拥有足够的灵活性来控制这一点。当某个用户提出资源要求时,也许系统只会提供10%的资源,到了半夜,如果没有其他活跃用户了,那么这名用户就可以获得100%的系统资源。

控制并发查询量,或者限制客户创建某些类型的查询,这都是完全可行的。例如,对某个用户来说,他只能同时提交5项查询任务。此外,系统还拥有一些工具来发现并终止执行那些效率很低的大型查询,如两张大表的交叉关联等。

另一件很重要的事情是通过数据存储策略来限制用户使用的数据存储空间。当分析沙箱中的某一个数据集已经几个月没有被查询过时,那么默认选项就是把这个数据集删除。沙箱不应该像传统环境那样不断地生成新的数据。

我曾经见过这种场景,企业总共拥有5TB数据,但分析环境里的数据达到了30TB~50TB。原因是每一个分析专家都会建立自己的一份备份数据,包含企业5TB数据中的大部分信息。分析专家甚至在不同的项目里建立了不同的备份数据。这带来了数据的大量重复与冗余。这种情况不应该在分析沙箱中出现。在分析沙箱里,除非有为特定目的保留数据的要求,否则数据都会被删除。

对于内部分析沙箱,当进行了越来越多的分析,沙箱和生产环境之间的资源分配与系统负载会发生变化,这是可以接受的。如果沙箱环境部署在独立的平台上,那些导致系统资源溢出的分析任务就可以被发现并承担相应的责任。容量规划需要在开始的时候进行讨论,但是分析沙箱的容量规划与其他系统一样,并没有什么特别。分析沙箱会给系统带来新的任务,而系统管理员们知道如何来管理这些任务。


颠覆你的常识!

分析沙箱可以在不增加投资的情况下,从现有的投资中获得额外的收益。建设沙箱并不一定就要购买新设备。沙箱也不一定会给其他工作任务带来麻烦。它能从现有的IT投资中获得更多的价值,而且可以没有任何负面影响!一旦你理解了分析沙箱,明白了它的工作原理,你就会发现,许多人都信以为真的事情,而事实却刚好相反!


对于沙箱还有一个常见的误解。人们常常认为,分析沙箱将“摧毁”系统,把现有系统的资源全部耗光,给系统带来一系列的破坏。这完全是错误的!事实上,大型分析任务通常只是在项目初期执行1次或2次,这些任务也不会重复性地执行。你可以轻易把这些大型任务调度到半夜执行,而半夜的系统资源通常很充足。仅仅因为分析沙箱偶尔可能耗光系统资源而反对使用沙箱,并把沙箱推向绝境,这往往会带来相反的效果。沙箱中的分析完全可以只使用那些闲置的系统资源。这意味着不增加任何成本就能从现有IT投资中获得更大的回报!这是一件多么美好的事情啊!

最后的一个观点是,在包含沙箱的环境中增加分析内容,系统容量并不一定要随之扩大。如果一个系统今天的使用率是95%或99%,那么在这个系统上增加分析沙箱,确实需要进行升级扩容,但这并不是分析沙箱造成的。事实上,这个系统的负载已经如此繁重,添加任何新应用和功能都不得不进行扩容。如果使用已有的旧设备来构建外部沙箱,不仅没有新增任何成本,还可以从这些被丢弃的无价值设备中获得新的价值。