如何打造高性能(néng)大数据分(fēn)析平台

2017/03/31      2349 文(wén)章来源:优百

导读

大数据分(fēn)析系统作為(wèi)一个关键性的系统在各个公司迅速崛起,但是这种海量规模的数据带来了前所未有(yǒu)的性能(néng)挑战。同时,如果大数据分(fēn)析系统无法在第一时间為(wèi)运营决策提供关键数据,那么这样的大数据分(fēn)析系统一文(wén)不值。本文(wén)将从技术无关的角度讨论一些提高性能(néng)的方法。下面我们将讨论一些能(néng)够应用(yòng)在大数据分(fēn)析系统不同阶段的技巧和准则(例如数据提取,数据清洗,处理(lǐ),存储,以及介绍)。本文(wén)应作為(wèi)一个通用(yòng)准则,以确保最终的大数据分(fēn)析平台能(néng)满足性能(néng)要求。

1. 大数据是什么?

大数据是最近IT界最常用(yòng)的术语之一。然而对大数据的定义也不尽相同,所有(yǒu)已知的论点例如结构化的和非结构化、大规模的数据等等都不够完整。大数据系统通常被认為(wèi)具有(yǒu)数据的五个主要特征,通常称為(wèi)数据的5 Vs。分(fēn)别是大规模,多(duō)样性,高效性、准确性和价值性。

据Gartner称,大规模可(kě)以被定义為(wèi)“在本(地)机数据采集和处理(lǐ)技术能(néng)力不足以為(wèi)用(yòng)户带来商(shāng)业价值。当现有(yǒu)的技术能(néng)够针对性的进行改造后来处理(lǐ)这种规模的数据就可(kě)以说是一个成功的大数据解决方案。

这种大规模的数据没将不仅仅是来自于现有(yǒu)的数据源,同时也会来自于一些新(xīn)兴的数据源,例如常规(手持、工业)设备,日志(zhì),汽車(chē)等,当然包括结构化的和非结构化的数据。

据Gartner称,多(duō)样性可(kě)以定义如下:“高度变异的信息资产,在生产和消费时不进行严格定义的包括多(duō)种形式、类型和结构的组合。同时还包括以前的历史数据,由于技术的变革历史数据同样也成為(wèi)多(duō)样性数据之一 “。

高效性可(kě)以被定义為(wèi)来自不同源的数据到达的速度。从各种设备,传感器和其他(tā)有(yǒu)组织和无组织的数据流都在不断进入IT系统。由此,实时分(fēn)析和对于该数据的解释(展示)的能(néng)力也应该随之增加。

根据Gartner,高效性可(kě)以被定义如下:“高速的数据流I/O(生产和消费),但主要聚焦在一个数据集内或多(duō)个数据集之间的数据生产的速率可(kě)变上”。

准确性,或真实性或叫做精度是数据的另一个重要组成方面。要做出正确的商(shāng)业决策,当務(wù)之急是在数据上进行的所有(yǒu)分(fēn)析必须是正确和准确(精确)的。

大数据系统可(kě)以提供巨大的商(shāng)业价值。像電(diàn)信,金融,電(diàn)子商(shāng)務(wù),社交媒體(tǐ)等,已经认识到他(tā)们的数据是一个潜在的巨大的商(shāng)机。他(tā)们可(kě)以预测用(yòng)户行為(wèi),并推荐相关产品,提供危险交易预警服務(wù),等等。

与其他(tā)IT系统一样,性能(néng)是大数据系统获得成功的关键。本文(wén)的中心主旨是要说明如何让大数据系统保证其性能(néng)。

2. 大数据系统应包含的功能(néng)模块

大数据系统应该包含的功能(néng)模块,首先是能(néng)够从多(duō)种数据源获取数据的功能(néng),数据的预处理(lǐ)(例如,清洗,验证等),存储数据,数据处理(lǐ)、数据分(fēn)析等(例如做预测分(fēn)析,生成在線(xiàn)使用(yòng)建议等等),最后呈现和可(kě)视化的总结、汇总结果。

下图描述了大数据系统的这些高层次的组件:

本节的其余部分(fēn)简要说明了每个组分(fēn),如图1。

2.1 各种各样的数据源

当今的IT生态系统,需要对各种不同种类来源的数据进行分(fēn)析。这些来源可(kě)能(néng)是从在線(xiàn)Web应用(yòng)程序,批量上传或feed,流媒體(tǐ)直播数据,来自工业、手持、家居传感的任何东西等等。

显然从不同数据源获取的数据具有(yǒu)不同的格式、使用(yòng)不同的协议。例如,在線(xiàn)的Web应用(yòng)程序可(kě)能(néng)会使用(yòng)SOAP / XML格式通过HTTP发送数据,feed可(kě)能(néng)会来自于CSV文(wén)件,其他(tā)设备则可(kě)能(néng)使用(yòng)MQTT通

由于这些单独的系统的性能(néng)是不在大数据系统的控制范围之内,并且通常这些系统都是外部应用(yòng)程序,由第三方供应商(shāng)或团队提供并维护,所以本文(wén)将不会在深入到这些系统的性能(néng)分(fēn)析中去。

2.2 数据采集

第一步,获取数据。这个过程包括分(fēn)析,验证,清洗,转换,去重,然后存到适合你们公司的一个持久化设备中(硬盘、存储、云等)。

在下面的章节中,本文(wén)将重点介绍一些关于如何获取数据方面的非常重要的技巧。请注意,本文(wén)将不讨论各种数据采集技术的优缺点。

2.3 存储数据

第二步,一旦数据进入大数据系统,清洗,并转化為(wèi)所需格式时,这些过程都将在数据存储到一个合适的持久化层中进行。

在下面的章节中,本文(wén)将介绍一些存储方面的最佳实践(包括逻辑上和物(wù)理(lǐ)上)。在本文(wén)结尾也会讨论一部分(fēn)涉及数据安全方面的问题。

2.4 数据处理(lǐ)和分(fēn)析

第三步,在这一阶段中的一部分(fēn)干净数据是去规范化的,包括对一些相关的数据集的数据进行一些排序,在规定的时间间隔内进行数据结果归集,执行机器學(xué)习算法,预测分(fēn)析等。

在下面的章节中,本文(wén)将针对大数据系统性能(néng)优化介绍一些进行数据处理(lǐ)和分(fēn)析的最佳实践。

2.5 数据的可(kě)视化和数据展示

最后一个步骤,展示经过各个不同分(fēn)析算法处理(lǐ)过的数据结果。该步骤包括从预先计算汇总的结果(或其他(tā)类似数据集)中的读取和用(yòng)一种友好界面或者表格(图表等等)的形式展示出来。这样便于对于数据分(fēn)析结果的理(lǐ)解。

3. 数据采集中的性能(néng)技巧

数据采集是各种来自不同数据源的数据进入大数据系统的第一步。这个步骤的性能(néng)将会直接决定在一个给定的时间段内大数据系统能(néng)够处理(lǐ)的数据量的能(néng)力。

数据采集过程基于对该系统的个性化需求,但一些常用(yòng)执行的步骤是 - 解析传入数据,做必要的验证,数据清晰,例如数据去重,转换格式,并将其存储到某种持久层。

涉及数据采集过程的逻辑步骤示如下图所示:

下面是一些性能(néng)方面的技巧:

●来自不同数据源的传输应该是异步的。可(kě)以使用(yòng)文(wén)件来传输、或者使用(yòng)面向消息的(MoM)中间件来实现。由于数据异步传输,所以数据采集过程的吞吐量可(kě)以大大高于大数据系统的处理(lǐ)能(néng)力。 异步数据传输同样可(kě)以在大数据系统和不同的数据源之间进行解耦。大数据基础架构设计使得其很(hěn)容易进行动态伸缩,数据采集的峰值流量对于大数据系统来说算是安全的。

●如果数据是直接从一些外部数据库中抽取的,确保拉取数据是使用(yòng)批量的方式。

●如果数据是从feed file解析,请務(wù)必使用(yòng)合适的解析器。例如,如果从一个XML文(wén)件中读取也有(yǒu)不同的解析器像JDOM,SAX,DOM等。类似地,对于CSV,JSON和其它这样的格式,多(duō)个解析器和API是可(kě)供选择。选择能(néng)够符合需求的性能(néng)最好的。

●优先使用(yòng)内置的验证解决方案。大多(duō)数解析/验证工作流程的通常运行在服務(wù)器环境(ESB /应用(yòng)服務(wù)器)中。大部分(fēn)的场景基本上都有(yǒu)现成的标准校验工具。在大多(duō)数的情况下,这些标准的现成的工具一般来说要比你自己开发的工具性能(néng)要好很(hěn)多(duō)。

●类似地,如果数据XML格式的,优先使用(yòng)XML(XSD)用(yòng)于验证。

●即使解析器或者校等流程使用(yòng)自定义的脚本来完成,例如使用(yòng)java优先还是应该使用(yòng)内置的函数库或者开发框架。在大多(duō)数的情况下通常会比你开发任何自定义代码快得多(duō)。

●尽量提前滤掉无效数据,以便后续的处理(lǐ)流程都不用(yòng)在无效数据上浪费过多(duō)的计算能(néng)力。

●大多(duō)数系统处理(lǐ)无效数据的做法通常是存放在一个专门的表中,请在系统建设之初考虑这部分(fēn)的数据库存储和其他(tā)额外的存储开销。

●如果来自数据源的数据需要清洗,例如去掉一些不需要的信息,尽量保持所有(yǒu)数据源的抽取程序版本一致,确保一次处理(lǐ)的是一个大批量的数据,而不是一条记录一条记录的来处理(lǐ)。一般来说数据清洗需要进行表关联。数据清洗中需要用(yòng)到的静态数据关联一次,并且一次处理(lǐ)一个很(hěn)大的批量就能(néng)够大幅提高数据处理(lǐ)效率。

●数据去重非常重要这个过程决定了主键的是由哪些字段构成。通常主键都是时间戳或者id等可(kě)以追加的类型。一般情况下,每条记录都可(kě)能(néng)根据主键进行索引来更新(xīn),所以最好能(néng)够让主键简单一些,以保证在更新(xīn)的时候检索的性能(néng)。

●来自多(duō)个源接收的数据可(kě)以是不同的格式。有(yǒu)时,需要进行数据移植,使接收到的数据从多(duō)种格式转化成一种或一组标准格式。

●和解析过程一样,我们建议使用(yòng)内置的工具,相比于你自己从零开发的工具性能(néng)会提高很(hěn)多(duō)。

●数据移植的过程一般是数据处理(lǐ)过程中最复杂、最紧急、消耗资源最多(duō)的一步。因此,确保在这一过程中尽可(kě)能(néng)多(duō)的使用(yòng)并行计算。

●一旦所有(yǒu)的数据采集的上述活动完成后,转换后的数据通常存储在某些持久层,以便以后分(fēn)析处理(lǐ),综述,聚合等使用(yòng)。

●多(duō)种技术解决方案的存在是為(wèi)了处理(lǐ)这种持久(RDBMS,NoSQL的分(fēn)布式文(wén)件系统,如Hadoop和等)。

●谨慎选择一个能(néng)够最大限度的满足需求的解决方案。

4. 数据存储中的性能(néng)技巧

一旦所有(yǒu)的数据采集步骤完成后,数据将进入持久层。

在本节中将讨论一些与数据数据存储性能(néng)相关的技巧包括物(wù)理(lǐ)存储优化和逻辑存储结构(数据模型)。这些技巧适用(yòng)于所有(yǒu)的数据处理(lǐ)过程,无论是一些解析函数生的或最终输出的数据还是预计算的汇总数据等。

