中企动力 > 商学院 > 大数据运算
  • ?

    大数据计算的准确性有多高?看看这些截屏就知道了

    苻忆山

    展开

    今天清晨发了一篇文章《高烤状元烤面筋,纯手工制作,五元二大串》,到傍晚时发这篇大数据的文章,偶然发现后台记录的数据出入较大。应该不会是数据延迟这么久,看来误差是存在的。大家可以看看转发数据的问题。自媒体从业者是鱼肉啊。这几个截屏是下午五点半左右的,已经反馈。

    关注头条号华仔聚焦,生活多一些趣事。

  • ?

    【独家】一文读懂大数据计算框架与平台

    南来风

    展开

    1.前言

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

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

    如何为每台机器分配任务,是先按商品种类对销售记录分组,不同机器处理不同商品种类的销售记录,还是随机向各台机器分发一部分销售记录进行统计,最后把各台机器的统计结果按商品种类合并?上述两种方式都涉及数据的排序问题,应选择哪种排序算法?应该在哪台机器上执行排序过程?如何定义每台机器处理的数据从哪里来,处理结果到哪里去?数据是主动发送,还是接收方申请时才发送?如果是主动发送,接收方处理不过来怎么办?如果是申请时才发送,那发送方应该保存数据多久?会不会任务分配不均,有的机器很快就处理完了,有的机器一直忙着?甚至,闲着的机器需要等忙着的机器处理完后才能开始执行?如果增加一台机器,它能不能减轻其他机器的负荷,从而缩短任务执行时间?如果一台机器挂了,它没有完成的任务该交给谁?会不会遗漏统计或重复统计?统计过程中,机器之间如何协调,是否需要专门的一台机器指挥调度其他机器?如果这台机器挂了呢?(可选)如果销售记录在源源不断地增加,统计还没执行完新记录又来了,如何保证统计结果的准确性?能不能保证结果是实时更新的?再次统计时能不能避免大量重复计算?(可选)能不能让用户执行一句SQL就可以得到结果?

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

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

    如果不涉及上面提出的第8、9两个问题,则属于批处理框架。批处理框架重点关心数据处理的吞吐量,又可分为非迭代式和迭代式两类,迭代式包括DAG(有向无环图)、图计算等模型。若针对第8个问题提出来应对方案,则分两种情况:如果重点关心处理的实时性,则属于流计算框架;如果侧重于避免重复计算,则属于增量计算框架。如果重点关注的是第9个问题,则属于交互式分析框架。

    本文下面分别讨论批处理、流计算、交互式分析三种类别的框架,然后简要介绍大数据计算框架的一些发展趋势。文章最后介绍这一领域的学习资料。

    图1.大数据计算框架全景图2.批处理框架

    2.1.Hadoop

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

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

    图2.Hadoop生态圈(删减版)

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

    把输入文件按照一定的标准分片,每个分片对应一个map任务。一般情况下,MapReduce和HDFS运行在同一组计算机上,也就是说,每台计算机同时承担存储和计算任务,因此分片通常不涉及计算机之间的数据复制。按照一定的规则把分片中的内容解析成键值对。通常选择一种预定义的规则即可。

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

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

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

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

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

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

    图3.MapReduce处理过程

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

    把销售记录分片,分配给多台机器。每条销售记录被解析成键值对,其中值为销售记录的内容,键可忽略。

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

    MapReduce把map任务生成的数据按商品种类排序。

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

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

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

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

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

    2.2.DAG模型

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

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

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

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

    图4.MapReduce(左)与Tez(右)执行复杂任务时对比

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

    图5.MapReduce与Spark中间结果保存方式对比

    Spark为RDD提供了丰富的操作方法,其中map、 filter、 flatMap、 sample、groupByKey、 reduceByKey、union、join、cogroup、mapValues、sort、partionBy用于执行数据转换,生成新的RDD,而count、collect、 reduce、lookup、save用于收集或输出计算结果。如前面统计商品销售额的例子,在Spark中只需要调用map和reduceByKey两个转换操作就可以实现,整个程序包括加载销售记录和保存统计结果在内也只需要寥寥几行代码,并且支持Java、Scala、Python、R等多种开发语言,比MapReduce编程要方便得多。下图说明reduceByKey的内部实现。

    图6.RDD reduceByKey内部实现

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

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

    下面总结Spark对MapReduce的改进:

    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中,分区相同的转换构成流水线放到同一个任务中运行。3.流计算框架

    3.1.流计算概述

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

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

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

    图8.流计算分组

    由于应用场合的广泛性,目前市面上已经有不少流计算平台,包括Google MillWheel、Twitter Heron和Apache项目Storm、Samza、S4、Flink、Apex、Gearpump。

    3.2.Storm及Trident

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

    在DAG模型中,确保消息可靠的难点在于,原始数据被当前的计算节点成功处理后,还不能被丢弃,因为它生成的数据仍然可能在后续的计算节点上处理失败,需要由该消...

  • ?

    什么样的数据才算大数据?——大数据的特性

    牛不斜

    展开

    什么是大数据?大数据就是指在一定时间范围内无法使用传统数据库工具对其进行捕捉、管理、计算、分析和处理的数据集合,大数据有以下四个特性:海量的数据规模(Volumn),数据类型繁多(Variety),数据流转速度极快(Velocity)以及价值密度较低(Value),我们就说说这四大特性。

    海量的数据规模

    我们接触最多最敏感的数据那就是我们手机所购买的流量,最常见的数据计量单位为K、M和G,他们的关系为1G=1024M,1M=1024KB。也许你也听过TB,1TB=1024G,这个数据单位对我们来世已经相当庞大了,我们的笔记本最大的容量也就在1TB这个级别,但是在大数据眼里最小的数据也得10TB起,比TB级还大的数据计量单位还有吗?有,而且还很多,1PB=1024TB,1EB=1024PB,1ZB=1024EB,1YB=1024ZB......我们已经无法感知这么大的数据量了。截止到2011 年,互联网用户数已达到20 亿; RFID 标签在2005 年的保有量仅有13亿个,但是到2010 年这个数字超过了300 亿;2006 年资本市场的数据比2003 年增长了17.5倍;日前新浪微博上每天上传的微博数超过1 亿条;Facebook 每天处理10TB 的数据;世界气象中心积累了220TB 的Web 数据,9PB 其他类型数据……

    极快的数据流转

    数据具有一定的时效性,是不停的变化的,可以随时间数据量逐渐增大,也可在空间上不断移动变化的数据。如果我们采集到的数据不经过流转,最终会过期作废。客户的体验在分秒级别,海量的数据,带来的第一个问题就是大大延长了各类报表生成时间,我们能否在极端的时间内提取最有价值的信心呢?数据在1秒内得不到流转处理,就会给客户带来较差的使用体验,若我们的数据处理软件达不到“秒”处理,所带来的商业价值就会大打折扣。

    价值密度低

    尽管大数据的数据量巨大,但是有价值的信息极少,我们要通过分析才能将大数据从数据到价值的转变,这些工作量极其庞大,所以云计算是一个很好的解决途径。以监控视频为例,一小时的视频,在不间断的监控过程中,可能有用的数据仅仅只有一两秒。

    数据种类繁多

    数据的格式是多样化的,如文字、图片、视频、音频、地理位置信息等,也可以是不同的数据类别,也可以有不容的来源,如传感器、互联网。首先用户是一个复杂的个体,单一的行为数据是不足以描述用户的各种行为,多元化的信息采集处理就像拼图一样,逐渐勾勒出我们身体的骨架,增添上我们的血肉。我们在淘宝、京东购物时,总会在下面的推荐区推荐我们想要的东西,比如我们去频繁的搜索浏览某件商品,这是他们就会采集我们浏览的数据,从中挖去有价值的信息,推送给我们。所以说这样的模式给一种体验,那就是这些app越来越懂我们的爱好和需求。

    大数据未来会渗透在很多领域,大数据与云计算,机器学习与人工智能,物联网,区块链等。

  • ?

    大数据时代,掌握大数据等于掌握掌握世界

    邬丹翠

    展开

    什么是大数据?

    大数据是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。大数据技术,是指从各种各样类型的数据中,快速获得有价值信息的能力。适用于大数据的技术,包括大规模并行处理(MPP)数据库,数据挖掘电网,分布式文件系统,分布式数据库,云计算平台,互联网,和可扩展的存储系统。

    大数据有何作用?

    第一,对大数据的处理分析正成为新一代信息技术融合应用的结点。移动互联网、物联网、社交网络、数字家庭、电子商务等是新一代信息技术的应用形态,这些应用不断产生大数据。云计算为这些海量、多样化的大数据提供存储和运算平台。通过对不同来源数据的管理、处理、分析与优化,将结果反馈到上述应用中,将创造出巨大的经济和社会价值。大数据具有催生社会变革的能量。但释放这种能量,需要严谨的数据治理、富有洞见的数据分析和激发管理创新的环境(Ramayya Krishnan,卡内基·梅隆大学海因兹学院院长)。

    第二,大数据是信息产业持续高速增长的新引擎。面向大数据市场的新技术、新产品、新服务、新业态会不断涌现。在硬件与集成设备领域,大数据将对芯片、存储产业产生重要影响,还将催生一体化数据存储处理服务器、内存计算等市场。在软件与服务领域,大数据将引发数据快速处理分析、数据挖掘技术和软件产品的发展。

    第三,大数据利用将成为提高核心竞争力的关键因素。各行各业的决策正在从“业务驱动” 转变“数据驱动”。对大数据的分析可以使零售商实时掌握市场动态并迅速做出应对;可以为商家制定更加精准有效的营销策略提供决策支持;可以帮助企业为消费者提供更加及时和个性化的服务;在医疗领域,可提高诊断准确性和药物有效性;在公共事业领域,大数据也开始发挥促进经济发展、维护社会稳定等方面的重要作用。

    第四,大数据时代科学研究的方法手段将发生重大改变。例如,抽样调查是社会科学的基本研究方法。在大数据时代,可通过实时监测、跟踪研究对象在互联网上产生的海量行为数据,进行挖掘分析,揭示出规律性的东西,提出研究结论和对策。

    了解了大数据的概念和作用,我们先来看一下商业巨头们如何利用大数据吧。

    一、谷歌公司(google Inc)

    第一个 :ReCAPTCHA案例。

    这个虽然是被谷歌收购的,但是,具有典型的谷歌思维。为了解决垃圾邮件和网络机器人的问题,冯.安发明了验证码的解决方案。如果只限于此,也就没有特别可以称道的,但是他意识到每天有这么多人要浪费10秒钟的时间输入这堆恼人的字母,而随后大量的信息被随意地丢弃时,他开始寻找能使人的计算能力得到更有效利用的方法。 他想到了一个继任者,恰如其分地将其命名为ReCaptcha。和原有随机字母输入不同,人们需要从计算机光学字符识别程序无法识别的文本扫描项目中读出两个单词并输入。其中一个单词其他用户也识别过,从而可以从该用户的输入中判断注册者是人;另一个单词则是有待辨识和解疑的新词。为了保证准确度,系统会将同一个模糊单词发给五个不同的人,直到他们都输入正确后才确定这个单词是对的。在这里,数据的主要用途是证明用户是人,但它也有第二个目的:破译数字化文本中不清楚的单词。ReCaptcha的作用得到了认可,2009年谷歌收购了冯·安的公司,并将这一技术用于图书扫描项目,再后来,谷歌街景也开始使用这项技术。把验证码和OCR需求巧妙结合起来,这展示了思维的威力,实现了ReCaptcha技术提供者和使用者的双赢,技术提供者利用OCR识别获得了自己的受益,使用者不需要任何付费(互联网免费思维),也愿意使用,对于用户其实也没有影响,没有增加额外的工作。上研究生的时候,就研究OCR汉字识别问题,识别率始终是个问题,对于手写就更低了,要花费大量人力来解决,并且,人工识别工作是非常无聊,没有办法来保障质量。再想起12306的验证码,更令人无语了。我们浪费了多少资源?我们有多少资源可用充分来利用?

    第二个:拼写检查纠错的案例。

    我们都经常使用微软的Word,其中就有拼写检查纠错功能,微软实现这个功能,采用的是传统的软件思维,也就是利用规则和词库来解决,这个需要不断耗费人力进行规则和词库的升级,对于不同的语言,耗费更是巨大。谷歌解决这个方法,用的相对巧妙,在搜索的时候,当你输入一个错误的词时,会给一个提示,要找的是不是建议的词,如果用户确认后,谷歌就进行记录处理,后面,再经过一些算法处理,经过大量的数据学习,各个拼写检查纠错就越来越好,并且,这个后续维护成本很低, 效果越来越好。其实,谷歌翻译也使用了类似的思路,虽然前期算法,包括大数据处理花费了比较多,后续,基本实现了自动化,系统会越来越强,维护升级成本很低,项目就变成可持续发展。

    第三个:对流感的预测

    2009年,一种新型的流感病毒h1n1在全球迅速传播开来。美国,和世界上所有的国家一样,要求医生们发现案例市告知疾病控制与预防中心。但是,人们并不是在第一时间去医院检查,而是会有一段时间的延迟,消息要传达到疾控中心也要时间,从而造成一定的滞后性。

    在该病毒爆发的几周前,谷歌公司的工程师们在《自然》杂志上发表了一篇论文。文中解释了谷歌为什么能够预测冬季流感的传播:不仅是全美范围内,而且具体到特定的地区和州。

    谷歌如何做到的呢?数据。

    谷歌通过观察人们在网上的搜索记录来完成这个预测,谷歌保存了多年来所有的搜索记录,每天都会超过30亿条的搜索指令。如此庞大的数据资源才能支撑谷歌完成这项工作。

    二、facebook。

    Facebook(脸书)是美国的一个社交网络服务网站 ,创立于2004年2月4日,总部位于美国加利福尼亚州帕拉阿图,2012年3月6日发布Windows版桌面聊天软件Facebook Messenger ,主要创始人马克·扎克伯格。它是世界排名领先的照片分享站点,截至2013年11月每天上传约3.5亿张照片、截至2012年5月,拥有约9亿用户。Facebook的总部设在硅谷的门洛帕克(Menlo Park)——1 Hacker Way 从2006年9月11日起,任何用户输入有效电子邮件地址和自己的年龄段,即可加入。在2015年8月28日,单日用户数突破10亿。

    fancebook,拥有这庞大数据,同时它也不会浪费这些数据。Facebook通过用户社交网络图得知人们的喜好、

    说完了,我们转过头看一下我们国内。

    大数据现今在国内也是蓬勃发展,让我让数据说话!

    大数据企业发展态势

    态势一:2017年,我国大数据企业依旧整体呈现“金字塔”状的实力分布,从金字塔上层来看,我国大数据企业发展指数高于50的企业数量占比仅为7.4%,与去年相比,中高区间的龙头企业发展指数均有不同程度的提升,体现出“强者恒强”的发展势头。2017年,随着新晋企业数量增多、初创企业发展活力不断提升,金字塔根基更趋稳固;专精特新的独角兽企业发展势头迅猛,成为我国大数据企业发展的中坚力量。

    态势二:2017年,我国大数据企业基础画像指数呈现较为明显的三重集团趋势,可以分为领军企业(数量占比9.23%,指数跨度从62.50到10.46)、中坚企业(数量占比29.49%,指数跨度从9.89到1.00)、上升企业(数量占比为50.16%,指数跨度从0.98到0.001)三类企业。从构成占比上看,2017年,我国大数据领军企业占比基本维持不变,而中坚企业占比显著增加,上升企业比例对比2016年有较为明显的减少。

    态势三:2017年,我国大数据企业技术研发指数呈现“龙头领先、中小微主体跟进”总体趋势,技术研发指数超过10的龙头企业数量占比为9.85%,低于10的企业占比达到90.15%。大数据企业技术研发指数平均值为4.06,同比2016增长了3.18%,其中,以华为、中兴等通信企业和BAT等互联网企业为代表的TOP20龙头企业的技术研发指数同比2016年增长了5.73%。

    态势四:2017年,我国大数据企业市场拓展指数呈现出“龙头带动、全面壮大”的分布格局,我国大数据企业市场拓展指数小于30的企业数量占到92.88%,指数超过30的大数据企业占比为7.12%。与2016年相比,龙头企业依旧强势引领大数据市场,中间企业及长尾企业亦积极拓展市场版图,行业整体呈稳步发展态势。

    态势五:2017年,大数据企业尤其是骨干企业发展集聚态势进一步强化,绝大多数企业集聚在北京、天津、山东、江苏、浙江、上海、广东、福建等东部沿海信息技术产业基础较好的省市。与2016年相比,东北、中西部等重点城市,以及乌鲁木齐、呼和浩特等地的大数据企业集聚化趋势日益明显。

    态势六:2017年,我国产业环节大数据企业聚焦数据采集、数据存储、数据预处理、数据分析、数据可视化、数据流通,跨度从19.48到6.87,发展指数相对比较均衡,数据分析环节企业发展指数水平相对突出,发展指数达到19.48,数据大数据分析挖掘环节必将涌现出更多的独角兽企业。与2016年相比,大数据分析环节指数增长3.8,其他环节指数均有不同程度下降。

    态势七:2017年,我国重点行业大数据产业企业聚焦政务、工业、健康医疗、交通、农业、金融、教育、能源等17个行业领域,企业平均发展指数为23.36,最高的安防大数据企业发展指数达到35.71,最低的能源大数据企业发展指数为16.89。与2016年相比,主要行业大数据企业平均发展指数同比增加了0.25,大多数行业发展指数都稳中有进,除安防领域初步定型,同比2016年降低了4.01,其他重点行业领域指数均有不同程度上升。

    态势八:2017年,我国特色细分领域大数据企业主要分为三大阵营,与2016年相比,三大阵容的特色细分领域发生了明显变化。一是从事人工智能相关的龙头企业处于第一阵营,平均发展指数维持在21左右;二是从事工控安全、数据库、区块链、征信分析、商业智能BI、数据中心IDC、数据营销、基因测序等10类细分领域大数据相关业务的龙头企业处于第二阵营,平均发展指数处于13.97到17.78之间;三是以虚拟现实、开源技术和车联网为代表的第三阵营,整体发展指数相对略低,处于12左右。

    进过调研分析,我们可以作出预判

    2018年我国大数据产业发展的主要趋势有:

    1、产业将持续保持快速增长态势。预计2018年我国大数据核心产业规模将突破5700亿元。

    2、融合渗透效应向更深层次延伸。延伸方向既包括经济运行、社会生活等应用领域,也包括物联网、人工智能等关联技术。

    3、制造业数字转型作用日益凸显。以大数据驱动制造业数字化转型的新模式、新业态将不断涌现。

    4、技术创新仍是产业发展主基调。大数据领域核心关键技术将加速突破,跨学科、跨领域交叉融合技术研究将成为发展重点。

    5、产业集聚特色化发展态势逐步显现。国家大数据综合试验区建设的不断深入,一批省级大数据产业集聚区将进一步优化资源配置、形成集聚效应、发挥辐射带动作用。

    6、产业生态体系迈入成熟完善阶段。大数据相关政策将加快落地实施,更多创新性政策将加快出台,大数据产业发展环境将进一步优化。

    区域大数据产业发展态势:

    态势一:2017年,国家大数据综合试验区依然引领产业发展,其所在区域的大数据产业发展总指数在全国大数据产业发展总指数的占比达37.54%。试验区内各省市指数较去年增幅均值为6.23,高于全国增幅均值的5.78,大数据产业发展速度高于全国平均水平。

    态势二:2017年,大数据产业集聚发展效应进一步凸显,长三角地区、珠三角地区、中西部地区和东北地区大数据产业集聚发展格局基本形成。

    态势三:2017年,北京、江苏、广东、浙江、上海等五省市成为大数据产业发展第一梯队,其大数据发展总指数在全国大数据发展总指数的占比高达26.52%,领先的优势地位明显。浙江省大数据产业发展指数较去年增长12.71,成为全国大数据产业发展指数增幅最高城市。

    态势四:2017年,我国东部、西部、中部、东北四个分区产业发展差异化明显。东部地区整体发展水平最高,大数据产业发展指数增幅均值为7.39,远超全国平均水平5.78,天津、河北、海南排名上升;西部地区未来仍有巨大发展空间,重庆大数据产业发展指数较去年增长10.12,增幅仅次于浙江省位列全国第二,宁夏、内蒙古二地成后起之秀;中部地区整体发展速度高于西部和东北,山西发力大数据产业,排名明显提升。东北地区辽宁继续蝉联区域榜首,辐射带动作用逐步凸显。

    态势五:2017年,各省市大数据产业发展环境均呈现向好态势,各省市的发展环境平均指数为10.9,较去年提高32.9%,18个省市的发展环境指数高于平均值,占比达到58%,而发展环境指数在去年平均值以上的省市高达30个;同时,江苏、重庆、安徽等地由于组织机制进一步完善、区域信息化水平加速提升等因素影响,较去年排名增速明显。

    态势六:2017年,全国各省市大数据产业发展水平均有提升,大数据产业发展总指数为363.9,较去年提升16.8%;

    但受数据集聚开放水平、大数据产业规模、大数据企业主体等多种因素共同影响,各省...

  • ?

    带你认识当之无愧的大数据“大人物”

    巫牛青

    展开

    转载自百家号作者:Herbert今日行业一览

    今天继续带你解读大数据领域,“大人物”就是大数据综合服务龙头——中科曙光,通过对该公司的业务布局和发展情况,让你了解其龙头地位。中科曙光以高端计算机、存储及IT核心设备的研发、生产制造为基础,依托全自主知识产权的技术创新能力,对外提供云计算及大数据综合服务。之前文章介绍过了大数据的一些其他文章(可查看以往文章)。

    一、所属行业概况

    公司所属行业为新一代信息技术行业,是国家重点发展的战略新兴产业之一。同时,高端计算机等核心设备也是其他战略新兴产业的重要基础支撑,在建设创新型国家的总目标支撑下,本行业市场空间广阔、发展前景良好。

    1、突破核心技术

    我国信息产业与世界先进水平的差距正逐步缩小,但在部分核心技术上仍然受制于人,“十三五”国家科技创新发展规划对此进行了重点部署并寻求突破,“产、学、研、用”协同创新的局面业已形成。随着我国在IT最为核心的设计技术上获得突破,本行业的成长空间将得到大幅提升。

    2、迎接新技术革命

    信息产业的新技术革命正在进行,云计算、大数据和人工智能成为本行业的发展方向和前沿技术,发达国家在此领域的先发优势并不明显。其中云计算、大数据和人工智能等技术在我国得到快速发展,目前已进入全面应用阶段。同时,由于我国具有人口基数庞大、互联网普及程度不断提高、基础数据资源丰富等特点,为大数据技术的发展与应用提供了得天独厚的条件。

    3、实施国产化替代

    随着我国信息产业的发展,本地企业所能提供的产品已与国外企业基本相当,能够满足我国各行业的信息化需求,同时本地企业具备较强的本地服务能力等综合竞争优势,加之国家的信息安全考虑,本行业的国产化替代是必然趋势。

    4、推动新兴产业快速发展

    人工智能、基因工程、新材料等新兴产业正在迅速崛起,新一代信息技术是其发展的重要依托与基础保障。新兴产业拉动新一代信息技术、新一代信息技术推动新兴产业发展的良性互动正在形成。

    5、推动传统产业转型升级

    中国传统产业正在全面转型升级中,由此带来信息产业的需求旺盛。通过新一代信息技术推动产品与商业模式创新,实施供给侧结构性改革,实现新一代信息技术与行业应用的深度融合。

    二、技术和产品优势

    公司自成立以来始终专注于高端计算机、存储、软件和云计算领域的研发工作。公司已经掌握了大量高端计算机、存储、系统软件和云计算等领域的核心技术,在本领域实现国内领先并达到国际先进水平。2016年,公司成为国家发改委等九部委联合认定的“创新百强”企业,公司科技创新实力得到进一步认可。2017年,公司获批筹建“先进微处理器国家工程实验室”,为公司后续突破微处理器等IT核心技术,全面实现IT产品的自主可控提供了有力的技术支持。

    截止2017年底公司累计申请专利2053项,其中发明专利1690项;获得专利授权806项,其中发明专利授权491项。2017年度公司新增申请专利212项,其中发明专利150项;获得专利授权136项,其中发明专利授权104项。

    (1)高端计算机产品:高端计算机产品:公司在硅立方架构高性能计算机、100Gbps高速互联网络技术、6D-Torus高速网络技术、TC4600E-LP液冷刀片服务器、M-Pro架构刀片服务器、XSystem深度学习系统、高性能计算云管理和运维平台等领域开展了大量研发工作,并形成了一系列软硬件产品,上述产品与技术达到了国内领先水平。面向E计算需求,公司开展了E级高性能计算原型系统研制,在计算、网络、管理、制冷等方面开展核心技术研究。

    2017年,随着英特尔全新SkylakeCPU和AMDEPYC系列CPU发布,曙光同步发布了基于两种平台的全线高性能计算机和通用计算机产品,包括2路通用机架式服务器I620-G30、I610-G30、I420-G30、4路核心应用服务器I840-G30,支持100G互联的新一代TC4600E刀片服务器,符合互联网应用ODCC标准的新一代TC4600T服务器等。新一代产品性能、可扩展性、易用性、稳定性等均获得大幅度提升,市场竞争力进一步增强。

    2017年,公司产品获得了BAT互联网用户的认可,在产品入围上获得进一步突破。符合“天蝎2.5”标准的TC5600I整机柜服务器,保持大批量向用户持续供货。

    (2)存储产品:2017年,ParaStor基于多项技术,对小文件访问性能进行全方位优化,较大幅度提升了小文件性能,并针对石油地震、生物基因、AI等领域持续深入适配与优化,为用户构建最佳实践存储平台方案。同时,公司基于ParaStor推出视频监控领域应用一体机,为视频监控行业用户带来更佳使用体验。

    (3)云计算:随着公司Cloudview云计算操作系统的不断升级完善以及与各行业合作伙伴生态系统的构建,公司建设城市云和行业云计算中心的能力显著提升。公司依托自主云计算产品。

    三、公司所处的行业地位

    1、高端计算机领域

    在科学计算领域,公司高性能计算机产品长期处于领先地位,获得了良好的市场份额与客户口碑。公司是国家突破“E级超算”的一支重要力量,于2016年获批准承担国家重点研发计划的“E级高性能计算机原型系统研制”项目。

    2、存储领域

    公司中高端存储和NAS存储在细分产品领域在中国市场保持领先地位。

    3、云计算与大数据

    2015年,公司提出了“数据中国”战略,通过建设“百城百行”云数据中心,打造覆盖中国的云数据网络。以“让全社会共享数据价值”为愿景,推动公司快速向综合信息系统服务商进行转型。2016年,公司推出“数据中国加速计划”,明确提出“加速网络布局、加速数据汇集”的战略目标,并以“创新品牌云连锁,布局四个大数据”为抓手,积极推动“数据中国”战略落地。公司提出的“云合计划”,在业界创新性地提出了以品牌连锁模式发展城市云中心。2017年,公司发布“数据中国智能计划”,推出AI专用服务器和人工智能管理平台,联合产业链上下游企业进行协同研发和服务部署,进而促进人工智能在智慧城市、智能制造和数据密集型科学研究领域的深入应用。旨在通过先进、高效的智能计算,让数据变成智慧知识和智能服务能力,从而实现“让全社会共享数据价值”的愿景。

    2017年,中国科学院经管会批准公司牵头成立“中国科学院智慧城市产业联盟”。在中科院品牌和技术支撑下,联盟定位于创新链和产业链结合的纽带,为智慧城市建设中的“跨界”合作提供产品、技术、人才和实践经验支持,从而有效促进项目落地、科技创新及成果转化,推动智慧城市建设。目前联盟汇聚了顶层规划、物联网、云计算与大数据、地理信息、信息安全防护、特色应用等成员单位,能提供生态、医疗、建筑、交通、安防等多行业解决方案,打造了多层次、全链条、综合性成果转化的合作平台。

    四、财务情况

    2017 年,公司实现营业收入 62.94 亿元,同比增长 44.36%;利润总额 3.71 亿元,同比增长 32.20%;归属于上市公司股东的净利润 3.09 亿元,同比增长 37.71%;扣非后归属于上市公司股 东的净利润 2.06 亿元,同比增长 23.04%。

    五、行业格局和趋势

    1、行业竞争格局

    在高端计算机领域,市场中参与竞争的企业主要有:戴尔、联想、华为等,其中本土厂商的市场份额呈持续上升趋势。

    在存储领域,EMC等跨国企业占有中国市场份额相对较高,但国内品牌市场增长较快,品牌差距不断缩小。

    在软件、系统集成与技术服务领域,市场竞争较为分散,并未形成由少数厂商主导的市场格局。随着云计算和大数据时代的到来,云服务业务发展较快,本公司在政务云和城市云领域布局较早,优势明显,该领域有望成为公司潜在的未来业务的增长点。对政府、科学、安全、工业等四类大数据应用入手早、投入高、已形成较好基础。

    2、发展趋势

    (1)“大计算”时代来临

    依据Gartner预测,到2020年全球数据总量将达35,000EB,相当于80亿块4TB硬盘的容量,面对持续产生的、不同结构类型的海量数据,传统的计算技术已渐显疲态。随着数百亿个设备即将接入互联网,对计算技术的要求越来越高,不仅要算得快,还要算得好,算得稳,算得多,并可以节省能源。一批面向未来的先进计算技术与产品如E级计算、异构计算、量子计算、认知计算、类脑计算等,正纷至沓来,不断刷新人们对计算的认知。

    (2)“先进计算”需求强劲

    先进计算是指融合计算、存储、网络、控制等技术,构建新一代信息基础设施,实现人、机、物的互联互通、信息共享和智能应用。其技术发展方向大致可以分为两类,一类是对现有技术和架构的不断优化升级,如E级超算、云计算、大数据计算、深度学习、人机物三元融合计算等,另一类是对传统计算技术和架构的颠覆性创新,如超导量子计算、类脑计算、光子计算、新型变革性器件等。先进计算涉及计算原理、材料、工艺、器件、系统、算法、网络架构、应用等多个领域,是新一代信息技术产业的核心和基石。

    中科曙光在大数据领域地位稳固,长期处于领先地位,促使国家在大数据实力不断增强。

    如果您想长期获取科技信息的解读,记得关注我,我会每天更新,谢谢。同时如果您有什么意见和建议,欢迎评论。

  • ?

    怎样通过大数据计算一个国家的命运?

    冷锋

    展开

    这篇文章的题目或者可以叫《“XXXX”——大数据时代的一则寓言故事》,但因为“XXXX”是一个自造的成语,我对它所诠释的本篇文章要表达观点的准确性并不满意,所以就用了这么一个“疑问式的标题党句式”。另外,在看完文章后,希望你能发挥自己的想法在评论区将这个成语,造的更贴切!

    言归正传。当人们掌握了真实有效的数据,然后经过科学系统的归纳与总结,形成结论,最终指导实践,进而改善现实的弊端,使人类社会不断进化。这是科学的工作思路,正确的工作方法,是大数据时代里的一个我们都在追求并努力实践的高效的运行机制。

    既然大数据可以指导生活生产实践,进化人类社会(国家的宏观调控政策,供给侧改革),那么,通过它是不是也可以预测到潜藏在未来的某些客观的,无法改变的事实?也就是说:我们事先运用科学的数据统计与分析,断定事物的发展在某个时间必然会进入某个状态。其实现实生活中,这样聊天攀谈的句式比比皆是。

    抛出个大胆的论定:通过复杂的数据研究,一个国家将会在未来的哪一年灭亡?

    这似乎成了“大数据”本身的一个悖论,因为人们研究大数据的初衷就是用来指导实践,改善现实中的弊端,进化社会的。但现实告诉我们,糟糕的事情每天都在不可避免的发生。不管是一个什么样的国家,它总会有它过去的历史,有现在的各种客观存在,和冗杂的意识形态,有将来的规划和方向。但这“规划和方向”有时并不以人的意志为转移。

    从理论上,这就意味着:我抛出的大胆定论是一种潜藏的客观存在。

    做个大胆的假设:公元前206年,秦国灭亡是个必然的事实。

    这个假设本身又很吊诡,因为它早已经成为事实。用既定的事实来倒退导向它的原因是我们中学历史课本常见的解题方法,而那个正确的答案就是通过科学的分析“大数据”得来的。也就是说,我们凭什么认为秦朝是因为这些原因而灭亡的,凭的就是这些科学的“大数据”。

    历史课本中关于“秦朝灭亡的根本原因是什么?”这个问题的答案是:秦的暴政。(准确来讲应该是封建统治者对生产资料的大量占有及对劳动人民的残酷剥削。)

    当然,秦朝灭亡的原因有很多,所以,我们首先归纳它灭亡的根本原因,明确了根本原因,再开始围绕着它做数据统计。问题的答案是“秦的暴政”,那么,我们就要研究秦朝实行的是什么“政策制度”。

    秦制:

    1、秦统一文字,对于中央集权的统一、文化的传播和发展,都起到了重要作用;

    2、统一全国货币,又规定了统一的度、量、衡制度。促进了商品流通,促进发展;

    3、征发大批人力修缮长城,使人民苦于劳逸。

    4、下令史官烧掉记载秦国以外各国历史的史书,有敢私下讨论的人处死刑;

    ……

    历史影响:使人民之间的沟通、交流变得更加容易。但是以高压政治和残酷的刑法为主实行集权制度,又把人们的生活推向了水深火热之中。暴政剥削导致暴动反抗。

    这里所罗列的“秦制”是一个广义的定义,它的意思是“客观的存在于秦朝时期方方面面的制度”。如果秦施行的政策是“ABCD”,那“A”涉及到方方面面又是“1234”,而“1”又会更具体的反映出每个人在日常生活中的情绪和态度,甚至是影响到自然界的反应。至此,每个人的态度和情绪或自然反应就开始反作用于“1”,“1”开始导向“A”,“A”就直接影响到“制度本身”,合而为一,整个社会的一切都开始由量变走向质变。其实整个过程是一个无限“深和广”的程式,并非如我所列举的这么简单。

    好的量变导向好的质变,坏的量变导向坏的质变,然后好的质变和坏的质变开始进行综合较量(这个过程也是我们日常生活中最能直接感受到的变化,我们不习惯考虑深层的原因,只习惯在事物发展到最明显的阶段后做反应)。

    结果是:好的质变,败给了坏的质变,最终导致应有的客观的质变——秦朝的灭亡。

    倒退一下支撑“秦朝灭亡”这一结果的论据:

    通过对“ABCD”及“1234”等一些列客观存在的“大数据”的分析,我们认识了“秦朝灭亡”这件事情。那么,构成这组“大数据”的“小数据”是什么?只有掌握了方方面面的“小数据”,我们才能拿现实生活中的具体事件作参考。

    比如:在秦朝的某年某月某日,咸阳城内或任何一个地方,发生了一件可以影响“数据”走向的变量,可以是暴动事件,甚至是两个人之间的小摩擦,那么这件事情就是导向“秦朝灭亡”这一结果的一条数据。又或者秦朝皇帝是通过暴力还是禅让,或者其他的什么样方式登上帝位的?不同的登基方式会导向什么样的结果?这样,皇帝登基时的年龄,有利条件和无利条件是什么?在上朝过程中更多的商议了那方面的事情?等等,这些都是一条条可计算的数据。

    首先请原谅,接下来的小标题会让你本能的产生一种,被骗入观看植入广告的厌恶感。但是没有广告。

    如果有一款这样的APP,它能不能运算出一个国家将在何时灭亡?

    通过汇总世界各国不同历史时期的不同王朝的兴衰存亡的数据,更加清晰的未来预测将会呈现在我们面前。虽然这个数据要足够庞大,运算方式也足够复杂,但它们是数据,数据的命运在这样的一个“大数据结合便捷互联网统计和运算平台的时代”确实就是客观存在的,也是可以被逐渐认知的,更不可否认它是能足够支撑一个“结果发生”的。

    所以,这样智能化的工具被生产出来,就很荒诞。当政者在实行一条政策或者针对某件事作出某个反应动作后,这款智能化工具调出大数据库的数据,直接生成另一组导向结果的数据,点击“提交”,然后显示:某年某月某日,因何事,而灭亡。不知道这款工具能不能成为一鼎可以敲响的警钟。

    另外,文首提出的小请求,有好的替代,还请费心,它的反义词是“天方夜谭” 。

  • ?

    大数据语言,Java的逻辑与比较运算概述

    卡塔赫纳

    展开

    逻辑运算:与(并且)&&或(或者)||非(否则)!

    &&||被称作短路运算符,还有个“&”和“|”被称作非短路运算符(使用比较少,逻辑不合理)。短路运算符和非短路运算符的区别:

    1、短路运算符【条件1&&条件2】,如果条件1不成立,则条件2不执行。

    2、非短路运算符【条件1&条件2】,两个条件都会执行。

    短路运算举例如下:

    运行结果得:68.

    非短路运算符举例如下:

    运行结果得:69.

    “|”和“||”同理。

    比较运算,比较变量的值,就是逐个“位”比较值:>>=<

    基本类型变量的值就是基本值(字面量),比如i=1引用类型的变量的值是对象地址值。

    而!=表示不等于,案例如下:

    像下面这样的代码语言书写方式就是不当的:

    条件表达式的语法:【条件表达式?表达式1:表达式2】,比如3>2就是一个条件表达式,当“条件表达式”为true时候,表达式1作为整个表达式的值,否则表达式2作为整个表达式的值。

    举例如下:

    常用于分页业务逻辑,案例如下:

  • ?

    我们可以通过大数据计算获得

    Xian

    展开

    对于保值率的计算,我们采用的是“用户卖车价÷厂商指导价”的计算方式,来真实的反映一款车的价值。对于大部分车型的保值率,我们可以通过大数据计算获得,而部分车型上市时间较短,多年保值率则由模型推导计算得出。在排名方式上,从交易的数据来看,三年车型的二手车在市场中的比例最多,所以我们采用三年保值率为参考依据进行排序。

     数据显示,雅阁的主要分布地区是在东南沿海及渤海湾地区,其中,广东、浙江、江苏三地的成交量已经占到了全国交易总数的三分之一。除此之外,河南、辽宁、上海等地也有着不错的销量成绩。在城市分布数据中,上海、宁波、温州的城市交易量占到了全国各地交易分布的前三名。

    通过上图所示的大数据来看,本田飞度2014款1.5L LXCVT舒适性、丰田威驰2014款1.3L手动型尚版、铃木雨燕2012款1.3L手动超值版在这三款车系中属于热门车型,二手车的交易量较为活跃。我们以厂商指导价为8.18万元的本田飞度2014款1.5L LXCVT舒适性为例,该车2014年8月上牌,据今已经有2年7个月车龄了,在2017年3月份以5.92万元转手卖出,根据我们的数学模型计算,其第三年保值率为70.4%,当前保值率为72.4%。同时,上述所得出的保值率与模型计算的保值率结果差距极小。

  • ?

    这五种大数据计算框架,你一定要知道!

    庾亦瑶

    展开

    随着这些年全世界数据的几何式增长,数据的存储和运算都将成为世界级的难题。之前小鸟给大家介绍过一些分布式文件系统,解决的是大数据存储的问题,今天小鸟给大家介绍一些分布式计算框架:

    Hadoop框架

    提起大数据,第一个想起的肯定是Hadoop,因为Hadoop是目前世界上应用最广泛的大数据工具,他凭借极高的容错率和极低的硬件价格,在大数据市场上风生水起。Hadoop还是第一个在开源社区上引发高度关注的批处理框架,他提出的Map和Reduce的计算模式简洁而优雅。迄今为止,Hadoop已经成为了一个广阔的生态圈,实现了大量算法和组件。由于Hadoop的计算任务需要在集群的多个节点上多次读写,因此在速度上会稍显劣势,但是其吞吐量也同样是其他框架所不能匹敌的。

    Storm框架

    与Hadoop的批处理模式不同,Storm采用的是流计算框架,由Twitter开源并且托管在GitHub上。与Hadoop类似的是,Storm也提出了两个计算角色,分别为Spout和Bolt。

    如果说Hadoop是水桶,只能一桶一桶的去井里扛,那么Storm就是水龙头,只要打开就可以源源不断的出水。Storm支持的语言也比较多,Java、Ruby、Python等语言都能很好的支持。由于Storm是流计算框架,因此使用的是内存,延迟上有极大的优势,但是Storm不会持久化数据。

    Samza框架

    Smaza也是一种流计算框架,但他目前只支持JVM语言,灵活度上略显不足,并且Samza必须和Kafka共同使用。但是响应的,其也继承了Kafka的低延时、分区、避免回压等优势。对于已经有Hadoop+Kafka工作环境的团队来说,Samza是一个不错的选择,并且Samza在多个团队使用的时候能体现良好的性能。

    Spark框架

    Spark属于前两种框架形式的集合体,是一种混合式的计算框架。它既有自带的实时流处理工具,也可以和Hadoop集成,代替其中的MapReduce,甚至Spark还可以单独拿出来部署集群,但是还得借助HDFS等分布式存储系统。Spark的强大之处在于其运算速度,与Storm类似,Spark也是基于内存的,并且在内存满负载的时候,硬盘也能运算,运算结果表示,Spark的速度大约为Hadoop的一百倍,并且其成本可能比Hadoop更低。但是Spark目前还没有像Hadoop哪有拥有上万级别的集群,因此现阶段的Spark和Hadoop搭配起来使用更加合适。

    Flink框架

    Flink也是一种混合式的计算框架,但是在设计初始,Fink的侧重点在于处理流式数据,这与Spark的设计初衷恰恰相反,而在市场需求的驱使下,两者都在朝着更多的兼容性发展。Flink目前不是很成熟,更多情况下Flink还是起到一个借鉴的作用。

    以上就是现在比较主流的大数据运算框架的介绍了,欢迎大家收藏转发。关注小鸟,获取更多大数据级相关技术的资讯与教程。

  • ?

    大数据的除法运算

    夏未初

    展开

    直接用C语言的“/”运算符进行除法运算时,“被除数”,“ 除数”,“商”,这三个数据的最大范围是unsigned long 类型,也就是数据最大范围是4个字节,十进制的范围是0至4294967295。一旦超过了这个范围,则运算会出错。因此,当进行大数据除法运算时,我们要额外编程序,实现大数据的算法。其实这种算法并不难,就是我们在小学里学的四则运算算法。

    我们先要弄清楚一个新的概念。不考虑小数点的情况下,数据有两种表现形式。一种是常用的变量形式,另外一种是BCD码数组形式。变量的最大范围有限,而BCD码数组的形式是无限的,正因为这个特点,所以我们可以进行大数据运算。

    这一节要教大家一个知识点:

    第一个:如何编写涉及到大数据除法运算的算法程序函数,同时也复习了指针的用途。

    具体内容,请看源代码讲解。

    (1)硬件平台:

    基于51单片机学习板。

    (2)实现功能:

    波特率是:9600 。

    通过电脑串口调试助手模拟上位机,往单片机发送组合BCD码的被除数和除数,单片机把组合BCD码的运算结果返回到上位机。被除数与除数的最大范围都是从0到9999,如果运算的商超过允许保存的最大位数范围或者除数为0,则返回EE EE EE报错。

    往单片机发送的数据格式:EB 00 55 XX XX 0d 0a YY YY 0d 0a指令,其中EB 00 55是数据头,XX XX是被除数,是1到2个字节的组合BCD码。YY YY是除数,是1到2个字节的组合BCD码。0d 0a是固定的结束标志。

    例如:

    (a)9816 ÷ 8= 1227

    上位机发送数据:eb 00 55 98 16 0d 0a 08 0d 0a

    单片机返回:12 27

    (b)9816 ÷ 0= 出错了,除数不能为0。

    上位机发送数据:eb 00 55 98 16 0d 0a 00 0d 0a

    单片机返回:EE EE EE

    (3)源代码讲解如下:

    #include "REG52.H"

    /* 注释一:

    * 本系统中的除法运算,规定被除数和除数的最大范围是0至9999.

    * 由于STC89C52单片机的RAM只有256个,也就是说系统的变量数最大

    * 不能超过256个,如果超过了这个极限,编译器就会报错。由于51单片机RAM资源有限,

    * 因此规定除数的最大范围不能超过9999,如果这个算法移植到stm32或者PIC等RAM比较大

    * 的单片机上,那么就可以把这个运算位数设置得更加大一点。调整下面 BCD4_MAX的大小,

    * 可以调整运算的数据范围。

    */

    #define BCD4_MAX 3 //调整BCD4_MAX的大小,可以调整运算的数据范围。

    #define BCD8_MAX (BCD4_MAX*2) //本系统中,规定的非组合BCD码能保存的最大字节数,一个字节包含1位有效运算数

    #define const_rc_size 30 //接收串口中断数据的缓冲区数组大小

    #define const_receive_time 5 //如果超过这个时间没有串口数据过来,就认为一串数据已经全部接收完,这个时间根据实际情况来调整大小

    #define uchar unsigned char //方便移植平台

    #define ulong unsigned long //方便移植平台

    //如果在VC的平台模拟此算法,则都定义成int类型,如下:

    //#define uchar int

    //#define ulong int

    void initial_myself(void);

    void initial_peripheral(void);

    void delay_long(unsigned int uiDelaylong);

    void delay_short(unsigned int uiDelayShort);

    void T0_time(void); //定时中断函数

    void usart_receive(void); //串口接收中断函数

    void usart_service(void); //串口服务程序,在main函数里

    void eusart_send(unsigned char ucSendData);

    void BCD4_to_BCD8(const unsigned char *p_ucBCD_bit4,unsigned char ucBCD4_cnt,unsigned char *p_ucBCD_bit8,unsigned char *p_ucBCD8_cnt);

    void BCD8_to_BCD4(const unsigned char *p_ucBCD_bit8,unsigned char ucBCD8_cnt,unsigned char *p_ucBCD_bit4,unsigned char *p_ucBCD4_cnt);

    void ClearAllData(uchar ucARRAY_MAX,uchar *destData);

    uchar GetDataLength(const uchar *destData,uchar ucARRAY_MAX);

    uchar AddData(const uchar *destData,const uchar *sourceData,uchar *resultData); //两个数相加

    uchar CmpData(const uchar *destData,const uchar *sourceData); //比较两个数的大小

    uchar SubData(const uchar *destData,const uchar *sourceData,uchar *resultData);//两个数相减

    void EnlargeData(uchar *destData,uchar enlarge_cnt); //数组向大索引值移位,移一位相当于放大10倍

    uchar MultData(const uchar *destData,const uchar *sourceData,uchar *resultData); //两个数相乘

    uchar DivLessTenData(const uchar *destData,const uchar *sourceData,uchar *resultData,uchar *remData);//局部两个数相除,商不超过10。当商为0时,余数等于被除数

    uchar Div(const uchar *destData,const uchar *sourceData,uchar *resultData);//两个数相除

    sbit beep_dr=P2^7; //蜂鸣器的驱动IO口

    unsigned int uiSendCnt=0; //用来识别串口是否接收完一串数据的计时器

    unsigned char ucSendLock=1; //串口服务程序的自锁变量,每次接收完一串数据只处理一次

    unsigned int uiRcregTotal=0; //代表当前缓冲区已经接收了多少个数据

    unsigned char ucRcregBuf[const_rc_size]; //接收串口中断数据的缓冲区数组

    unsigned int uiRcMoveIndex=0; //用来解析数据协议的中间变量

    unsigned char ucDataBCD4_1[BCD4_MAX]; //接收到的第1个数组合BCD码数组形式 这里是指被乘数

    unsigned char ucDataBCD4_cnt_1=0; //接收到的第1个数组合BCD码数组的有效数据长度

    unsigned char ucDataBCD4_2[BCD4_MAX]; //接收到的第2个数组合BCD码数组形式 这里是指乘数

    unsigned char ucDataBCD4_cnt_2=0; //接收到的第2个数组合BCD码数组的有效数据长度

    unsigned char ucDataBCD4_3[BCD4_MAX]; //接收到的第3个数组合BCD码数组形式 这里是指积

    unsigned char ucDataBCD4_cnt_3=0; //接收到的第3个数组合BCD码数组的有效数据长度

    unsigned char ucDataBCD8_1[BCD8_MAX]; //接收到的第1个数非组合BCD码数组形式 这里是指被乘数

    unsigned char ucDataBCD8_cnt_1=0; //接收到的第1个数非组合BCD码数组的有效数据长度

    unsigned char ucDataBCD8_2[BCD8_MAX]; //接收到的第2个数非组合BCD码数组形式 这里是指乘数

    unsigned char ucDataBCD8_cnt_2=0; //接收到的第2个数非组合BCD码数组的有效数据长度

    unsigned char ucDataBCD8_3[BCD8_MAX]; //接收到的第3个数非组合BCD码数组形式 这里是指积

    unsigned char ucDataBCD8_cnt_3=0; //接收到的第3个数非组合BCD码数组的有效数据长度

    unsigned char ucResultFlag=11; //运算结果标志,10代表计算结果超出范围出错,11代表正常。

    void main()

    {

    initial_myself();

    delay_long(100);

    initial_peripheral();

    while(1)

    {

    usart_service(); //串口服务程序

    }

    }

    /* 注释二:

    * 组合BCD码转成非组合BCD码。

    * 这里的变量ucBCD4_cnt代表组合BCD码的有效字节数.

    * 这里的变量*p_ucBCD8_cnt代表经过转换后,非组合BCD码的有效字节数,记得加地址符号&传址进去

    * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,

    * 同时引进了组合BCD码的有效字节数变量。这样就不限定了数据的长度,

    * 可以让我们根据数据的实际大小灵活运用。

    */

    void BCD4_to_BCD8(const unsigned char *p_ucBCD_bit4,unsigned char ucBCD4_cnt,unsigned char *p_ucBCD_bit8,unsigned char *p_ucBCD8_cnt)

    {

    unsigned char ucTmep;

    unsigned char i;

    for(i=0;i<BCD8_MAX;i++) //先把即将保存转换结果的缓冲区清零

    {

    p_ucBCD_bit8[i]=0;

    }

    *p_ucBCD8_cnt=ucBCD4_cnt*2; //转换成非组合BCD码后的有效数据长度

    for(i=0;i<ucBCD4_cnt;i++)

    {

    ucTmep=p_ucBCD_bit4[ucBCD4_cnt-1-i];

    p_ucBCD_bit8[ucBCD4_cnt*2-i*2-1]=ucTmep>>4;

    p_ucBCD_bit8[ucBCD4_cnt*2-i*2-2]=ucTmep&0x0f;

    }

    }

    /* 注释三:

    * 非组合BCD码转成组合BCD码。

    * 这里的变量ucBCD8_cnt代表非组合BCD码的有效字节数.

    * 这里的变量*p_ucBCD4_cnt代表经过转换后,组合BCD码的有效字节数,记得加地址符号&传址进去

    * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,

    * 同时引进了非组合BCD码的有效字节数变量。这样就不限定了数据的长度,

    * 可以让我们根据数据的实际大小灵活运用。

    */

    void BCD8_to_BCD4(const unsigned char *p_ucBCD_bit8,unsigned char ucBCD8_cnt,unsigned char *p_ucBCD_bit4,unsigned char *p_ucBCD4_cnt)

    {

    unsigned char ucTmep;

    unsigned char i;

    unsigned char ucBCD4_cnt;

    for(i=0;i<BCD4_MAX;i++) //先把即将保存转换结果的缓冲区清零

    {

    p_ucBCD_bit4[i]=0;

    }

    ucBCD4_cnt=(ucBCD8_cnt+1)/2; //非组合BCD码转化成组合BCD码的有效数,这里+1避免非组合数据长度是奇数位

    *p_ucBCD4_cnt=ucBCD4_cnt; //把转换后的结果付给接口指针的数据,可以对外输出结果

    for(i=0;i<ucBCD4_cnt;i++)

    {

    ucTmep=p_ucBCD_bit8[ucBCD4_cnt*2-1-i*2]; //把非组合BCD码第8位分解出来

    p_ucBCD_bit4[ucBCD4_cnt-1-i]=ucTmep<<4;

    p_ucBCD_bit4[ucBCD4_cnt-1-i]=p_ucBCD_bit4[ucBCD4_cnt-1-i]+p_ucBCD_bit8[ucBCD4_cnt*2-2-i*2]; //把非组合BCD码第7位分解出来

    }

    }

    /* 注释四:

    *函数介绍:清零数组的全部数组数据

    *输入参数:ucARRAY_MAX代表数组定义的最大长度

    *输入输出参数:*destData--被清零的数组。

    */

    void ClearAllData(uchar ucARRAY_MAX,uchar *destData)

    {

    uchar i;

    for(i=0;i<ucARRAY_MAX;i++)

    {

    destData[i]=0;

    }

    }

    /* 注释五:

    *函数介绍:获取数组的有效长度

    *输入参数:*destData--被获取的数组。

    *输入参数:ucARRAY_MAX代表数组定义的最大长度

    *返回值 :返回数组的有效长度。比如58786这个数据的有效长度是5

    *电子开发者作者:吴坚鸿

    */

    uchar GetDataLength(const uchar *destData,uchar ucARRAY_MAX)

    {

    uchar i;

    uchar DataLength=ucARRAY_MAX;

    for(i=0;i<ucARRAY_MAX;i++)

    {

    if(0!=destData[ucARRAY_MAX-1-i])

    {

    break;

    }

    else

    {

    DataLength--;

    }

    }

    return DataLength;

    }

    /* 注释六:

    *函数介绍:比较两个数的大小

    *输入参数:

    *(1)*destData--被比较数的数组。

    *(2)*sourceData--比较数的数组。

    *返回值 :9代表小于,10代表相等,11代表大于。

    */

    uchar CmpData(const uchar *destData,const uchar *sourceData)

    {

    uchar cmpResult=10; //开始默认相等

    uchar destCnt=0;

    uchar sourceCnt=0;

    uchar i;

    destCnt=GetDataLength(destData,BCD8_MAX);

    sourceCnt=GetDataLength(sourceData,BCD8_MAX);

    if(destCnt>sourceCnt) //大于

    {

    cmpResult=11;

    }

    else if(destCnt<sourceCnt) //小于

    {

    cmpResult=9;

    }

    else if((destCnt==0)&&(sourceCnt==0)) //如果都是等于0则等于

    {

    cmpResult=10;

    }

    else //否则就要继续判断

    {

    for(i=0;i<destCnt;i++)

    {

    if(destData[destCnt-1-i]>sourceData[destCnt-1-i]) //从最高位开始判断,如果最高位大于则大于

    {

    cmpResult=11;

    break;

    }

    else if(destData[destCnt-1-i]<sourceData[destCnt-1-i]) //从最高位开始判断,如果最高位小于则小于

    {

    cmpResult=9;

    break;

    }

    //否则继续判断下一位

    }

    }

    return cmpResult;

    }

    /* 注释七:

    *函数介绍:两个数相减

    *输入参数:

    *(1)*destData--被减数的数组。

    *(2)*sourceData--减数的数组。

    *(3)*resultData--差的数组。注意,调用本函数前,必须先把这个数组清零

    *返回值 :10代表计算结果是负数或者超出范围出错,11代表正常。

    */

    uchar SubData(const uchar *destData,const uchar *sourceData,uchar *resultData)

    {

    uchar subResult=11; //开始默认正常

    uchar destCnt=0;

    uchar i;

    uchar carryData=0; //进位

    uchar maxCnt=0; //最大位数

    uchar resultTemp=0; //存放临时运算结果的中间变量

    //为什么不在本函数内先把resultData数组清零?因为后面章节中的除法运算中要用到此函数实现连减功能。

    //因此如果纯粹实现减法运算时,在调用本函数之前,必须先在外面把差的数组清零,否则会计算出错。

    if(CmpData(destData,sourceData)==9) //被减数小于减数,报错

    {

    subResult=10;

    return subResult; //返回判断结果,并且退出本程序,不往下执行本程序余下代码

    }

    destCnt=GetDataLength(destData,BCD8_MAX); //获取被减数的有效数据长度

    maxCnt=destCnt;

    for(i=0;i<maxCnt;i++)

    {

    resultTemp=sourceData[i]+carryData; //按位相加

    if(resultTemp>destData[i])

    {

    resultData[i]=destData[i]+10-sourceData[i]-carryData; //借位

    carryData=1;

    }

    else

    {

    resultData[i]=destData[i]-sourceData[i]-carryData; //不用借位

    carryData=0;

    }

    }

    return subResult;

    }

    /* 注释八:

    *函数介绍:两个数相加

    *输入参数:

    *(1)*destData--被加数的数组。

    *(2)*sourceData--加数的数组。

    *(3)*resultData--和的数组。注意,调用本函数前,必须先把这个数组清零

    *返回值 :10代表计算结果超出范围出错,11代表正常。

    */

    uchar AddData(const uchar *destData,const uchar *sourceData,uchar *resultData)

    {

    uchar addResult=1...

大数据运算

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP