无锡苹果售后系统打开访达如何设置进入文稿

一文读懂大数据计算框架与平台
本文首发于公众号 数据派THU(ID:DatapiTHU),作者:王小鉴。由 数据派THU 授权 大数据 转载,如需转载请联系首发公众号授权,谢绝二次转载。
计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等。随着互联网、物联网等技术得到越来越广泛的应用,数据规模不断增加,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模型中,确保消息可靠的难点在于,原始数据被当前的计算节点成功处理后,还不能被丢弃,因为它生成的数据仍然可能在后续的计算节点上处理失败,需要由该消息重新生成。而如果要对消息在各个计算节点的处理情况都作跟踪记录的话,则会消耗大量资源。
Storm的解决思路,是为每条消息分派一个ID作为唯一性标识,并在消息中包含原始输入消息的ID。同时用一个响应中心(Acker)维护每条原始输入消息的状态,状态的初值为该原始输入消息的ID。每个计算节点成功执行后,则把输入和输出消息的ID进行异或,再异或对应的原始输入消息的状态。由于每条消息在生成和处理时分别被异或一次,则成功执行后所有消息均被异或两次,对应的原始输入消息的状态为0。因此当状态为0后可安全清除原始输入消息的内容,而如果超过指定时间间隔后状态仍不为0,则认为处理该消息的某个环节出了问题,需要重新执行。
图9. Storm保证消息可靠性过程示意图
Storm还实现了更高层次的抽象框架Trident。Trident以微批处理的方式处理数据流,比如每次处理100条记录。Trident提供了过滤、分组、连接、窗口操作、聚合、状态管理等操作,支持跨批次进行聚合处理,并对执行过程进行优化,包括多个操作的合并、数据传输前的本地聚合等。以微批处理方式处理数据流的框架还有Spark Streaming。
(1) 实时流处理
(2) 微批处理
图10. 实时流处理与微批处理比较
下面是Storm、Trident与另外几种流计算框架的对比:
4. 交互式分析框架
在解决了大数据的可靠存储和高效计算后,如何为数据分析人员提供便利日益受到关注,而最便利的分析方式莫过于交互式查询。这几年交互式分析技术发展迅速,目前这一领域知名的平台有十余个,包括Google开发的Dremel和PowerDrill,Facebook开发的Presto, Hadoop服务商Cloudera和HortonWorks分别开发的Impala和Stinger,以及Apache项目Hive、Drill、Tajo、Kylin、MRQL等。
一些批处理和流计算平台如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。
(1) 实现JOIN
(2) 实现GROUP BY
图11. 部分HiveQL操作的实现方式
Hive与传统关系数据库对比如下:
Hive的主要弱点是由于建立在MapReduce的基础上,性能受到限制。很多交互式分析平台基于对Hive的改进和扩展,包括Stinger、Presto、Kylin等。其中Kylin是中国团队提交到Apache上的项目,其与众不同的地方是提供多维分析(OLAP)能力。Kylin对多维分析可能用到的度量进行预计算,供查询时直接访问,由此提供快速查询和高并发能力。Kylin在eBay、百度、京东、网易、美团均有应用。
4.3. SQL引擎Calcite
对于交互式分析,SQL查询引擎的优劣对性能的影响举足轻重。Spark开发了自己的查询引擎Catalyst,而包括Hive、Drill、Kylin、Flink在内的很多交互式分析平台及数据仓库使用Calcite(原名optiq)作为SQL引擎。Calcite是一个Apache孵化项目,其创建者Julian Hyde曾是Oracle数据库SQL引擎的主要开发者。Calcite具有下列几个技术特点:
支持标准SQL语言。
支持OLAP。
支持对流数据的查询。
独立于编程语言和数据源,可以支持不同的前端和后端。
支持关系代数、可定制的逻辑规划规则和基于成本模型优化的查询引擎。
支持物化视图(materialized view)的管理。
由于分布式场景远比传统的数据存储环境更复杂,Calcite和Catalyst都还处于向Oracle、MySQL等经典关系数据库引擎学习的阶段,在性能优化的道路上还有很长的路要走。
5. 其他类型的框架
除了上面介绍的几种类型的框架外,还有一些目前还不太热门但具有重要潜力的框架类型。图计算是DAG之外的另一种迭代式计算模型,它以图论为基础对现实世界建模和计算,擅长表达数据之间的关联性,适用于PageRank计算、社交网络分析、推荐系统及机器学习。这一类框架有Google Pregel、Apache Giraph、Apache Hama、PowerGraph、,其中PowerGraph是这一领域目前最杰出的代表。很多图数据库也内置图计算框架。
另一类是增量计算框架,探讨如何只对部分新增数据进行计算来极大提升计算过程的效率,可应用到数据增量或周期性更新的场合。这一类框架包括Google Percolator、Microsoft Kineograph、阿里Galaxy等。
另外还有像Apache Ignite、Apache Geode(GemFire的开源版本)这样的高性能事务处理框架。
6. 总结与展望
从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 on Spark、TensorFrames等。
在同一平台上支持多种框架也是发展趋势之一,尤其对于那些开发实力较为雄厚的社区。Spark以批处理模型为核心,实现了交互式分析框架Spark SQL、流计算框架Spark Streaming(及正在实现的Structured Streaming)、图计算框架GraphX、机器学习库Spark ML。而Flink在提供低延迟的流计算的同时,批处理、关系计算、图计算、机器学习,一个也没落下,目标直奔大数据通用计算平台。Google的BEAM(意为Batch+strEAM)则试图把Spark、Flink、Apex这样的计算框架纳入自己制定的标准之下,颇有号令江湖之意。
图12. BEAM的统一模型
7. 学习资料
最后介绍一下大数据计算方面的学习资料。入门前的了解、知识面的拓展及知识的零散积累靠长期访问相关的网站、论坛、微信订阅号,问题解答则靠对搜索引擎的熟练驾驭。需要指出的是,网上的内容良萎不齐,很多资料是过时的,以讹传讹也是常有的事,要注意鉴别。
论坛首推知乎、Quora、Stack Overflow,运气好的话开发者亲自给你解答。其他值得关注的网站或论坛包括炼数成金、人大经济论坛、CSDN、博客园、云栖社区、360大数据、推酷、伯乐在线、小象学院等。微信订阅号中,InfoQ是最权威的,其他还有THU数据派、大数据杂谈、CSDN大数据、数据猿、Hadoop技术博文等,各人根据偏好取舍。
若要进行系统的学习,则首先应参考官方网站文档。不少大数据平台的官方文档内容都比较详实,胜过多数教材。另外,官方文档与产品通常同步更新,这个优势是其他资料无法做到的。不过要说可读性,书籍或视频教程要强得多。视频资料可以从上文提到的部分网站论坛下载。
书籍方面,国外O'Reilly、Manning两家出版社在大数据领域出版了不少优秀书籍,特别是Manning的In Action系列和O'Reilly的Definitive Guide系列。前者侧重提高动手能力,后者则知识比较全面。In Action和Definitive Guide系列的书籍很多已翻译为中文,一般分别译为xxx实战、xxx权威指南。另外一家出版社Packt也值得关注。Packt的书比较薄,适合入门。至于中文原创书籍,推荐张俊林的《大数据日知录》,该书是对大数据存储和处理技术的全面梳理,系统性强。其他书籍不逐一点评,若想购买或阅读可参考豆瓣对该书的评分。
图13. 部分推荐书籍
对希望对大数据框架内部机制有深入的理解的读者,建议首先检索相关论文来阅读。
Google的那几篇论文这里就不一一列出了,网上很容易搜到。其他推荐的论文如下:
王小鉴重庆大学计算机硕士,IT老兵,现于重庆一家公司从事技术研发及团队管理。
对海量数据存储、分布式计算、数据分析、机器学习有浓厚兴趣,重点关注性能优化、自然语言处理等技术。
近期精彩活动(直接点击查看):
福利 · 阅读 | 免费申请读大数据新书 第19期
投稿和反馈请发邮件至。转载大数据公众号文章,请向原文作者申请授权,否则产生的任何版权纠纷与大数据无关。
为大家提供与大数据相关的最新技术和资讯。
近期精彩文章(直接点击查看):
6年“大数据”产业的“真实面目”
161222 傅盛:深度学习是一种新的思维方式
161216 CCF:2017年大数据发展趋势报告及解读
161213 一文看懂人工智能:原理,技术和未来
161208 如何七周成为数据分析师
161206 一篇文看懂Hadoop:风雨十年,未来何去何从
7年大数据的十大发展趋势
161129 大数据等最核心的关键技术:32个算法
6十大热门大数据岗位,拿走不谢
7年关于数据科学六大预言
161119 漫画:什么是机器学习?
161114 终年32岁的传奇数学家,生前寂寂无闻,一个世纪后却让硅谷领袖们集体落泪致敬
161112 如何用大数据思维找女朋友?
161108 漫画:什么是大数据
161107 数据可视化的七大秘密
161105 Gartner公布2017年十大战略科技发展趋势
161028 经验贴│怎样进行大数据入门级学习
161025 干货:数据分析师的能力和工具体系
161023 不装逼地说,在Google十年,到底学到啥?
161016 大数据投资人必读:中国大数据发展与投资分析报告
161014 您的位置信息如何被利用?——基于位置信息的应用和地理信息匹配算法
161009 硅谷教父凯文·凯利最新预言:未来20年最重要的2个科技趋势!
161001 十张图看懂未来的大数据世界
更多精彩文章,请在公众号后台点击“历史文章”查看,谢谢。
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。课程名称读取中
支付宝支付
由百度云提供技术支持
&学院APP&&
扫描微信二维码精彩活动、课程更新抢先知
下载客户端,离线视频任您学
第一章:Scala
1.&Scala-day01-01.Scala安装-体验scala语法
2.&Scala-day01-02.Scala操作符重载-apply方法
3.&Scala-day01-03.Scala C风格printf函数-readLine读行数据
4.&Scala-day01-04.Scalawhile循环99表格
5.&Scala-day01-05.for训话守卫条件和yield推导式
6.&Scala-day01-06.函数-带名函数-默认值-过程
7.&Scala-day01-07.数组-变长数组-转换
8.&Scala-day01-08.数组常用操作-sum-max-min-排序-mkdString
9.&Scala-day01-09.多维数组
10.&Scala-day01-10.类型自动转换
11.&Scala-day01-11.map-可变immutable-不可变mutable-迭代
12.&Scala-day01-12.tuple-zip操作
13.&Scala-day01-13.OOP-类-this关键字-var变量-val-get-set-主构造
14.&Scala-day01-14.OOP-对象-伴生对象
15.&Scala-day01-15.OOP-抽象类-方法覆盖
16.&Scala-day01-16.安装idea下的scala插件-创建scala模块-运行程序
17.&Scala-day01-17.scala包的导入-package object
18.&Scala-day02-01.扩展-类型检查-转换-类型树
19.&Scala-day02-02.文件和正则表达式-爬虫实现网页图片下载
20.&Scala-day02-03.爬虫实现原理-正则href解析
21.&Scala-day02-04.trait
22.&Scala-day02-05.操作符-apply-unapply
23.&Scala-day02-06.apply-unapply2
24.&Scala-day02-07.高阶函数-匿名函数
25.&Scala-day02-08.复杂高阶函数演示
26.&Scala-day02-09.高阶函数进化演示
27.&Scala-day02-10.柯里化-控制抽象
28.&Scala-day02-11.集合操作
29.&Scala-day02-12.集合操作2
30.&Scala-day02-13.模式匹配
31.&Scala-day02-14.样例类-密封样例类
32.&Scala-day02-15.偏函数
33.&Scala-day02-16.泛型-界定-型变-逆变
34.&Scala-day02-17.隐式转换-隐式参数值
第二章:Python
1.&Python-01.python简介
2.&Python-02.python的安装
3.&Python-03.helloworld与中文编码问题
4.&Python-04.python基本语法&缩进代码表示法&字符串表现形式&缩进注意事项
5.&Python-05.python键盘输入-多条语句-代码组概念-子句概念
6.&Python-06.python数据类型-int-long-float-complex
7.&Python-07.python数据类型-String-区间操作-正序-反序
8.&Python-08.python数据类型-list-访问-区间-重复
9.&Python-09.python数据类型-tuple-访问-区间-重复
10.&Python-10.python数据类型-dict-构造-访问
11.&Python-11.python数据类型转换函数-元组-list-字典-冻结集合-unicode
12.&Python-12-比较运算符和算术运算符-幂运算-整除运算
13.&Python-13-位运算符-移位运算
14.&Python-14-逻辑运算符-and-or-not
15.&Python-15-成员运算符in-not in-身份运算符-is-is not
16.&Python-16-条件语句-if-elif-else
17.&Python-17-while循环语句-99乘法表
18.&Python-18-for循环语句-99乘法表
19.&Python-19-break控制循环语句
20.&Python-20-tuple-定义-操作-重复操作-连接操作-空元组-内置API
21.&Python-21-string内置函数-索引-查找-长度
22.&Python-22-函数定义-参数类型-变长-默认-命名
23.&Python-23-模块与导入-使用
24.&Python-24-Python的windows安装与IDEA插件安装
25.&Python-25-Python在IDEA下的模块开发
26.&Python-26-Python在IDEA下的进行文件访问以及bug处理开发
27.&Python-27-Python在IDEA下的File访问-read-write-close
28.&Python-28-Python在IDEA下os进行mkdir-rmdir-rename操作
29.&Python-29.文件访问-获得文件大小-文件读行遍历
30.&Python-30.文件访问-二进制文件复制-rb-wb模式指定
31.&Python-31.文件访问-递归访问-输出整个目录树
第三章:Python-高级型篇
1.&python-高级型篇-01.面向对象编程
2.&python-高级型篇-02.mysql模块安装-连接-测试
3.&python-高级型篇-03.python中创建数据库
4.&python-高级型篇-04.python中创建表操作
5.&python-高级型篇-05.python中创建insert into操作
6.&python-高级型篇-06.python中update-delete
7.&python-高级型篇-07.python中select-格式化打印输出
8.&python-高级型篇-08.python中struct模块实现输出串行和反串行
9.&python-高级型篇-09.python中Socket TCP协议服务端编程
10.&python-高级型篇-10.python中Socket TCP协议客户端编程
11.&python-高级型篇-11.python中Socket UDP协议发送方编程
12.&python-高级型篇-12.python中Socket UDP协议接收方编程
13.&python-高级型篇-13.python中多线程编程-低级API实现
14.&python-高级型篇-14.python中多线程编程-高级API实现编程
15.&python-高级型篇-15.python中多线程编程-高级API实现编程-join作用
16.&python-高级型篇-16.python中多线程编程-高级API实现编程-线程安全性问题
17.&python-高级型篇-17.python中多线程编程-高级API实现编程-同步枷锁处理
第四章:Spark
1.&Spark-day01-01.Spark介绍
2.&Spark-day01-02.安装Spark
3.&Spark-day01-03.使用Spark实现word count
4.&Spark-day01-04.Spark编程实现wordcount
5.&Spark-day01-05.Spark java版单词统计
6.&Spark-day01-06.Spark程序包找不到问题-配置idea下的全局库-在模块中指定全局库
7.&Spark-day01-07.部署spark完全分布式集群
8.&Spark-day01-08.spark脚本分析-进程管理
9.&Spark-day02-01.Scala文件的maven编译问题
10.&Spark-day02-02.核心API模块介绍
11.&Spark-day02-03.RDD弹性分布式数据集
12.&Spark-day02-04.RDD并发度-分区-变换
13.&Spark-day02-05.RDD变换-wordcount-count-reduce
14.&Spark-day02-06.RDD变换-groupByKey-join
15.&Spark-day02-07.RDD变换-cogroup
16.&Spark-day02-08.RDD变换-笛卡尔积
17.&Spark-day02-09.RDD变换-pipe
18.&Spark-day02-10.RDD Action-collect-count-countByKey
19.&Spark-day02-11.RDD数据倾斜处理
20.&Spark-day02-12.Spark和hadoop HA整合-数据倾斜使用
21.&Spark-day03-01.spark运行代码解析-1
22.&Spark-day03-02.spark-dag调度器-task调度器-job-taskset
23.&Spark-day03-03.spark-activeJob-taskSchedulerImpl
24.&Spark-day03-04.spark作业提交-事件loop-调度器处理-监听器总线
25.&Spark-day03-05.spark作业提交-后台调度器-RpcEndpoint-消息发送
26.&Spark-day04-01.spark提交流程回顾
27.&Spark-day04-02.spark提交流程图形总结-宽窄依赖1
28.&Spark-day04-03.spark启动模式
29.&Spark-day04-04.spark持久化-shuffle
30.&Spark-day04-05.spark持久化-删除数据-丢失数据的恢复
31.&Spark-day04-06.spark累加器-广播变量
32.&Spark-day04-07.spark分布式计算PI值
33.&Spark-day04-08.Spark SQL模块
34.&Spark-day05-01.SparkSQL操纵json文件-read-write
35.&Spark-day05-02.SparkSQL使用jdbc操纵Mysql数据库
36.&Spark-day05-03.SparkSQL交互hive
37.&Spark-day05-04.SparkSQL交互hive-thriftserver
38.&Spark-day05-05.SparkSQL分布式SQL查询引擎
39.&Spark-day05-06.Spark Streaming流计算
40.&Spark-day05-07.Spark Streaming流计算JavaAPI编程实现-提交作业
41.&Spark-day05-08.Spark Streaming流计算集群上提交演示
42.&Spark-day05-09.Spark Streaming DStream类考察-Receiver
43.&Spark-day05-10.Spark Streaming 和Kafka集成
44.&Spark-day05-11.Spark Streaming RDD-DStream
45.&Spark-day05-12.Spark Streaming updateStateByKey
46.&Spark-day06-01.spark
streaming windows化操作
47.&Spark-day06-02.spark streaming容错处理
48.&Spark-day06-03.spark streaming容错代码测试-checkpoint
第五章:Spark机器学习
1.&Spark机器学习-day01-01.推荐算法
2.&Spark机器学习-day01-02.ALS最小二乘法实现推荐模型
3.&Spark机器学习-day01-03.ALS实现电影推荐
4.&Spark机器学习-day01-04.spark机器学习-介绍-分类-聚类-推荐(协同过滤)
5.&Spark机器学习-day01-05.推荐model应用-商品推荐-用户推荐-topn推荐
6.&Spark机器学习-day01-06.spark分类算法
7.&Spark机器学习-day01-07.spark机器学习-逻辑回归测试
8.&Spark机器学习-day01-08.spark机器学习-逻辑回归测试2
9.&Spark机器学习-day01-09.spark机器学习-分类-spamFilter
第六章:Python爬虫与Hbase Spark结合
1.&python与hbase spark结合-day01-05.python体验
2.&python与hbase spark结合-day01-06.pythonwindows的安装
3.&python与hbase spark结合-day01-07.python基础-语句块
4.&python与hbase spark结合-day01-08.python基本数据类型
5.&python与hbase spark结合-day01-09.python运算符
6.&python与hbase spark结合-day01-10.python循环
7.&python与hbase spark结合-day01-11.python String
8.&python与hbase spark结合-day01-12.python文件访问
9.&python与hbase spark结合-day02-01.mysql集成python3.4
10.&python与hbase spark结合-day02-02.mysql大数据量插入-查询-条件查询
11.&python与hbase spark结合-day02-03.python操纵mysql事务管理
12.&python与spark结合-day02-04.python操纵mysql 存储过程和函数
13.&python与hbase spark结合-day02-05.python操纵多线程-时间函数
14.&python与spark结合-day02-06.python OOP
15.&python与spark结合-day02-07.python多线程
16.&python与spark结合-day02-08.python Socket编程
17.&python与spark结合-day02-09.python Socket UDP编程
18.&python与spark结合-day02-10.python 爬虫实现
19.&python与spark结合-day03-01.python协同hbase实现数据写入
20.&python与spark结合-day03-02.python编写wordcount
21.&python与spark结合-day03-03.python编译hbase.thrift文件-put
22.&python与spark结合-day03-04.python编译错误纠正-测试
23.&python与spark结合-day03-05.python查询hbase scan-delete
24.&python与spark结合-day03-06.python爬虫存储页面在hbase中
25.&python与spark结合-day03-07.python & spark实现数据分析-图表
26.&python与spark结合-day03-08.实现数据分析-直方图-饼图-嵌套子图-条形图
27.&python与spark结合-day04-01.商品价格抓取
28.&day04-02.Spark闭包处理-local-cluster模式下区别
29.&day04-03.SparkApp部署模式-client-cluster区分演示
30.&day04-04.Spark yarn集群运行模式
31.&day04-05.Spark yarn client模式运行
32.&day04-06.Spark yarn cluster模式运行-上传sparkjar到hdfs
33.&day04-07.Spark HA模式配置与测试
34.&day04-08.Spark hive集成
35.&day05-01.sparkSQL集成hive访问hbase库-类库问题
第七章:项目一-团购网站的标签生成(真实企业项目)
1.&团购网站day01-01.团购网站的标签生成应用-描述-数据结构
2.&团购网站day01-02.团购网站的标签生成应用-数据分析过程
3.&团购网站day01-03.团购网站的标签生成应用-java编程抽取json串中的评论
4.&团购网站day01-04.团购网站的标签生成应用-scala编程实现标签生成程序
第八章:项目二-用户画像 (真实企业项目)
1.&用户画像第01天-01.用户画像概念
2.&用户画像第01天-02.性别-年龄进行画像分析
3.&用户画像第01天-03.性别-年龄进行用户画像MR代码分析与数据解析
4.&用户画像第01天-04.性别-年龄进行用户画像第一阶段实现运行
5.&用户画像第01天-05.性别-年龄进行用户画像算法实现
第九章:项目三-电信电话callLog(真实企业项目)
1.&用户画像第01天-06.性别-年龄进行用户画像总结
2.&callLog-day01-01.ssm简介
3.&callLog-day01-02.ssm-mybatis-项目初始化
4.&callLog-day01-03.ssm-mybatis-配置文件和数据库创建-表创建
5.&callLog-day01-04.ssm-mybatis-使用API测试是否连通
6.&callLog-day01-05.ssm-mybatis-创建mapper文件和javabean
7.&callLog-day01-06.ssm-mybatis-实现insert操作
8.&callLog-day01-07.ssm-mybatis-实现update操作
9.&callLog-day01-08.ssm-mybatis-实现selectOne操作
10.&callLog-day01-09.ssm-mybatis-实现selectAll操作
11.&callLog-day01-10.ssm-mybatis-复杂关系-准备数据-表结构
12.&callLog-day01-11.ssm-mybatis-复杂关系-设计java类
13.&callLog-day01-12.ssm-mybatis-复杂关系-orderMapper映射文件
14.&callLog-day01-13.ssm-mybatis-复杂关系-修改配置-插入关联数据
15.&callLog-day01-14.ssm-mybatis-复杂关系-多对一关联查询
16.&callLog-day01-15.ssm-mybatis-复杂关系-多对一映射编写
17.&callLog-day01-16.ssm-mybatis-复杂关系-多对一API编程测试
18.&callLog-day01-17.ssm-mybatis-项目改造-规范化-Dao-Util
19.&callLog-day01-18.ssm-mybatis-项目改造-样板代码-接口回调实现封装
20.&callLog-day01-19.ssm-mybatis-项目改造-接口回调原理图说明
21.&callLog-day02-01.体验Spring
22.&callLog-day02-02.spring注解方式-扫描组件-依赖配置
23.&callLog-day02-03.spring整合mybatis原理图
24.&callLog-day02-04.spring整合mybatis-项目初始化-连接数据源c3p0
25.&callLog-day02-05.spring整合mybatis-sf-dao设计实现
26.&callLog-day02-06.spring整合mybatis-service接口和实现类设计
27.&callLog-day02-07.spring整合mybatis-配置文件-事务通知-aop配置
28.&callLog-day02-08.spring整合mybatis-rose图分析
29.&callLog-day02-09.spring整合mybatis-调错
30.&callLog-day02-10.spring整合mybatis-整合回顾
31.&callLog-day02-11.spring整合mybatis-业务增加-item处理
32.&callLog-day02-12.spring整合mybatis-业务增加-item处理2
33.&callLog-day02-13.spring整合mybatis-事务管理原理介绍-现象展示
34.&callLog-day03-01.web程序简介
35.&callLog-day03-02.搭建tomcat服务器
36.&callLog-day03-03.tomcat目录结构-端口修改-server.xml
37.&callLog-day03-04.在idea下创建web模块-配置tomcat-运行程序
38.&callLog-day03-05.在idea下配置tomcat服务器热部署
39.&callLog-day03-06.在idea添加maven支持-修改热部署-默认浏览器
40.&callLog-day03-07.bs结构程序的工作流程
41.&callLog-day03-08.Spring MVC结构
42.&callLog-day03-09.引入Springmvc依赖-配置servlet
43.&callLog-day03-10.spring注解驱动配置mvc-编写controller
44.&callLog-day03-11.IDEA下的weeb模块运行找不到第三方类库的解决办法
45.&callLog-day03-12.配置视图解析器-增加jsp页面-增加控制器方法
46.&callLog-day03-13.实现注册用户功能
47.&callLog-day03-14.获得表单提交数据-HttpServletRequest
48.&callLog-day03-15.Controller向jsp传递参数-Model
49.&callLog-day03-16.Controller向jsp传递集合数据进行显示
50.&callLog-day03-17.springMVC完成CRUD-forward-redirect
51.&callLog-day03-18.forward-redirect区别
52.&callLog-day04-01.数据范围-session-application-request
53.&callLog-day04-02.数据范围-session登录处理-session数据保存
54.&callLog-day05-01.SSM整合-项目初始化-maven依赖
55.&callLog-day05-02.SSM整合-整合架构-包结构分析
56.&callLog-day05-03.SSM整合-基本类库创建-service-dao-domain
57.&callLog-day05-04.SSM整合-控制器-spring配置文件-分发器配置文件
58.&callLog-day05-05.SSM整合-实现user查看-web.xml配置监听
59.&callLog-day05-06.SSM整合-SpringMVC静态资源访问
60.&callLog-day05-07.SSM整合-引入css表
61.&callLog-day05-08.SSM整合-删除用户
62.&callLog-day05-09.SSM整合-中文乱码问题
63.&callLog-day05-10.SSM整合-分页查询
64.&callLog-day05-11.SSM整合-分页查询2
65.&callLog-day06-01.通话记录系统架构分析
66.&callLog-day06-02.通话记录模拟生成程序
67.&callLog-day06-03.通话记录模拟生成程序生成jar部署到centos运行
68.&callLog-day06-04.部署数据生成程序到centos运行-编写执行脚本-生成测试数据
69.&callLog-day06-05.启动zk集群和kafka集群
70.&callLog-day06-06.创建kafka主题-并查看主体列表
71.&callLog-day06-07.创建flume配置文件-启动收集程序-F持续收集-从头收集
72.&callLog-day06-08.启动数据生成程序,查看数据收集状况
73.&callLog-day06-09.启动hadoop的hdfs集群-进行容灾切换-查看状态
74.&callLog-day06-10.启动hbase集群-双master节点做HA容灾处理-容器切换
75.&callLog-day06-11.创建hbase名字空间和表
76.&callLog-day06-12.编写HbaseDao实现数据的hbase写入-配置文件外部化
77.&callLog-day06-13.编使用maven命令下载工件需要的所有第三方类库到指定目录下
78.&callLog-day06-14.导出消费者jar组织安装目录-编写运行脚本-执行程序
79.&callLog-day06-15.编写centos下的脚本-运行程序-查看消费数据
80.&callLog-day06-16.导入IDEA中其他模块到新项目中-调整配置
81.&callLog-day06-17.web项目集成-hbase数据查询展示
82.&callLog-day07-01.按照时间段查询通话记录
83.&callLog-day07-02.实现CallLogController查询页面和接受参数
84.&callLog-day07-03.编写jsp查询通话记录页面
85.&callLog-day07-04.查询时间段的通话记录分析
86.&callLog-day07-05.计算时间范围
87.&callLog-day07-06.实现范围时段查询
88.&callLog-day07-07.实现范围时段查询2
89.&callLog-day07-08.创建CallLog日志表的协处理器-完成被叫数据的保存
90.&callLog-day07-09.打包CallLog日志表的协处理器并进行部署-测试web程序
91.&callLog-day07-10.重写postGetOp方法,实现被叫查询返回主叫结果
92.&callLog-day07-11.web程序集成协处理器实现被叫查询返回主叫结果
93.&callLog-day07-12.重写postScannerNext方法实现scan时数据的主被处理
94.&callLog-day08-01.启动yarn的集群-HA
95.&callLog-day08-02.启动hive-完成hive到hbase表映射-实现最近通话信息查询
96.&callLog-day08-03.SSM集成hive查询-交互与hiveserver2服务器
97.&callLog-day08-04.SSM集成hive查询-修改pom依赖
98.&callLog-day08-05.SSM集成hive-jdbc访问hiveser2时bug解决
99.&callLog-day08-06.通话记录增加名字信息
100.&callLog-day08-07.通话记录增加名字信息-准备数据
101.&callLog-day08-08.测试SSMWEB部分关联名字信息展示数据
102.&callLog-day08-09.修改物理内存和虚拟内存对MR的限制,否则Hive查询无法执行
103.&callLog-day08-10.使用Fastjson返回json的数据串-ajax访问后台
104.&callLog-day08-11.集成jQuery库实现ajax访问-动态刷新通话记录
105.&callLog-day08-12.集成jQuery实现周期性刷新页面-javascript
106.&callLog-day08-13.全流程数据链演示
107.&callLog-day08-14.真正分布式配置指导
108.&callLog-day09-01.kafka存活时间设置
109.&callLog-day09-02.hive中substr的方法-按照年份统计指定人各月的通话次数
110.&callLog-day09-03.hive查询统计指标-controller实现
111.&callLog-day09-04.hive查询统计指标-jsp页面实现
112.&callLog-day09-05.linux awk命令批量按照java进程名称kill进程
113.&callLog-day09-06.ssh远程命令解决命令找不到-改造xcall.sh文件
114.&callLog-day09-07.编写管理脚本-hive查询统计结果数据
115.&callLog-day09-08.hive中查询所有用户的每个月的通话次数
116.&callLog-day09-09.ajax异步访问服务器中文数据乱码问题
117.&callLog-day09-10.使用echarts脚本库实现数据展现-柱状图
118.&callLog-day09-11.json数据后台查询-字符串处理-echart图表展示
119.&callLog-day09-12.使用ganglia进行集群监控-安装-注意事项-权限问题
120.&callLog-day09-13.yum源安装问题-cdh源使用
121.&callLog-day09-14.使用udp协议实现进程监控
122.&callLog-day09-15.使用udp协议实现接收方-发送方代码实现
123.&callLog-day09-16.使用udp协议实现接收方-发送方代码实现2
124.&callLog-day10-01.sparkSQL idea编程实现spark对hbase数据的统计
125.&callLog-day10-02.sparkSQL同web项目集成
126.&callLog-day10-03.sparkSQL同web项目集成2
第一十章:flink
1.&flink-01.flink介绍
2.&flink-02.flink-无界数据集-有界数据集
3.&flink-03.flink-两种执行模型
4.&flink-04.flink-特点
5.&flink-05.flink-特点2
6.&flink-06.flink-流计算模型-有界数据集处理
7.&flink-07.flink-从下到上的架构层次说明
8.&flink-08.flink-datasource-flink-datasink结构
9.&flink-09.flink-总结
10.&flink-10.flink-体验
11.&flink-11.flink-体验-下载flink
12.&flink-12.flink-体验-解压flink
13.&flink-13.flink-体验-启动flink本地集群脚本-验证启动是否成功
14.&flink-14.flink-体验-启动webui查看flink状态
15.&flink-15.flink-编写java版wordcount程序-启动nc-运行程序
16.&flink-16.flink集群运行模式-从IDEA中导出jar包
17.&flink-17.flink集群运行模式-检查flink集群运行状况-传递jar到centos上
18.&flink-18.flink集群运行模式-启动centos上的nc服务器地址-端口指定9999
19.&flink-19.flink程序运行-执行结果查看-注意事项
现价:139.80原价:699.00
加入购物车
【课程类型】技术教程
【难度级别】高级
【适合人群】所有人
【课程介绍】 本部分内容全面涵盖了Spark生态系统的概述及其编程模型,深入内核的研究,Spark on Yarn,Spark Streaming流式计算原理与实践,Spark SQL,Spark的多语言编程以及SparkR的原理和运行。
Python语言的部分大家在学习后可以完全掌握Python的精髓,并通过这部分的学习给大家打好一个基础。
【课程目标】 本课程让你深入探秘大数据的世界,包括Spark和机器学习,及新一代大数据处理引擎 Apache Flink等。
【课程计划】 Scala
Python-高级型篇
Spark机器学习
Python爬虫与Hbase Spark结合
项目一-团购网站的标签生成(真实企业项目)
项目二-用户画像 (真实企业项目)
项目三-电信电话callLog(真实企业项目)
第一章:Scala
第二章:Python
第三章:Python-高级型篇
第四章:Spark
第五章:Spark机器学习
第六章:Python爬虫与Hbase Spark结合
第七章:项目一-团购网站的标签生成(真实企业项目)
第八章:项目二-用户画像 (真实企业项目)
第九章:项目三-电信电话callLog(真实企业项目)
第一十章:flink
全部评价(0)
82课程119187学员
所属机构:

我要回帖

更多关于 苹果旗舰店 的文章

 

随机推荐