●首先选择数据范式。您对数据的建模方式对性能(néng)有(yǒu)直接的影响,例如像数据冗余,磁盘存储容量等方面。对于一些简单的文(wén)件导入数据库中的场景,你也许需要保持数据原始的格式,对于另外一些场景,如执行一些分(fēn)析计算聚集等,你可(kě)能(néng)不需要将数据范式化。

●大多(duō)数的大数据系统使用(yòng)NoSQL数据库替代RDBMS处理(lǐ)数据。

●不同的NoSQL数据库适用(yòng)不同的场景,一部分(fēn)在select时性能(néng)更好,有(yǒu)些是在插入或者更新(xīn)性能(néng)更好。

●数据库分(fēn)為(wèi)行存储和列存储。

●具體(tǐ)的数据库选型依赖于你的具體(tǐ)需求(例如,你的应用(yòng)程序的数据库读写比)。

●同样每个数据库都会根据不同的配置从而控制这些数据库用(yòng)于数据库复制备份或者严格保持数据一致性

●这些设置会直接影响数据库性能(néng)。在数据库技术选型前一定要注意。

●压缩率、缓冲池、超时的大小(xiǎo),和缓存的对于不同的NoSQL数据库来说配置都是不同的,同时对数据库性能(néng)的影响也是不一样的。

●数据Sharding和分(fēn)區(qū)是这些数据库的另一个非常重要的功能(néng)。数据Sharding的方式能(néng)够对系统的性能(néng)产生巨大的影响,所以在数据Sharding和分(fēn)區(qū)时请谨慎选择。

●并非所有(yǒu)的NoSQL数据库都内置了支持连接,排序,汇总,过滤器,索引等。

●如果有(yǒu)需要还是建议使用(yòng)内置的类似功能(néng),因為(wèi)自己开发的还是不灵。

●NoSQLs内置了压缩、编解码器和数据移植工具。如果这些可(kě)以满足您的部分(fēn)需求,那么优先选择使用(yòng)这些内置的功能(néng)。这些工具可(kě)以执行各种各样的任務(wù),如格式转换、压缩数据等,使用(yòng)内置的工具不仅能(néng)够带来更好的性能(néng)还可(kě)以降低网络的使用(yòng)率。

●许多(duō)NoSQL数据库支持多(duō)种类型的文(wén)件系统。其中包括本地文(wén)件系统,分(fēn)布式文(wén)件系统,甚至基于云的存储解决方案。

●如果在交互式需求上有(yǒu)严格的要求,否则还是尽量尝试使用(yòng)NoSQL本地(内置)文(wén)件系统(例如HBase 使用(yòng)HDFS)。

●这是因為(wèi),如果使用(yòng)一些外部文(wén)件系统/格式,则需要对数据进行相应的编解码/数据移植。它将在整个读/写过程中增加原本不必要的冗余处理(lǐ)。

●大数据系统的数据模型一般来说需要根据需求用(yòng)例来综合设计。与此形成鲜明对比的是RDMBS数据建模技术基本都是设计成為(wèi)一个通用(yòng)的模型,用(yòng)外键和表之间的关系用(yòng)来描述数据实體(tǐ)与现实世界之间的交互。

●在硬件一级,本地RAID模式也许不太适用(yòng)。请考虑使用(yòng)SAN存储。

5. 数据处理(lǐ)分(fēn)析中的性能(néng)技巧

数据处理(lǐ)和分(fēn)析是一个大数据系统的核心。像聚合,预测,聚集,和其它这样的逻辑操作都需要在这一步完成。

本节讨论一些数据处理(lǐ)性能(néng)方面的技巧。需要注意的是大数据系统架构有(yǒu)两个组成部分(fēn),实时数据流处理(lǐ)和批量数据处理(lǐ)。本节涵盖数据处理(lǐ)的各个方面。

●在细节评估和数据格式和模型后选择适当的数据处理(lǐ)框架。

●其中一些框架适用(yòng)于批量数据处理(lǐ),而另外一些适用(yòng)于实时数据处理(lǐ)。

●同样一些框架使用(yòng)内存模式,另外一些是基于磁盘io处理(lǐ)模式。

