2017-08-15 18:33:09 qq_33813365 阅读数 4358
  • JAVA报表开发JasperReport+iReport5.6详解

    课程包含从基础的环境搭建,到控件的详细使用和对ireport难点进行重点讲解,一共21个小节。 难点包含: 条件styles Crosstab交叉表格 报表分组和统计 Subreport子报表(参数传递,子报表返回值) chart图表类所有控件 jasperreport导出word,excel,pdf 多数据源报表 JSP中显示jasperreport报表等

    11925 人正在学习 去看看 安燚

大礼包内含书目:

Apache Spark源码剖析.pdf
深入理解Spark:核心思想与源码分析.pdf
Spark快速大数据分析.pdf
Spark高级数据分析.pdf
数据算法--Hadoop-Spark大数据处理技巧
Spark大数据处理:技术、应用与性能优化(全).pdf
Spark技术内幕  深入解析Spark内核架构设计与实现原理.pdf

下载地址:
http://pan.baidu.com/s/1c1GB56K

2018-12-23 15:26:21 yanghenpi 阅读数 245
  • JAVA报表开发JasperReport+iReport5.6详解

    课程包含从基础的环境搭建,到控件的详细使用和对ireport难点进行重点讲解,一共21个小节。 难点包含: 条件styles Crosstab交叉表格 报表分组和统计 Subreport子报表(参数传递,子报表返回值) chart图表类所有控件 jasperreport导出word,excel,pdf 多数据源报表 JSP中显示jasperreport报表等

    11925 人正在学习 去看看 安燚

