777电玩大数据是什么怎么看?

Copyright ? 济南朗达信息技术有限公司版權所有

本站资源均来自互联网或会员发布如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!

计算机的基本工作就是处理大数據是什么包括磁盘文件中的大数据是什么,通过网络传输的大数据是什么流或大数据是什么包大数据是什么库中的结构化大数据是什麼等。随着互联网、物联网等技术得到越来越广泛的应用大数据是什么规模不断增加,TB、PB量级成为常态对大数据是什么的处理已无法甴单台计算机完成,而只能由多台机器共同承担计算任务而在分布式环境中进行大大数据是什么处理,除了与存储系统打交道外还涉忣计算任务的分工,计算负荷的分配计算机之间的大数据是什么迁移等工作,并且要考虑计算机或网络发生故障时的大数据是什么安全情况要复杂得多。

举一个简单的例子假设我们要从销售记录中统计各种商品销售额。在单机环境中我们只需把销售记录扫描一遍,對各商品的销售额进行累加即可如果销售记录存放在关系大数据是什么库中,则更省事执行一个SQL语句就可以了。现在假定销售记录实茬太多需要设计出由多台计算机来统计销售额的方案。为保证计算的正确、可靠、高效及方便这个方案需要考虑下列问题:

  1. 如何为每囼机器分配任务,是先按商品种类对销售记录分组不同机器处理不同商品种类的销售记录,还是随机向各台机器分发一部分销售记录进荇统计最后把各台机器的统计结果按商品种类合并?

  2. 上述两种方式都涉及大数据是什么的排序问题应选择哪种排序算法?应该在哪台機器上执行排序过程

  3. 如何定义每台机器处理的大数据是什么从哪里来,处理结果到哪里去大数据是什么是主动发送,还是接收方申请時才发送如果是主动发送,接收方处理不过来怎么办如果是申请时才发送,那发送方应该保存大数据是什么多久

  4. 会不会任务分配不均,有的机器很快就处理完了有的机器一直忙着?甚至闲着的机器需要等忙着的机器处理完后才能开始执行?

  5. 如果增加一台机器它能不能减轻其他机器的负荷,从而缩短任务执行时间

  6. 如果一台机器挂了,它没有完成的任务该交给谁会不会遗漏统计或重复统计?

  7. 统計过程中机器之间如何协调,是否需要专门的一台机器指挥调度其他机器如果这台机器挂了呢?

  8. (可选)如果销售记录在源源不断地增加统计还没执行完新记录又来了,如何保证统计结果的准确性能不能保证结果是实时更新的?再次统计时能不能避免大量重复计算

  9. (可选)能不能让用户执行一句SQL就可以得到结果?

上述问题中除了第1个外,其余的都与具体任务无关在其他分布式计算的场合也会遇到,而且解决起来都相当棘手即使第1个问题中的分组、统计,在很多大数据是什么处理场合也会涉及只是具体方式不同。如果能把這些问题的解决方案封装到一个计算框架中则可大大简化这类应用程序的开发。

2004年前后Google先后发表三篇论文分别介绍分布式文件系统GFS、並行计算模型MapReduce、非关系大数据是什么存储系统BigTable,第一次提出了针对大大数据是什么分布式处理的可重用方案在Google论文的启发下,Yahoo的工程师Doug Cutting囷Mike Cafarella开发了Hadoop在借鉴和改进Hadoop的基础上,又先后诞生了数十种应用于分布式环境的大大数据是什么计算框架本文在参考业界惯例的基础上,對这些框架按下列标准分类:

  1. 如果不涉及上面提出的第8、9两个问题则属于批处理框架。批处理框架重点关心大数据是什么处理的吞吐量又可分为非迭代式和迭代式两类,迭代式包括DAG(有向无环图)、图计算等模型

  2. 若针对第8个问题提出来应对方案,则分两种情况:如果偅点关心处理的实时性则属于流计算框架;如果侧重于避免重复计算,则属于增量计算框架

  3. 如果重点关注的是第9个问题,则属于交互式分析框架

本文下面分别讨论批处理、流计算、交互式分析三种类别的框架,然后简要介绍大大数据是什么计算框架的一些发展趋势

Hadoop朂初主要包含分布式文件系统HDFS和计算框架MapReduce两部分,是从Nutch中独立出来的项目在2.0版本中,又把资源管理和任务调度功能从MapReduce中剥离形成YARN使其怹框架也可以像MapReduce那样运行在Hadoop之上。与之前的分布式计算框架相比Hadoop隐藏了很多繁琐的细节,如容错、负载均衡等更便于使用。

Hadoop也具有很強的横向扩展能力可以很容易地把新计算机接入到集群中参与计算。在开源社区的支持下Hadoop不断发展完善,并集成了众多优秀的产品如非关系大数据是什么库HBase、大数据是什么仓库Hive、大数据是什么处理工具Sqoop、机器学习算法库Mahout、一致性服务软件ZooKeeper、管理工具Ambari等形成了相对完整嘚生态圈和分布式计算事实上的标准。

MapReduce可以理解为把一堆杂乱无章的大数据是什么按照某种特征归并起来然后处理并得到最后的结果。基本处理步骤如下:

  1. 把输入文件按照一定的标准分片每个分片对应一个map任务。一般情况下MapReduce和HDFS运行在同一组计算机上,也就是说每台計算机同时承担存储和计算任务,因此分片通常不涉及计算机之间的大数据是什么复制

  2. 按照一定的规则把分片中的内容解析成键值对。通常选择一种预定义的规则即可

  3. 执行map任务,处理每个键值对输出零个或多个键值对。

  4. MapReduce获取应用程序定义的分组方式并按分组对map任务輸出的键值对排序。默认每个键名一组

  5. 待所有节点都执行完上述步骤后,MapReduce启动Reduce任务每个分组对应一个Reduce任务。

  6. 执行reduce任务的进程通过网络獲取指定组的所有键值对

  7. 把键名相同的值合并为列表。

  8. 执行reduce任务处理每个键对应的列表,输出结果

在上面的步骤中,应用程序主要負责设计map和reduce任务其他工作均由框架负责。在定义map任务输出大数据是什么的方式时键的选择至关重要,除了影响结果的正确性外也决萣大数据是什么如何分组、排序、传输,以及执行reduce任务的计算机如何分工前面提到的商品销售统计的例子,可选择商品种类为键MapReduce执行商品销售统计的过程大致如下:

  1. 把销售记录分片,分配给多台机器

  2. 每条销售记录被解析成键值对,其中值为销售记录的内容键可忽略。

  3. 执行map任务每条销售记录被转换为新的键值对,其中键为商品种类值为该条记录中商品的销售额。

  4. MapReduce把map任务生成的大数据是什么按商品種类排序

  5. 待所有节点都完成排序后,MapReduce启动reduce任务每个商品种类对应一个reduce任务。

  6. 执行reduce任务的进程通过网络获取指定商品种类的各次销售额

  7. MapReduce把同一种商品下的各次销售额合并到列表中。

  8. 执行reduce任务累加各次销售额,得到该种商品的总销售额

上面的过程还有优化的空间。在傳输各种商品每次的销售额大数据是什么前可先在map端对各种商品的销售额进行小计,由此可大大减少网络传输的负荷MapReduce通过一个可选的combine任务支持该类型的优化。

现在假设我们的目标更进一步希望知道销售得最好的前10种商品。我们可以分两个环节来计算:

  1. 统计各种商品的銷售额通过MapReduce实现,这在前面已经讨论过

  2. 对商品种类按销售额排名。可以通过一个排序过程完成假定商品种类非常多,需要通过多台計算机来加快计算速度的话我们可以用另一个MapReduce过程来实现,其基本思路是把map和reduce分别当作小组赛和决赛先计算各分片的前10名,汇总后再計算总排行榜的前10名

从上面的例子可以看出,通过多个MapReduce的组合可以表达复杂的计算问题。不过组合过程需要人工设计,比较麻烦叧外,每个阶段都需要所有的计算机同步影响了执行效率。

为克服上述问题业界提出了DAG(有向无环图)计算模型,其核心思想是把任務在内部分解为若干存在先后顺序的子任务由此可更灵活地表达各种复杂的依赖关系。Microsoft Dryad、Google FlumeJava、Apache Tez是最早出现的DAG模型Dryad定义了串接、全连接、融合等若干简单的DAG模型,通过组合这些简单结构来描述复杂的任务FlumeJava、Tez则通过组合若干MapReduce形成DAG任务。

MapReduce的另一个不足之处是使用磁盘存储中间結果严重影响了系统的性能,这在机器学习等需要迭代计算的场合更为明显加州大学伯克利分校AMP实验室开发的Spark克服了上述问题。Spark对早期的DAG模型作了改进提出了基于内存的分布式存储抽象模型RDD(Resilient Distributed Datasets,可恢复分布式大数据是什么集)把中间大数据是什么有选择地加载并驻留到内存中,减少磁盘IO开销与Hadoop相比,Spark基于内存的运算要快100倍以上基于磁盘的运算也要快10倍以上。

reduce、lookup、save用于收集或输出计算结果如前媔统计商品销售额的例子,在Spark中只需要调用map和reduceByKey两个转换操作就可以实现整个程序包括加载销售记录和保存统计结果在内也只需要寥寥几荇代码,并且支持Java、Scala、Python、R等多种开发语言比MapReduce编程要方便得多。下图说明reduceByKey的内部实现

RDD由于把大数据是什么存放在内存中而不是磁盘上,洇此需要比Hadoop更多地考虑容错问题分布式大数据是什么集的容错有两种方式:大数据是什么检查点和记录大数据是什么的更新。处理海量夶数据是什么时大数据是什么检查点操作成本很高, 因此Spark默认选择记录更新的方式不过如果更新粒度太细太多,记录更新成本也不低因此,RDD只支持粗粒度转换即只记录单个块上执行的单个操作,然后将创建RDD的一系列变换序列记录下来类似于大数据是什么库中的日誌。

当RDD的部分分区大数据是什么丢失时Spark根据之前记录的演变过程重新运算,恢复丢失的大数据是什么分区Spark生态圈的另一项目Alluxio(原名Tachyon)吔采用类似的思路,使大数据是什么写入速度比HDFS有数量级的提升

  • MapReduce抽象层次低,需要手工编写代码完成;Spark基于RDD抽象使大数据是什么处理邏辑的代码非常简短。

  • MapReduce只提供了map和reduce两个操作表达力欠缺;Spark提供了很多转换和动作,很多关系大数据是什么库中常见的操作如JOIN、GROUP BY已经在RDD中實现

  • MapReduce中,只有map和reduce两个阶段复杂的计算需要大量的组合,并且由开发者自己定义组合方式;Spark中RDD可以连续执行多个转换操作,如果这些操作对应的RDD分区不变的话还可以放在同一个任务中执行。

  • MapReduce处理逻辑隐藏在代码中不直观;Spark代码不包含操作细节,逻辑更清晰

  • MapReduce中间结果放在HDFS中;Spark中间结果放在内存中,内存放不下时才写入本地磁盘而不是HDFS这显著提高了性能,特别是在迭代式大数据是什么处理的场合

  • MapReduceΦ,reduce任务需要等待所有map任务完成后才可以开始;在Spark中分区相同的转换构成流水线放到同一个任务中运行。

在大大数据是什么时代大数據是什么通常都是持续不断动态产生的。在很多场合大数据是什么需要在非常短的时间内得到处理,并且还要考虑容错、拥塞控制等问題避免大数据是什么遗漏或重复计算。流计算框架则是针对这一类问题的解决方案流计算框架一般采用DAG(有向无环图)模型。图中的節点分为两类:一类是大数据是什么的输入节点负责与外界交互而向系统提供大数据是什么;另一类是大数据是什么的计算节点,负责唍成某种处理功能如过滤、累加、合并等从外部系统不断传入的实时大数据是什么则流经这些节点,把它们串接起来如果把大数据是什么流比作水的话,输入节点好比是喷头源源不断地出水,计算节点则相当于水管的转接口如下图所示。

图7. 流计算DAG模型示意图

为提高並发性每一个计算节点对应的大数据是什么处理功能被分配到多个任务(相同或不同计算机上的线程)。在设计DAG时需要考虑如何把待處理的大数据是什么分发到下游计算节点对应的各个任务,这在实时计算中称为分组(Grouping)最简单的方案是为每个任务复制一份,不过这樣效率很低更好的方式是每个任务处理大数据是什么的不同部分。随机分组能达到负载均衡的效果应优先考虑。不过在执行累加、大數据是什么关联等操作时需要保证同一属性的大数据是什么被固定分发到对应的任务,这时应采用定向分组在某些情况下,还需要自萣义分组方案

在流计算框架中,目前人气最高应用最广泛的要数Storm。这是由于Storm具有简单的编程模型且支持Java、Ruby、Python等多种开发语言。Storm也具囿良好的性能在多节点集群上每秒可以处理上百万条消息。Storm在容错方面也设计得很优雅下面介绍Storm确保消息可靠性的思路。

在DAG模型中確保消息可靠的难点在于,原始大数据是什么被当前的计算节点成功处理后还不能被丢弃,因为它生成的大数据是什么仍然可能在后续嘚计算节点上处理失败需要由该消息重新生成。而如果要对消息在各个计算节点的处理情况都作跟踪记录的话则会消耗大量资源。

Storm的解决思路是为每条消息分派一个ID作为唯一性标识,并在消息中包含原始输入消息的ID同时用一个响应中心(Acker)维护每条原始输入消息的狀态,状态的初值为该原始输入消息的ID每个计算节点成功执行后,则把输入和输出消息的ID进行异或再异或对应的原始输入消息的状态。由于每条消息在生成和处理时分别被异或一次则成功执行后所有消息均被异或两次,对应的原始输入消息的状态为0因此当状态为0后鈳安全清除原始输入消息的内容,而如果超过指定时间间隔后状态仍不为0则认为处理该消息的某个环节出了问题,需要重新执行

图9. Storm保證消息可靠性过程示意图

Storm还实现了更高层次的抽象框架Trident。Trident以微批处理的方式处理大数据是什么流比如每次处理100条记录。Trident提供了过滤、分組、连接、窗口操作、聚合、状态管理等操作支持跨批次进行聚合处理,并对执行过程进行优化包括多个操作的合并、大数据是什么傳输前的本地聚合等。以微批处理方式处理大数据是什么流的框架还有Spark Streaming

图10. 实时流处理与微批处理比较

下面是Storm、Trident与另外几种流计算框架的對比:

在解决了大大数据是什么的可靠存储和高效计算后,如何为大数据是什么分析人员提供便利日益受到关注而最便利的分析方式莫過于交互式查询。这几年交互式分析技术发展迅速目前这一领域知名的平台有十余个,包括Google开发的Dremel和PowerDrillFacebook开发的Presto,

一些批处理和流计算平囼如Spark和Flink也分别内置了交互式分析框架由于SQL已被业界广泛接受,目前的交互式分析框架都支持用类似SQL的语言进行查询早期的交互式分析岼台建立在Hadoop的基础上,被称作SQL-on-Hadoop后来的分析平台改用Spark、Storm等引擎,不过SQL-on-Hadoop的称呼还是沿用了下来SQL-on-Hadoop也指为分布式大数据是什么存储提供SQL查询功能。

Apache Hive是最早出现的架构在Hadoop基础之上的大规模大数据是什么仓库由Facebook设计并开源。Hive的基本思想是通过定义模式信息,把HDFS中的文件组织成类姒传统大数据是什么库的存储系统Hive 保持着 Hadoop 所提供的可扩展性和灵活性。Hive支持熟悉的关系大数据是什么库概念比如表、列和分区,包含對非结构化大数据是什么一定程度的 SQL 支持它支持所有主要的原语类型(如整数、浮点数、字符串)和复杂类型(如字典、列表、结构)。它还支持使用类似 SQL 的声明性语言 Hive Query Language (HiveQL) 表达的查询任何熟悉 SQL 的人都很容易理解它。HiveQL被编译为MapReduce过程执行下图说明如何通过MapReduce实现JOIN和GROUP BY。

Hive与传统关系大数据是什么库对比如下:

Hive的主要弱点是由于建立在MapReduce的基础上性能受到限制。很多交互式分析平台基于对Hive的改进和扩展包括Stinger、Presto、Kylin等。其中Kylin是中国团队提交到Apache上的项目其与众不同的地方是提供多维分析(OLAP)能力。Kylin对多维分析可能用到的度量进行预计算供查询时直接訪问,由此提供快速查询和高并发能力Kylin在eBay、百度、京东、网易、美团均有应用。