●有(yǒu)些框架擅長(cháng)高度并行计算,这样能(néng)够大大提高数据效率。

●基于内存的框架性能(néng)明显优于基于磁盘io的框架,但是同时成本也可(kě)想而知。

●概括地说,当務(wù)之急是选择一个能(néng)够满足需求的框架。否则就有(yǒu)可(kě)能(néng)既无法满足功能(néng)需求也无法满足非功能(néng)需求,当然也包括性能(néng)需求。

●一些这些框架将数据划分(fēn)成较小(xiǎo)的块。这些小(xiǎo)数据块由各个作业独立处理(lǐ)。协调器管理(lǐ)所有(yǒu)这些独立的子作业

●在数据分(fēn)块是需要当心。

●该数据快越小(xiǎo),就会产生越多(duō)的作业,这样就会增加系统初始化作业和清理(lǐ)作业的负担。

●如果数据快太大,数据传输可(kě)能(néng)需要很(hěn)長(cháng)时间才能(néng)完成。这也可(kě)能(néng)导致资源利用(yòng)不均衡,長(cháng)时间在一台服務(wù)器上运行一个大作业,而其他(tā)服務(wù)器就会等待。

●不要忘了查看一个任務(wù)的作业总数。在必要时调整这个参数。

●最好实时监控数据块的传输。在本机机型io的效率会更高,这么做也会带来一个副作用(yòng)就是需要将数据块的冗余参数提高(一般hadoop默认是3份)这样又(yòu)会反作用(yòng)使得系统性能(néng)下降。

●此外,实时数据流需要与批量数据处理(lǐ)的结果进行合并。设计系统时尽量减少对其他(tā)作业的影响。

●大多(duō)数情况下同一数据集需要经过多(duō)次计算。这种情况可(kě)能(néng)是由于数据抓取等初始步骤就有(yǒu)报错,或者某些业務(wù)流程发生变化,值得一提的是旧数据也是如此。设计系统时需要注意这个地方的容错。

●这意味着你可(kě)能(néng)需要存储原始数据的时间较長(cháng),因此需要更多(duō)的存储。

●数据结果输出后应该保存成用(yòng)户期望看到的格式。例如,如果最终的结果是用(yòng)户要求按照每周的时间序列汇总输出,那么你就要将结果以周為(wèi)单位进行汇总保存。

●為(wèi)了达到这个目标,大数据系统的数据库建模就要在满足用(yòng)例的前提下进行。例如,大数据系统经常会输出一些结构化的数据表,这样在展示输出上就有(yǒu)很(hěn)大的优势。

●更常见的是,这可(kě)能(néng)会这将会让用(yòng)户感觉到性能(néng)问题。例如用(yòng)户只需要上周的数据汇总结果,如果在数据规模较大的时候按照每周来汇总数据,这样就会大大降低数据处理(lǐ)能(néng)力。

●一些框架提供了大数据查询懒评价功能(néng)。在数据没有(yǒu)在其他(tā)地方被使用(yòng)时效果不错。

●实时监控系统的性能(néng),这样能(néng)够帮助你预估作业的完成时间。

6. 数据可(kě)视化和展示中的性能(néng)技巧

精心设计的高性能(néng)大数据系统通过对数据的深入分(fēn)析,能(néng)够提供有(yǒu)价值战略指导。这就是可(kě)视化的用(yòng)武之地。良好的可(kě)视化帮助用(yòng)户获取数据的多(duō)维度透视视图。

需要注意的是传统的BI和报告工具,或用(yòng)于构建自定义报表系统无法大规模扩展满足大数据系统的可(kě)视化需求。同时,许多(duō)COTS可(kě)视化工具现已上市。

本文(wén)将不会对这些个别工具如何进行调节,而是聚焦在一些通用(yòng)的技术,帮助您能(néng)打造可(kě)视化层。