Apache Flink(下简称Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多人的关注。本文将深入分析Flink的一些关键技术与特性,希望能够帮助读者对Flink有更加深入的了解,对其他大数据系统开发者也能有所裨益。本文假设读者已对MapReduce、Spark及Storm等大数据处理框架有所了解,同时熟悉流处理与批处理的基本概念。

 

Flink简介

 

Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务:

 

 

  1. DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。
  2. DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。
  3. Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。

 

此外,Flink还针对特定的应用领域提供了领域库,例如:

 

  • Flink ML,Flink的机器学习库,提供了机器学习Pipelines API并实现了多种机器学习算法。
  • Gelly,Flink的图计算库,提供了图计算的相关API及多种图计算算法实现。

 

Flink的技术栈如图1所示: 

 

图1 Flink技术栈


 

此外,Flink也可以方便地和Hadoop生态圈中其他项目集成,例如Flink可以读取存储在HDFS或HBase中的静态数据,以Kafka作为流式的数据源,直接重用MapReduce或Storm代码,或是通过YARN申请集群资源等。

 

统一的批处理与流处理系统


在大数据处理领域,批处理任务与流处理任务一般被认为是两种不同的任务,一个大数据项目一般会被设计为只能处理其中一种任务,例如Apache Storm、Apache Smaza只支持流处理任务,而Aapche MapReduce、Apache Tez、Apache Spark只支持批处理任务。Spark Streaming是Apache Spark之上支持流处理任务的子系统,看似一个特例,实则不然——Spark Streaming采用了一种micro-batch的架构,即把输入的数据流切分成细粒度的batch,并为每一个batch数据提交一个批处理的Spark任务,所以Spark Streaming本质上还是基于Spark批处理系统对流式数据进行处理,和Apache Storm、Apache Smaza等完全流式的数据处理方式完全不同。通过其灵活的执行引擎,Flink能够同时支持批处理任务与流处理任务。


 

在执行引擎这一层,流处理系统与批处理系统最大不同在于节点间的数据传输方式。对于一个流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。而对于一个批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点。这两种数据传输模式是两个极端,对应的是流处理系统对低延迟的要求和批处理系统对高吞吐量的要求。Flink的执行引擎采用了一种十分灵活的方式,同时支持了这两种数据传输模型。Flink以固定的缓存块为单位进行网络数据传输,用户可以通过缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0,则Flink的数据传输方式类似上文所提到流处理系统的标准模型,此时系统可以获得最低的处理延迟。如果缓存块的超时值为无限大,则Flink的数据传输方式类似上文所提到批处理系统的标准模型,此时系统可以获得最高的吞吐量。同时缓存块的超时值也可以设置为0到无限大之间的任意值。缓存块的超时阈值越小,则Flink流处理执行引擎的数据处理延迟越低,但吞吐量也会降低,反之亦然。通过调整缓存块的超时阈值,用户可根据需求灵活地权衡系统延迟和吞吐量。

图2 Flink执行引擎数据传输模式


 

在统一的流式执行引擎基础上,Flink同时支持了流计算和批处理,并对性能(延迟、吞吐量等)有所保障。相对于其他原生的流处理与批处理系统,并没有因为统一执行引擎而受到影响从而大幅度减轻了用户安装、部署、监控、维护等成本。

 

Flink流处理的容错机制


 

对于一个分布式系统来说,单个进程或是节点崩溃导致整个Job失败是经常发生的事情,在异常发生时不会丢失用户数据并能自动恢复才是分布式系统必须支持的特性之一。本节主要介绍Flink流处理系统任务级别的容错机制。

 

批处理系统比较容易实现容错机制,由于文件可以重复访问,当某个任务失败后,重启该任务即可。但是到了流处理系统,由于数据源是无限的数据流,从而导致一个流处理任务执行几个月的情况,将所有数据缓存或是持久化,留待以后重复访问基本上是不可行的。Flink基于分布式快照与可部分重发的数据源实现了容错。用户可自定义对整个Job进行快照的时间间隔,当任务失败时,Flink会将整个Job恢复到最近一次快照,并从数据源重发快照之后的数据。Flink的分布式快照实现借鉴了Chandy和Lamport在1985年发表的一篇关于分布式快照的论文,其实现的主要思想如下:

 

按照用户自定义的分布式快照间隔时间,Flink会定时在所有数据源中插入一种特殊的快照标记消息,这些快照标记消息和其他消息一样在DAG中流动,但是不会被用户定义的业务逻辑所处理,每一个快照标记消息都将其所在的数据流分成两部分:本次快照数据和下次快照数据。

图3 Flink包含快照标记消息的消息流

 

快照标记消息沿着DAG流经各个操作符,当操作符处理到快照标记消息时,会对自己的状态进行快照,并存储起来。当一个操作符有多个输入的时候,Flink会将先抵达的快照标记消息及其之后的消息缓存起来,当所有的输入中对应该次快照的快照标记消息全部抵达后,操作符对自己的状态快照并存储,之后处理所有快照标记消息之后的已缓存消息。操作符对自己的状态快照并存储可以是异步与增量的操作,并不需要阻塞消息的处理。分布式快照的流程如图4所示: 

图4 Flink分布式快照流程图

 

当所有的Data Sink(终点操作符)都收到快照标记信息并对自己的状态快照和存储后,整个分布式快照就完成了,同时通知数据源释放该快照标记消息之前的所有消息。若之后发生节点崩溃等异常情况时,只需要恢复之前存储的分布式快照状态,并从数据源重发该快照以后的消息就可以了。

 

Exactly-Once是流处理系统需要支持的一个非常重要的特性,它保证每一条消息只被流处理系统处理一次,许多流处理任务的业务逻辑都依赖于Exactly-Once特性。相对于At-Least-Once或是At-Most-Once, Exactly-Once特性对流处理系统的要求更为严格,实现也更加困难。Flink基于分布式快照实现了Exactly-Once特性。

 

相对于其他流处理系统的容错方案,Flink基于分布式快照的方案在功能和性能方面都具有很多优点,包括:

 

  • 低延迟。由于操作符状态的存储可以异步,所以进行快照的过程基本上不会阻塞消息的处理,因此不会对消息延迟产生负面影响。
  • 高吞吐量。当操作符状态较少时,对吞吐量基本没有影响。当操作符状态较多时,相对于其他的容错机制,分布式快照的时间间隔是用户自定义的,所以用户可以权衡错误恢复时间和吞吐量要求来调整分布式快照的时间间隔。
  • 与业务逻辑的隔离。Flink的分布式快照机制与用户的业务逻辑是完全隔离的,用户的业务逻辑不会依赖或是对分布式快照产生任何影响。
  • 错误恢复代价。分布式快照的时间间隔越短,错误恢复的时间越少,与吞吐量负相关。

 

Flink流处理的时间窗口

 

对于流处理系统来说,流入的消息不存在上限,所以对于聚合或是连接等操作,流处理系统需要对流入的消息进行分段,然后基于每一段数据进行聚合或是连接。消息的分段即称为窗口,流处理系统支持的窗口有很多类型,最常见的就是时间窗口,基于时间间隔对消息进行分段处理。本节主要介绍Flink流处理系统支持的各种时间窗口。

 

对于目前大部分流处理系统来说,时间窗口一般是根据Task所在节点的本地时钟进行切分,这种方式实现起来比较容易,不会产生阻塞。但是可能无法满足某些应用需求,比如:

 

消息本身带有时间戳,用户希望按照消息本身的时间特性进行分段处理。

 

由于不同节点的时钟可能不同,以及消息在流经各个节点的延迟不同,在某个节点属于同一个时间窗口处理的消息,流到下一个节点时可能被切分到不同的时间窗口中,从而产生不符合预期的结果。

 

Flink支持3种类型的时间窗口,分别适用于用户对于时间窗口不同类型的要求:

 

Operator Time。根据Task所在节点的本地时钟来切分的时间窗口。

 

Event Time。消息自带时间戳,根据消息的时间戳进行处理,确保时间戳在同一个时间窗口的所有消息一定会被正确处理。由于消息可能乱序流入Task,所以Task需要缓存当前时间窗口消息处理的状态,直到确认属于该时间窗口的所有消息都被处理,才可以释放,如果乱序的消息延迟很高会影响分布式系统的吞吐量和延迟。

 

Ingress Time。有时消息本身并不带有时间戳信息,但用户依然希望按照消息而不是节点时钟划分时间窗口,例如避免上面提到的第二个问题,此时可以在消息源流入Flink流处理系统时自动生成增量的时间戳赋予消息,之后处理的流程与Event Time相同。Ingress Time可以看成是Event Time的一个特例,由于其在消息源处时间戳一定是有序的,所以在流处理系统中,相对于Event Time,其乱序的消息延迟不会很高,因此对Flink分布式系统的吞吐量和延迟的影响也会更小。


 

Event Time时间窗口的实现

 

Flink借鉴了Google的MillWheel项目,通过WaterMark来支持基于Event Time的时间窗口。

 

当操作符通过基于Event Time的时间窗口来处理数据时,它必须在确定所有属于该时间窗口的消息全部流入此操作符后才能开始数据处理。但是由于消息可能是乱序的,所以操作符无法直接确认何时所有属于该时间窗口的消息全部流入此操作符。WaterMark包含一个时间戳,Flink使用WaterMark标记所有小于该时间戳的消息都已流入,Flink的数据源在确认所有小于某个时间戳的消息都已输出到Flink流处理系统后,会生成一个包含该时间戳的WaterMark,插入到消息流中输出到Flink流处理系统中,Flink操作符按照时间窗口缓存所有流入的消息,当操作符处理到WaterMark时,它对所有小于该WaterMark时间戳的时间窗口数据进行处理并发送到下一个操作符节点,然后也将WaterMark发送到下一个操作符节点。

 

为了保证能够处理所有属于某个时间窗口的消息,操作符必须等到大于这个时间窗口的WaterMark之后才能开始对该时间窗口的消息进行处理,相对于基于Operator Time的时间窗口,Flink需要占用更多内存,且会直接影响消息处理的延迟时间。对此,一个可能的优化措施是,对于聚合类的操作符,可以提前对部分消息进行聚合操作,当有属于该时间窗口的新消息流入时,基于之前的部分聚合结果继续计算,这样的话,只需缓存中间计算结果即可,无需缓存该时间窗口的所有消息。

 

对于基于Event Time时间窗口的操作符来说,流入WaterMark的时间戳与当前节点的时钟一致是最简单理想的状况,但是在实际环境中是不可能的,由于消息的乱序以及前面节点处理效率的不同,总是会有某些消息流入时间大于其本身的时间戳,真实WaterMark时间戳与理想情况下WaterMark时间戳的差别称为Time Skew,如图5所示: 

图5 WaterMark的Time Skew图

 

Time Skew决定了该WaterMark与上一个WaterMark之间的时间窗口所有数据需要缓存的时间,Time Skew时间越长,该时间窗口数据的延迟越长,占用内存的时间也越长,同时会对流处理系统的吞吐量产生负面影响。


 

 

基于时间戳的排序

 

在流处理系统中,由于流入的消息是无限的,所以对消息进行排序基本上被认为是不可行的。但是在Flink流处理系统中,基于WaterMark,Flink实现了基于时间戳的全局排序。排序的实现思路如下:排序操作符缓存所有流入的消息,当其接收到WaterMark时,对时间戳小于该WaterMark的消息进行排序,并发送到下一个节点,在此排序操作符中释放所有时间戳小于该WaterMark的消息,继续缓存流入的消息,等待下一个WaterMark触发下一次排序。

 

由于WaterMark保证了在其之后不会出现时间戳比它小的消息,所以可以保证排序的正确性。需要注意的是,如果排序操作符有多个节点,只能保证每个节点的流出消息是有序的,节点之间的消息不能保证有序,要实现全局有序,则只能有一个排序操作符节点。

 

通过支持基于Event Time的消息处理,Flink扩展了其流处理系统的应用范围,使得更多的流处理任务可以通过Flink来执行。

 

定制的内存管理

 

Flink项目基于Java及Scala等JVM语言,JVM本身作为一个各种类型应用的执行平台,其对Java对象的管理也是基于通用的处理策略,其垃圾回收器通过估算Java对象的生命周期对Java对象进行有效率的管理。

 

针对不同类型的应用,用户可能需要针对该类型应用的特点,配置针对性的JVM参数更有效率的管理Java对象,从而提高性能。这种JVM调优的黑魔法需要用户对应用本身及JVM的各参数有深入了解,极大地提高了分布式计算平台的调优门槛。Flink框架本身了解计算逻辑每个步骤的数据传输,相比于JVM垃圾回收器,其了解更多的Java对象生命周期,从而为更有效率地管理Java对象提供了可能。


 

JVM存在的问题


 

Java对象开销

 

相对于c/c++等更加接近底层的语言,Java对象的存储密度相对偏低,例如[1],“abcd”这样简单的字符串在UTF-8编码中需要4个字节存储,但采用了UTF-16编码存储字符串的Java则需要8个字节,同时Java对象还有header等其他额外信息,一个4字节字符串对象在Java中需要48字节的空间来存储。对于大部分的大数据应用,内存都是稀缺资源,更有效率地内存存储,意味着CPU数据访问吞吐量更高,以及更少磁盘落地的存在。


 

对象存储结构引发的cache miss

 

为了缓解CPU处理速度与内存访问速度的差距[2],现代CPU数据访问一般都会有多级缓存。当从内存加载数据到缓存时,一般是以cache line为单位加载数据,所以当CPU访问的数据如果是在内存中连续存储的话,访问的效率会非常高。如果CPU要访问的数据不在当前缓存所有的cache line中,则需要从内存中加载对应的数据,这被称为一次cache miss。当cache miss非常高的时候,CPU大部分的时间都在等待数据加载,而不是真正的处理数据。Java对象并不是连续的存储在内存上,同时很多的Java数据结构的数据聚集性也不好。


 

大数据的垃圾回收

 

Java的垃圾回收机制一直让Java开发者又爱又恨,一方面它免去了开发者自己回收资源的步骤,提高了开发效率,减少了内存泄漏的可能,另一方面垃圾回收也是Java应用的不定时炸弹,有时秒级甚至是分钟级的垃圾回收极大影响了Java应用的性能和可用性。在时下数据中心,大容量内存得到了广泛的应用,甚至出现了单台机器配置TB内存的情况,同时,大数据分析通常会遍历整个源数据集,对数据进行转换、清洗、处理等步骤。在这个过程中,会产生海量的Java对象,JVM的垃圾回收执行效率对性能有很大影响。通过JVM参数调优提高垃圾回收效率需要用户对应用和分布式计算框架以及JVM的各参数有深入了解,而且有时候这也远远不够。


 

OOM问题

 

OutOfMemoryError是分布式计算框架经常会遇到的问题,当JVM中所有对象大小超过分配给JVM的内存大小时,就会出现OutOfMemoryError错误,JVM崩溃,分布式框架的健壮性和性能都会受到影响。通过JVM管理内存,同时试图解决OOM问题的应用,通常都需要检查Java对象的大小,并在某些存储Java对象特别多的数据结构中设置阈值进行控制。但是JVM并没有提供官方检查Java对象大小的工具,第三方的工具类库可能无法准确通用地确定Java对象大小[6]。侵入式的阈值检查也会为分布式计算框架的实现增加很多额外与业务逻辑无关的代码。

 

Flink的处理策略

 

为了解决以上提到的问题,高性能分布式计算框架通常需要以下技术:

 

  • 定制的序列化工具。显式内存管理的前提步骤就是序列化,将Java对象序列化成二进制数据存储在内存上(on heap或是off-heap)。通用的序列化框架,如Java默认使用java.io.Serializable将Java对象及其成员变量的所有元信息作为其序列化数据的一部分,序列化后的数据包含了所有反序列化所需的信息。这在某些场景中十分必要,但是对于Flink这样的分布式计算框架来说,这些元数据信息可能是冗余数据。定制的序列化框架,如Hadoop的org.apache.hadoop.io.Writable需要用户实现该接口,并自定义类的序列化和反序列化方法。这种方式效率最高,但需要用户额外的工作,不够友好。
  • 显式的内存管理。一般通用的做法是批量申请和释放内存,每个JVM实例有一个统一的内存管理器,所有内存的申请和释放都通过该内存管理器进行。这可以避免常见的内存碎片问题,同时由于数据以二进制的方式存储,可以大大减轻垃圾回收压力。

 

缓存友好的数据结构和算法。对于计算密集的数据结构和算法,直接操作序列化后的二进制数据,而不是将对象反序列化后再进行操作。同时,只将操作相关的数据连续存储,可以最大化的利用L1/L2/L3缓存,减少Cache miss的概率,提升CPU计算的吞吐量。以排序为例,由于排序的主要操作是对Key进行对比,如果将所有排序数据的Key与Value分开并对Key连续存储,那么访问Key时的Cache命中率会大大提高。


 

 

定制的序列化工具

 

分布式计算框架可以使用定制序列化工具的前提是要待处理数据流通常是同一类型,由于数据集对象的类型固定,从而可以只保存一份对象Schema信息,节省大量的存储空间。同时,对于固定大小的类型,也可通过固定的偏移位置存取。在需要访问某个对象成员变量时,通过定制的序列化工具,并不需要反序列化整个Java对象,而是直接通过偏移量,从而只需要反序列化特定的对象成员变量。如果对象的成员变量较多时,能够大大减少Java对象的创建开销,以及内存数据的拷贝大小。Flink数据集都支持任意Java或是Scala类型,通过自动生成定制序列化工具,既保证了API接口对用户友好(不用像Hadoop那样数据类型需要继承实现org.apache.hadoop.io.Writable接口),也达到了和Hadoop类似的序列化效率。

 

Flink对数据集的类型信息进行分析,然后自动生成定制的序列化工具类。Flink支持任意的Java或是Scala类型,通过Java Reflection框架分析基于Java的Flink程序UDF(User Define Function)的返回类型的类型信息,通过Scala Compiler分析基于Scala的Flink程序UDF的返回类型的类型信息。类型信息由TypeInformation类表示,这个类有诸多具体实现类,例如:


 

  • BasicTypeInfo任意Java基本类型(装包或未装包)和String类型。
  • BasicArrayTypeInfo任意Java基本类型数组(装包或未装包)和String数组。
  • WritableTypeInfo任意Hadoop的Writable接口的实现类。
  • TupleTypeInfo任意的Flink tuple类型(支持Tuple1 to Tuple25)。 Flink tuples是固定长度固定类型的Java Tuple实现。
  • CaseClassTypeInfo任意的 Scala CaseClass(包括 Scala tuples)。
  • PojoTypeInfo任意的POJO (Java or Scala),例如Java对象的所有成员变量,要么是public修饰符定义,要么有getter/setter方法。
  • GenericTypeInfo任意无法匹配之前几种类型的类。

 

前6种类型数据集几乎覆盖了绝大部分的Flink程序,针对前6种类型数据集,Flink皆可以自动生成对应的TypeSerializer定制序列化工具,非常有效率地对数据集进行序列化和反序列化。对于第7种类型,Flink使用Kryo进行序列化和反序列化。此外,对于可被用作Key的类型,Flink还同时自动生成TypeComparator,用来辅助直接对序列化后的二进制数据直接进行compare、hash等操作。对于Tuple、CaseClass、Pojo等组合类型,Flink自动生成的TypeSerializer、TypeComparator同样是组合的,并把其成员的序列化/反序列化代理给其成员对应的TypeSerializer、TypeComparator,如图6所示: 

图6 Flink组合类型序列化


 

此外如有需要,用户可通过集成TypeInformation接口定制实现自己的序列化工具。

 

显式的内存管理

 

垃圾回收是JVM内存管理回避不了的问题,JDK8的G1算法改善了JVM垃圾回收的效率和可用范围,但对于大数据处理实际环境还远远不够。这也和现在分布式框架的发展趋势有所冲突,越来越多的分布式计算框架希望尽可能多地将待处理数据集放入内存,而对于JVM垃圾回收来说,内存中Java对象越少、存活时间越短,其效率越高。通过JVM进行内存管理的话,OutOfMemoryError也是一个很难解决的问题。同时,在JVM内存管理中,Java对象有潜在的碎片化存储问题(Java对象所有信息可能在内存中连续存储),也有可能在所有Java对象大小没有超过JVM分配内存时,出现OutOfMemoryError问题。Flink将内存分为3个部分,每个部分都有不同用途:

 

  • Network buffers: 一些以32KB Byte数组为单位的buffer,主要被网络模块用于数据的网络传输。
  • Memory Manager pool大量以32KB Byte数组为单位的内存池,所有的运行时算法(例如Sort/Shuffle/Join)都从这个内存池申请内存,并将序列化后的数据存储其中,结束后释放回内存池。
  • Remaining (Free) Heap主要留给UDF中用户自己创建的Java对象,由JVM管理。


 

Network buffers在Flink中主要基于Netty的网络传输,无需多讲。Remaining Heap用于UDF中用户自己创建的Java对象,在UDF中,用户通常是流式的处理数据,并不需要很多内存,同时Flink也不鼓励用户在UDF中缓存很多数据,因为这会引起前面提到的诸多问题。Memory Manager pool(以后以内存池代指)通常会配置为最大的一块内存,接下来会详细介绍。

 

在Flink中,内存池由多个MemorySegment组成,每个MemorySegment代表一块连续的内存,底层存储是byte[],默认32KB大小。MemorySegment提供了根据偏移量访问数据的各种方法,如get/put int、long、float、double等,MemorySegment之间数据拷贝等方法和java.nio.ByteBuffer类似。对于Flink的数据结构,通常包括多个向内存池申请的MemeorySegment,所有要存入的对象通过TypeSerializer序列化之后,将二进制数据存储在MemorySegment中,在取出时通过TypeSerializer反序列化。数据结构通过MemorySegment提供的set/get方法访问具体的二进制数据。Flink这种看起来比较复杂的内存管理方式带来的好处主要有:

 

  • 二进制的数据存储大大提高了数据存储密度,节省了存储空间。
  • 所有的运行时数据结构和算法只能通过内存池申请内存,保证了其使用的内存大小是固定的,不会因为运行时数据结构和算法而发生OOM。对于大部分的分布式计算框架来说,这部分由于要缓存大量数据最有可能导致OOM。
  • 内存池虽然占据了大部分内存,但其中的MemorySegment容量较大(默认32KB),所以内存池中的Java对象其实很少,而且一直被内存池引用,所有在垃圾回收时很快进入持久代,大大减轻了JVM垃圾回收的压力。
  • Remaining Heap的内存虽然由JVM管理,但是由于其主要用来存储用户处理的流式数据,生命周期非常短,速度很快的Minor GC就会全部回收掉,一般不会触发Full GC。

 

Flink当前的内存管理在最底层是基于byte[],所以数据最终还是on-heap,最近Flink增加了off-heap的内存管理支持。Flink off-heap的内存管理相对于on-heap的优点主要在于:


 

 

  • 启动分配了大内存(例如100G)的JVM很耗费时间,垃圾回收也很慢。如果采用off-heap,剩下的Network buffer和Remaining heap都会很小,垃圾回收也不用考虑MemorySegment中的Java对象了。
  • 更有效率的IO操作。在off-heap下,将MemorySegment写到磁盘或是网络可以支持zeor-copy技术,而on-heap的话则至少需要一次内存拷贝。
  • off-heap可用于错误恢复,比如JVM崩溃,在on-heap时数据也随之丢失,但在off-heap下,off-heap的数据可能还在。此外,off-heap上的数据还可以和其他程序共享。

 

缓存友好的计算

 

磁盘IO和网络IO之前一直被认为是Hadoop系统的瓶颈,但是随着Spark、Flink等新一代分布式计算框架的发展,越来越多的趋势使得CPU/Memory逐渐成为瓶颈,这些趋势包括:

 

  • 更先进的IO硬件逐渐普及。10GB网络和SSD硬盘等已经被越来越多的数据中心使用。
  • 更高效的存储格式。Parquet,ORC等列式存储被越来越多的Hadoop项目支持,其非常高效的压缩性能大大减少了落地存储的数据量。
  • 更高效的执行计划。例如很多SQL系统执行计划优化器的Fliter-Push-Down优化会将过滤条件尽可能的提前,甚至提前到Parquet的数据访问层,使得在很多实际的工作负载中并不需要很多的磁盘IO。

 

由于CPU处理速度和内存访问速度的差距,提升CPU的处理效率的关键在于最大化的利用L1/L2/L3/Memory,减少任何不必要的Cache miss。定制的序列化工具给Flink提供了可能,通过定制的序列化工具,Flink访问的二进制数据本身,因为占用内存较小,存储密度比较大,而且还可以在设计数据结构和算法时尽量连续存储,减少内存碎片化对Cache命中率的影响,甚至更进一步,Flink可以只是将需要操作的部分数据(如排序时的Key)连续存储,而将其他部分的数据存储在其他地方,从而最大可能地提升Cache命中的概率。

 

以Flink中的排序为例,排序通常是分布式计算框架中一个非常重的操作,Flink通过特殊设计的排序算法获得了非常好的性能,其排序算法的实现如下:

 

  • 将待排序的数据经过序列化后存储在两个不同的MemorySegment集中。数据全部的序列化值存放于其中一个MemorySegment集中。数据序列化后的Key和指向第一个MemorySegment集中值的指针存放于第二个MemorySegment集中。
  • 对第二个MemorySegment集中的Key进行排序,如需交换Key位置,只需交换对应的Key+Pointer的位置,第一个MemorySegment集中的数据无需改变。 当比较两个Key大小时,TypeComparator提供了直接基于二进制数据的对比方法,无需反序列化任何数据。
  • 排序完成后,访问数据时,按照第二个MemorySegment集中Key的顺序访问,并通过Pointer值找到数据在第一个MemorySegment集中的位置,通过TypeSerializer反序列化成Java对象返回。 

  • 图7 Flink排序算法

 

这样实现的好处有:

 

  • 通过Key和Full data分离存储的方式尽量将被操作的数据最小化,提高Cache命中的概率,从而提高CPU的吞吐量。
  • 移动数据时,只需移动Key+Pointer,而无须移动数据本身,大大减少了内存拷贝的数据量。
  • TypeComparator直接基于二进制数据进行操作,节省了反序列化的时间。

 

通过定制的内存管理,Flink通过充分利用内存与CPU缓存,大大提高了CPU的执行效率,同时由于大部分内存都由框架自己控制,也很大程度提升了系统的健壮性,减少了OOM出现的可能。

 

总结

 

本文主要介绍了Flink项目的一些关键特性,Flink是一个拥有诸多特色的项目,包括其统一的批处理和流处理执行引擎,通用大数据计算框架与传统数据库系统的技术结合,以及流处理系统的诸多技术创新等,因为篇幅有限,Flink还有一些其他很有意思的特性没有详细介绍,比如DataSet API级别的执行计划优化器,原生的迭代操作符等,感兴趣的读者可以通过Flink官网了解更多Flink的详细内容。

 

 

2012-08-08 16:53:18 broadview2006 阅读数 2082
  • JAVA报表开发JasperReport+iReport5.6详解

    课程包含从基础的环境搭建,到控件的详细使用和对ireport难点进行重点讲解,一共21个小节。 难点包含: 条件styles Crosstab交叉表格 报表分组和统计 Subreport子报表(参数传递,子报表返回值) chart图表类所有控件 jasperreport导出word,excel,pdf 多数据源报表 JSP中显示jasperreport报表等

    11925 人正在学习 去看看 安燚

深入理解OracleExadata

(美)奥斯本(Osborne, K.)等著

黄凯耀,张乐奕,张瑞译

ISBN978-7-121-17489-6

2012年7月出版

定价:99.00元

16开

600页

宣传语

本书将传授你所应知道的一切,让你尽情驾驭这个改变了游戏规则的数据库一体机平台。

内 容 简 介

本书深入地诠释了Exadata的各项特性,如智能扫描、混合列式存储、存储索引、智能闪存、IO资源管理;系统地介绍了如何安装、配置和管理Exadata;完美地阐述了Exadata的等待事件、性能监控和调优方法;详细地剖析了计算节点和存储节点的内部原理;全面地分享了作者们在实际项目中所获得的宝贵经验,如怎样进行大数据的高效移植、Exadata上的一些常见误区、数据库资源管理,等等。本书是实践经验的总结和升华,可读性极强,不仅有对Exadata深入的研究,还有对它们优雅的展现,它将带领读者进入Exadata的殿堂。

原作者中文版序

首先我们要向这本书的中国读者问好。在一年前的Oracle Open World 2011上,我们被问及是否愿意帮助中国的翻译小组将这本书翻译成中文,而今天,我们非常兴奋地看到中文译本即将出版。在这个过程中,我们的意外收获是这次翻译又再次为本书的内容做了一次技术审校,就本书的内容及复杂度而言,在写作过程中出现一些错漏在所难免,而中文翻译小组的出色反馈帮助我们纠正和澄清了这些错误。

至今,这本书的英文版出版已有一年,而离Oracle发布Exadata V2也已超过两年。我们被Exadata在全球走红的速度所震惊(但是并不太惊讶)。写作一本如此崭新技术的书籍的一大挑战就是要面对产品本身的快速变化。幸运的是,它并没有太多令人耳目一新的新增特性,时至今日,本书仍然是学习Exadata的权威资料。书中展示的例子和实验仍然有效,并为读者带来了宝贵的见解。我们希望你能从本书中获益,希望本书可以帮助你了解智能存储的内部工作机理,也可以帮助你理解为什么称其为数据库技术的一个飞跃。

——Kerry,Randy,Tanel

本书序

2008年9月,Oracle CEO Larry Ellison在甲骨文全球用户大会(OOW)上宣布了软件及硬件集成一体化的数据库机——Oracle Exadata Database Machine(以下简称Exadata)。Exadata的推出不但震撼了业界、吸引了全球数据库专家的关注,也引起了Oracle数据库“粉丝”们对其技术的探究和追逐,而且也使得Exadata成为了网络搜索的热点IT词汇。

也正是由于Exadata在技术架构上的自我创新、功能上的丰富增强和性能上的极大优化,使得Exadata在市场推出3年多的时间里,得到了全球用户的广泛认可。目前,Exadata的全球部署已经超过了1000台、用户遍及67个国家的23个行业。Exadata数据库机已成为甲骨文30多年发展史中最成功的新产品。在甲骨文公司的云计算解决方案中,Exadata作为数据库云服务器是OraclePaaS(Platform-as-a-Service,平台即服务)平台的基础构件,成为企业搭建云环境、构建云支撑平台的基石。

随着Exadata 产品和技术的不断更新和广泛使用,无论是Exadata技术爱好者还是我们的广大用户,都非常希望有一本深入介绍Exadata的技术书籍,让读者不仅能从理论概念上更能从实际应用上来更好地理解和把握Exadata的技术机理,循序渐进地探索其内部的技术细节。

而Expert Oracle Exadata(written byKerry Osborne, Randy Johnson and Tanel Põder)一书的问世无疑是“雪中送炭”,本书的三位作者Kerry、Randy和Tanel都是大家熟知的Oracle技术领域内的大师,他们不但有自己的Oracle技术博客,还为全球客户实施和部署Oracle Exadata产品,积累了丰厚的实战经验,对Exadata技术的精髓有切身的体验和理解。本书一经出版便成为Amazon网站上受人关注的书籍。

我相信作为国内读者,更希望看到本书的中文版译著。机缘巧合的是,我们国内的三位译者,也是国内Oracle数据库“粉丝”们熟知的技术专家——甲骨文公司的黄凯耀(Kaya)、阿里巴巴的张瑞(Jacky)、云和恩墨的张乐奕(Kamus)。

三位译者出于对Exadata技术的热爱和把控,以及对读者的尊重,在翻译的过程中,不是简单地对照原文完成语句的翻译,而是在译文中仔细斟酌每一句话的含义,按照中文阅读习惯加以解释,增加了阅读的流畅性、可理解性,避免了生涩的直译。特别值得一提的是,对于一些原文较为晦涩的地方,三位译者根据自己的理解增加了“译者注”,我相信这在目前大多数技术书籍的译文中并不常见。

也正如三位译者在各自的译者序中所写,从2011年8月份开始着手翻译起,三位译者之间及与原著作者之间关于本书翻译的邮件沟通,来来回回将近500封,同时三位译者对原文中的一些错误之处也进行了一并纠正,真可谓为本译作“锦上添花”。

我相信这本汇集了原作者、译者及其他多位大师的技术、经验和点评的专业书籍,一定能让国内有此技术爱好的读者沉浸于书中、感同身受,有所收获。我也相信读完本书,能让你感受到“欲穷千里目,更上一层楼”的境界。

喻思成 

Oracle全球副总裁 

2020-03-02 14:43:14 Hommiee 阅读数 128
  • JAVA报表开发JasperReport+iReport5.6详解

    课程包含从基础的环境搭建,到控件的详细使用和对ireport难点进行重点讲解,一共21个小节。 难点包含: 条件styles Crosstab交叉表格 报表分组和统计 Subreport子报表(参数传递,子报表返回值) chart图表类所有控件 jasperreport导出word,excel,pdf 多数据源报表 JSP中显示jasperreport报表等

    11925 人正在学习 去看看 安燚

和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下:
基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。
处理器体系结构修改为支持64位字和操作的设计。
引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。
扩充关于用GOT和PLT创建与位置无关代码的讨论,描述了更加强大的链接技术(比如库打桩)。
增加了对信号处理程序更细致的描述,包括异步信号安全的函数等。
采用新函数,更新了与协议无关和线程安全的网络编程。

下载地址:https://pan.baidu.com/s/1FH1iTQT3Vp2T43s7kmsyAw 提取码:egxh

2017-08-31 01:12:00 weixin_30512785 阅读数 3
  • JAVA报表开发JasperReport+iReport5.6详解

    课程包含从基础的环境搭建,到控件的详细使用和对ireport难点进行重点讲解,一共21个小节。 难点包含: 条件styles Crosstab交叉表格 报表分组和统计 Subreport子报表(参数传递,子报表返回值) chart图表类所有控件 jasperreport导出word,excel,pdf 多数据源报表 JSP中显示jasperreport报表等

    11925 人正在学习 去看看 安燚
下载地址:网盘下载

 

 

内容简介  · · · · · ·

作者简介  · · · · · ·

黄宜华博士,南京大学计算机科学与技术系教授、PASA大数据实验室学术带头人。中国计算机学会大数据专家委员会委员、副秘书长,江苏省计算机学会大数据专家委员会主任。于1983、1986和1997年获得南京大学计算机专业学士、硕士和博士学位。主要研究方向为大数据并行处理、云计算以及Web信息挖掘等,发表学术研究论文60多篇。2010年在Google公司资助下在本校创建并开设了“MapReduce大数据并行处理技术”课程,成为全国最早开设该课程的院校之一。因在该课程教学和人才培养方面的出色成绩获得2012年Google奖教金。目前正在开展系统化的大数据并行处理技术研究工作,主持国家和省部级科研项目以及与美国Intel公司等业界的合作研究项目多项。

苗凯翔 (Kai X. Miao) 博士,英特尔中国大数据首席技术官,中国计算机学会大数据专家委员会委员。曾担任英特尔中国区系统集成部总监、信息技术研究部门亚洲地区总监、英特尔北美地区解决方案首席架构师。于2009荣获英特尔公司首席工程师职称。在加入英特尔以前,曾在美国Rutgers与DeVry大学任教。获得北方交通大学(北京)通信学士学位、美国辛辛那提大学电机工程硕士和博士学位。发表期刊和会议研究论文多篇,并拥有21项美国专利,在各种会议上发表过上百次主题演讲,曾参与IETF、ITU 和 MIT CFP等工业标准的制定,并于2006 年担任IEEE通信杂志的联合编辑。

目录  · · · · · ·

推荐序一
推荐序二
推荐序三
丛书序言
前  言
第一部分 Hadoop系统
第1章 大数据处理技术简介 2
1.1 并行计算技术简介 2
1.1.1 并行计算的基本概念 2
1.1.2 并行计算技术的分类 6
1.1.3 并行计算的主要技术问题 10
1.2 大数据处理技术简介 13
1.2.1 大数据的发展背景和研究意义 13
1.2.2 大数据的技术特点 16
1.2.3 大数据研究的主要目标、基本原则和基本途径 17
1.2.4 大数据计算模式和系统 18
1.2.5 大数据计算模式的发展趋势 21
1.2.6 大数据的主要技术层面和技术内容 22
1.3 MapReduce并行计算技术简介 25
1.3.1 MapReduce的基本概念和由来 25
1.3.2 MapReduce的基本设计思想 26
1.3.3 MapReduce的主要功能和技术特征 28
1.4 Hadoop系统简介 30
1.4.1 Hadoop的概述与发展历史 30
1.4.2 Hadoop系统分布式存储与并行计算构架 31
1.4.3 Hadoop平台的基本组成与生态系统 33
1.4.4 Hadoop的应用现状和发展趋势 37
第2章 Hadoop系统的安装与操作管理 39
2.1 Hadoop系统安装方法简介 39
2.2 单机和单机伪分布式Hadoop系统安装基本步骤 39
2.2.1 安装和配置JDK 40
2.2.2 创建Hadoop用户 40
2.2.3 下载安装Hadoop 40
2.2.4 配置SSH 41
2.2.5 配置Hadoop环境 42
2.2.6 Hadoop的运行 43
2.2.7 运行测试程序 43
2.2.8 查看集群状态 44
2.3 集群分布式Hadoop系统安装基本步骤 44
2.3.1 安装和配置JDK 44
2.3.2 创建Hadoop用户 45
2.3.3 下载安装Hadoop 45
2.3.4 配置SSH 45
2.3.5 配置Hadoop环境 46
2.3.6 Hadoop的运行 48
2.3.7 运行测试程序 48
2.3.8 查看集群状态 49
2.4 Hadoop MapReduce程序开发过程 49
2.5 集群远程作业提交与执行 53
2.5.1 集群远程作业提交和执行过程 53
2.5.2 查看作业执行结果和集群状态 53
第3章 大数据存储——分布式文件系统HDFS 56
3.1 HDFS的基本特征与构架 56
3.1.1 HDFS的基本特征 57
3.1.2 HDFS的基本框架与工作过程 57
3.2 HDFS可靠性设计 60
3.2.1 HDFS数据块多副本存储设计 60
3.2.2 HDFS可靠性的设计实现 61
3.3 HDFS文件存储组织与读写 63
3.3.1 文件数据的存储组织 63
3.3.2 数据的读写过程 65
3.4 HDFS文件系统操作命令 68
3.4.1 HDFS启动与关闭 68
3.4.2 HDFS文件操作命令格式与注意事项 69
3.4.3 HDFS文件操作命令 69
3.4.4 高级操作命令和工具 77
3.5 HDFS基本编程接口与示例 83
3.5.1 HDFS编程基础知识 83
3.5.2 HDFS基本文件操作API 84
3.5.3 HDFS基本编程实例 87
第4章 Hadoop MapReduce并行编程框架 91
4.1 MapReduce基本编程模型和框架 91
4.1.1 MapReduce并行编程抽象模型 91
4.1.2 MapReduce的完整编程模型和框架 93
4.2 Hadoop MapReduce基本构架与工作过程 96
4.2.1 Hadoop系统构架和MapReduce程序执行过程 96
4.2.2 Hadoop MapReduce执行框架和作业执行流程 98
4.2.3 Hadoop MapReduce作业调度过程和调度方法 102
4.2.4 MapReduce执行框架的组件和执行流程 106
4.3 Hadoop MapReduce主要组件与编程接口 107
4.3.1 数据输入格式InputFormat 107
4.3.2 输入数据分块InputSplit 109
4.3.3 数据记录读入RecordReader 110
4.3.4 Mapper类 112
4.3.5 Combiner 114
4.3.6 Partitioner 115
4.3.7 Sort 116
4.3.8 Reducer类 119
4.3.9 数据输出格式OutputFormat 120
4.3.10 数据记录输出RecordWriter 122
第5章 分布式数据库HBase 123
5.1 HBase简介 123
5.1.1 为什么需要NoSQL数据库 123
5.1.2 HBase的作用和功能特点 125
5.2 HBase的数据模型 126
5.2.1 HBase的基本数据模型 126
5.2.2 HBase的查询模式 128
5.2.3 HBase表设计 129
5.3 HBase的基本构架与数据存储管理方法 132
5.3.1 HBase在Hadoop生态中的位置和关系 132
5.3.2 HBase的基本组成结构 133
5.3.3 HBase Region 133
5.3.4 Region Server 135
5.3.5 HBase的总体组成结构 138
5.3.6 HBase的寻址和定位 139
5.3.7 HBase节点的上下线管理 142
5.4 HBase安装与操作 145
5.4.1 安装一个单机版的HBase 145
5.4.2 HBase Shell操作命令 146
5.4.3 基于集群的HBase安装和配置 149
5.5 HBase的编程接口和编程示例 152
5.5.1 表创建编程接口与示例 152
5.5.2 表数据更新编程接口与示例 153
5.5.3 数据读取编程接口与示例 155
5.5.4 HBase MapReduce支持和编程示例 157
5.6 HBase的读写操作和特性 161
5.6.1 HBase的数据写入 161
5.6.2 HBase的数据读取 171
5.7 其他HBase功能 173
5.7.1 Coprocessor 173
5.7.2 批量数据导入Bulk Load 176
第6章 分布式数据仓库Hive 179
6.1 Hive的作用与结构组成 179
6.2 Hive的数据模型 181
6.2.1 Hive的数据存储模型 181
6.2.2 Hive的元数据存储管理 182
6.2.3 Hive的数据类型 183
6.3 Hive的安装 184
6.3.1 下载Hive安装包 184
6.3.2 配置环境变量 184
6.3.3 创建Hive数据文件目录 185
6.3.4 修改Hive配置文件 185
6.4 Hive查询语言——HiveQL 188
6.4.1 DDL语句 188
6.4.2 DML语句 189
6.4.3 SELECT查询语句 190
6.4.4 数据表操作语句示例 190
6.4.5 分区的使用 192
6.4.6 桶的使用 193
6.4.7 子查询 194
6.4.8 Hive的优化和高级功能 194
6.5 Hive JDBC编程接口与程序设计 196
第7章 Intel Hadoop系统优化与功能增强 200
7.1 Intel Hadoop系统简介 200
7.1.1 Intel Hadoop系统的主要优化和增强功能 200
7.1.2 Intel Hadoop的系统构成与组件 201
7.2 Intel Hadoop系统的安装和管理 202
7.3 Intel Hadoop HDFS的优化和功能扩展 202
7.3.1 HDFS的高可用性 203
7.3.2 Intel Hadoop系统高可用性配置服务 204
7.3.3 Intel Hadoop系统高可用性配置服务操作 206
7.3.4 自适应数据块副本调整策略 208
7.4 Intel Hadoop HBase的功能扩展和编程示例 211
7.4.1 HBase大对象存储(LOB) 211
7.4.2 加盐表 212
7.4.3 HBase跨数据中心大表 213
7.5 Intel Hadoop Hive的功能扩展和编程示例 216
7.5.1 开源Hive的不足 216
7.5.2 Intel Hadoop“Hive over HBase”优化设计 216
7.5.3 Hive over HBase的架构 216
第二部分 MapReduce的编程和算法设计
第8章 MapReduce基础算法程序设计 220
8.1 WordCount 220
8.1.1 WordCount算法编程实现 220
8.2 矩阵乘法 223
8.2.1 矩阵乘法原理和实现思路 223
8.2.2 矩阵乘法的MapReduce程序实现 224
8.3 关系代数运算 227
8.3.1 选择操作 227
8.3.2 投影操作 228
8.3.3 交运算 229
8.3.4 差运算 230
8.3.5 自然连接 231
8.4 单词共现算法 233
8.4.1 单词共现算法的基本设计 233
8.4.2 单词共现算法的实现 234
8.4.3 单词共现算法实现中的细节问题 235
8.5 文档倒排索引 237
8.5.1 简单的文档倒排索引 237
8.5.2 带词频等属性的文档倒排索引 239
8.6 PageRank网页排名算法 242
8.6.1 PageRank的简化模型 243
8.6.2 PageRank的随机浏览模型 244
8.6.3 PageRank的MapReduce实现 245
8.7 专利文献分析算法 249
8.7.1 构建专利被引用列表 250
8.7.2 专利被引用次数统计 251
8.7.3 专利被引用次数直方图统计 252
8.7.4 按照年份或国家统计专利数 254
第9章 MapReduce高级程序设计技术 256
9.1 简介 256
9.2 复合键值对的使用 257
9.2.1 把小的键值对合并成大的键值对 257
9.2.2 巧用复合键让系统完成排序 259
9.3 用户定制数据类型 262
9.3.1 Hadoop内置的数据类型 263
9.3.2 用户自定义数据类型的实现 263
9.4 用户定制数据输入输出格式 264
9.4.1 Hadoop内置的数据输入格式与RecordReader 265
9.4.2 用户定制数据输入格式与RecordReader 265
9.4.3 Hadoop内置的数据输出格式与RecordWriter 269
9.4.4 用户定制数据输出格式与RecordWriter 269
9.4.5 通过定制数据输出格式实现多集合文件输出 270
9.5 用户定制Partitioner和Combiner 271
9.5.1 用户定制Partitioner 272
9.5.2 用户定制Combiner 273
9.6 组合式MapReduce计算作业 274
9.6.1 迭代MapReduce计算任务 274
9.6.2 顺序组合式MapReduce作业的执行 275
9.6.3 具有复杂依赖关系的组合式MapReduce作业的执行 275
9.6.4 MapReduce前处理和后处理步骤的链式执行 276
9.7 多数据源的连接 278
9.7.1 基本问题数据示例 279
9.7.2 用DataJoin类实现Reduce端连接 279
9.7.3 用全局文件复制方法实现Map端连接 285
9.7.4 带Map端过滤的Reduce端连接 287
9.7.5 多数据源连接解决方法的限制 288
9.8 全局参数/数据文件的传递与使用 288
9.8.1 全局作业参数的传递 288
9.8.2 查询全局的MapReduce作业属性 290
9.8.3 全局数据文件的传递 291
9.9 关系数据库的连接与访问 292
9.9.1 从数据库中输入数据 292
9.9.2 向数据库中输出计算结果 292
第10章 MapReduce数据挖掘基础算法 295
10.1 K-Means聚类算法 295
10.1.1 K-Means聚类算法简介 295
10.1.2 基于MapReduce的K-Means算法的设计实现 297
10.2 KNN最近邻分类算法 300
10.2.1 KNN最近邻分类算法简介 300
10.2.2 基于MapReduce的KNN算法的设计实现 301
10.3 朴素贝叶斯分类算法 303
10.3.1 朴素贝叶斯分类算法简介 303
10.3.2 朴素贝叶斯分类并行化算法的设计 304
10.3.3 朴素贝叶斯分类并行化算法的实现 306
10.4 决策树分类算法 310
10.4.1 决策树分类算法简介 310
10.4.2 决策树并行化算法的设计 313
10.4.3 决策树并行化算法的实现 317
10.5 频繁项集挖掘算法 327
10.5.1 频繁项集挖掘问题描述 327
10.5.2  Apriori频繁项集挖掘算法简介 328
10.5.3 Apriori频繁项集挖掘并行化算法的设计 329
10.5.4 Apriori频繁项集挖掘并行化算法的实现 331
10.5.5 基于子集求取的频繁项集挖掘算法的设计 335
10.5.6 基于子集求取的频繁项集挖掘并行化算法的实现 336
10.6 隐马尔科夫模型和最大期望算法 340
10.6.1 隐马尔科夫模型的基本描述 340
10.6.2 隐马尔科夫模型问题的解决方法 341
10.6.3 最大期望算法概述 345
10.6.4 并行化隐马尔科夫算法设计 345
10.6.5 隐马尔科夫算法的并行化实现 348
第11章 大数据处理算法设计与应用编程案例 352
11.1 基于MapReduce的搜索引擎算法 352
11.1.1 搜索引擎工作原理简介 353
11.1.2 基于MapReduce的文档预处理 354
11.1.3 基于MapReduce的文档倒排索引构建 356
11.1.4 建立Web信息查询服务 363
11.2 基于MapReduce的大规模短文本多分类算法 365
11.2.1 短文本多分类算法工作原理简介 365
11.2.2 并行化分类训练算法设计实现 366
11.2.3 并行化分类预测算法设计实现 369
11.3 基于MapReduce的大规模基因序列比对算法 371
11.3.1 基因序列比对算法简介 371
11.3.2 并行化BLAST算法的设计与实现 373
11.4 基于MapReduce的大规模城市路径规划算法 379
11.4.1 问题背景和要求 379
11.4.2 数据输入 380
11.4.3 程序设计要求 384
11.4.4 算法设计总体框架和处理过程 385
11.4.5 并行化算法的设计与实现 386
11.5 基于MapReduce的大规模重复文档检测算法 396
11.5.1 重复文档检测问题描述 396
11.5.2 重复文档检测方法和算法设计 397
11.5.3 重复文档检测并行化算法设计实现 401
11.6 基于内容的并行化图像检索算法与引擎 404
11.6.1 基于内容的图像检索问题概述 404
11.6.2 图像检索方法和算法设计思路 405
11.6.3 并行化图像检索算法实现 407
11.7 基于MapReduce的大规模微博传播分析 412
11.7.1 微博分析问题背景与并行化处理过程 413
11.7.2 并行化微博数据获取算法的设计实现 414
11.7.3 并行化微博数据分析算法的设计实现 416
11.8 基于关联规则挖掘的图书推荐算法 422
11.8.1 图书推荐和关联规则挖掘简介 422
11.8.2 图书频繁项集挖掘算法设计与数据获取 423
11.8.3 图书关联规则挖掘并行化算法实现 425
11.9 基于Hadoop的城市智能交通综合应用案例 432
11.9.1 应用案例概述 432
11.9.2 案例一:交通事件检测 433
11.9.3 案例二:交通流统计分析功能 435
11.9.4 案例三:道路旅行时间分析 435
11.9.5 案例四:HBase实时查询 436
11.9.6 案例五:HBase Endpoint快速统计 437
11.9.7 案例六:利用Hive高速统计 439
附  录
附录A OpenMP并行程序设计简介 442
附录B MPI并行程序设计简介 448
附录C 英特尔Apache Hadoop*系统安装手册 457
参考文献 486

 

 

 

下载地址:网盘下载

 

转载于:https://www.cnblogs.com/long12365/p/9731443.html

深入理解XGBoost

阅读数 87

没有更多推荐了,返回首页