对于交互式分析SQL查询引擎的优劣对性能的影响举足轻偅。Spark开发了自己的查询引擎Catalyst而包括Hive、Drill、Kylin、Flink在内的很多交互式分析平台及大数据是什么仓库使用Calcite(原名optiq)作为SQL引擎。Calcite是一个Apache孵化项目其創建者Julian Hyde曾是Oracle大数据是什么库SQL引擎的主要开发者。Calcite具有下列几个技术特点:

  • 独立于编程语言和大数据是什么源可以支持不同的前端和后端。

  • 支持关系代数、可定制的逻辑规划规则和基于成本模型优化的查询引擎

由于分布式场景远比传统的大数据是什么存储环境更复杂,Calcite和Catalyst嘟还处于向Oracle、MySQL等经典关系大数据是什么库引擎学习的阶段在性能优化的道路上还有很长的路要走。

除了上面介绍的几种类型的框架外還有一些目前还不太热门但具有重要潜力的框架类型。图计算是DAG之外的另一种迭代式计算模型它以图论为基础对现实世界建模和计算,擅长表达大数据是什么之间的关联性适用于PageRank计算、社交网络分析、推荐系统及机器学习。这一类框架有Google Pregel、Apache Giraph、Apache Hama、PowerGraph、其中PowerGraph是这一领域目前朂杰出的代表。很多图大数据是什么库也内置图计算框架

另一类是增量计算框架,探讨如何只对部分新增大数据是什么进行计算来极大提升计算过程的效率可应用到大数据是什么增量或周期性更新的场合。这一类框架包括Google Percolator、Microsoft Kineograph、阿里Galaxy等

从Hadoop横空出世到现在10余年的时间中,夶大数据是什么分布式计算技术得到了迅猛发展不过由于历史尚短,这方面的技术远未成熟各种框架都还在不断改进,并相互竞争

性能优化毫无疑问是大大数据是什么计算框架改进的重点方向之一。而性能的提高很大程度上取决于内存的有效利用这包括前面提到的內存计算,现已在各种类型的框架中广泛采用内存资源的分配管理对性能也有重要影响,JVM垃圾回收在给开发人员带来便利的同时也制約了内存的有效利用。另外Java的对象创建及序列化也比较浪费资源。在内存优化方面做足功夫的代表是Flink出于性能方面的考虑,Flink很多组件洎行管理内存无需依赖JVM垃圾回收机制。Flink还用到开辟内存池、用二进制大数据是什么代替对象、量身定制序列化、定制缓存友好的算法等優化手段Flink还在任务的执行方面进行优化,包括多阶段并行执行和增量迭代

拥抱机器学习和人工智能也是大大数据是什么计算的潮流之┅。Spark和Flink分别推出机器学习库Spark ML和Flink ML更多的平台在第三方大大数据是什么计算框架上提供机器学习,如Mahout、Oryx及一干Apache孵化项目SystemML、HiveMall、PredictionIO、SAMOA、MADLib这些机器學习平台一般都同时支持多个计算框架,如Mahout同时以Spark、Flink、H2O为引擎SAMOA则使用S4、Storm、Samza。在深度学习掀起热潮后又有社区探索把深度学习框架与现囿分布式计算框架结合起来,这样的项目有SparkNet、Caffe

在同一平台上支持多种框架也是发展趋势之一尤其对于那些开发实力较为雄厚的社区。Spark以批处理模型为核心实现了交互式分析框架Spark SQL、流计算框架Spark Streaming(及正在实现的Structured Streaming)、图计算框架GraphX、机器学习库Spark ML。而Flink在提供低延迟的流计算的同时批处理、关系计算、图计算、机器学习,一个也没落下目标直奔大大数据是什么通用计算平台。Google的BEAM(意为Batch+strEAM)则试图把Spark、Flink、Apex这样的计算框架纳入自己制定的标准之下颇有号令江湖之意。

Google的那几篇论文这里就不一一列出了网上很容易搜到。其他推荐的论文如下:

我要回帖

更多关于 数据 的文章

 

随机推荐