●确保可(kě)视化层显示的数据都是从最后的汇总输出表中取得的数据。这些总结表可(kě)以根据时间短进行汇总,建议使用(yòng)分(fēn)类或者用(yòng)例进行汇总。这么做可(kě)以避免直接从可(kě)视化层读取整个原始数据。

●这不仅最大限度地减少数据传输,而且当用(yòng)户在線(xiàn)查看在报告时还有(yǒu)助于避免性能(néng)卡顿问题。

●重分(fēn)利用(yòng)大化可(kě)视化工具的缓存。缓存可(kě)以对可(kě)视化层的整體(tǐ)性能(néng)产生非常不错的影响。

●物(wù)化视图是可(kě)以提高性能(néng)的另一个重要的技术。

●大部分(fēn)可(kě)视化工具允许通过增加線(xiàn)程数来提高请求响应的速度。如果资源足够、访问量较大那么这是提高系统性能(néng)的好办法。

●尽量提前将数据进行预处理(lǐ),如果一些数据必须在运行时计算请将运行时计算简化到最小(xiǎo)。

●可(kě)视化工具可(kě)以按照各种各样的展示方法对应不同的读取策略。其中一些是离線(xiàn)模式、提取模式或者在線(xiàn)连接模式。每种服務(wù)模式都是针对不同场景设计的。

●同样,一些工具可(kě)以进行增量数据同步。这最大限度地减少了数据传输,并将整个可(kě)视化过程固化下来。

●保持像图形,图表等使用(yòng)最小(xiǎo)的尺寸。

●大多(duō)数可(kě)视化框架和工具的使用(yòng)可(kě)缩放矢量图形(SVG)。使用(yòng)SVG复杂的布局可(kě)能(néng)会产生严重的性能(néng)影响。

7. 数据安全以及对于性能(néng)的影响

像任何IT系统一样安全性要求也对大数据系统的性能(néng)有(yǒu)很(hěn)大的影响。在本节中,我们讨论一下安全对大数据平台性能(néng)的影响。

- 首先确保所有(yǒu)的数据源都是经过认证的。即使所有(yǒu)的数据源都是安全的,并且没有(yǒu)针对安全方面的需求,那么你可(kě)以灵活设计一个安全模块来配置实现。

- 数据进过一次认证,那么就不要进行二次认证。如果实在需要进行二次认证,那么使用(yòng)一些类似于token的技术保存下来以便后续继续使用(yòng)。这将节省数据一遍遍认证的开销

您可(kě)能(néng)需要支持其他(tā)的认证方式,例如基于PKI解决方案或Kerberos。每一个都有(yǒu)不同的性能(néng)指标,在最终方案确定前需要将其考虑进去。

- 通常情况下数据压缩后进入大数据处理(lǐ)系统。这么做好处非常明显不细说。

- 针对不同算法的效率、对cpu的使用(yòng)量你需要进行比较来选出一个传输量、cpu使用(yòng)量等方面均衡的压缩算法。

- 同样,评估加密逻辑和算法,然后再选择。

- 明智的做法是敏感信息始终进行限制。

- 在审计跟踪表或登录时您可(kě)能(néng)需要维护记录或类似的访问,更新(xīn)等不同的活动记录。这可(kě)能(néng)需要根据不同的监管策略和用(yòng)户需求个性化的进行设计和修改。

- 注意,这种需求不仅增加了数据处理(lǐ)的复杂度,但会增加存储成本。

- 尽量使用(yòng)下层提供的安全技术,例如操作系统、数据库等。这些安全解决方案会比你自己设计开发性能(néng)要好很(hěn)多(duō)。

8. 总结

本文(wén)介绍了各种性能(néng)方面的技巧,这些技术性的指导可(kě)以作為(wèi)打造大数据分(fēn)析平台的一般准则。大数据分(fēn)析平台非常复杂,為(wèi)了满足这种类型系统的性能(néng)需求,需要我们从开始建设的时候进行考量。

本文(wén)介绍的技术准则可(kě)以用(yòng)在大数据平台建设的各个不同阶段,包括安全如何影响大数据分(fēn)析平台的性能(néng)。