大数据技术原理与应用-第12讲-教材第九章-图计算.ppt
,厦门大学计算机科学系 2016年版,林子雨厦门大学计算机科学系E-mail: ziyulinxmu.edu.cn主页:http:/www.cs.xmu.edu.cn/linziyu,第十二讲 图计算 (2016春季学期),大数据技术原理与应用,http:/dblab.xmu.edu.cn/post/bigdata,课堂内容与教材对应关系说明,厦门大学林子雨编著大数据技术原理与应用2015年8月1日人民邮电出版社出版发行第1版教材共包含13章内容,第一章 大数据概述第二章 大数据处理架构Hadoop第三章 分布式文件系统HDFS第四章 分布式数据库HBase第五章 NoSQL数据库第六章 云数据库第七章 MapReduce第八章 流计算第九章 图计算第十章 数据可视化(自学)第十一章 大数据在互联网领域的应用第十二章 大数据在生物医学领域的应用(自学)第十三章 大数据的其他应用(自学)2016年新增章节(将加入到第2版教材中)第14章基于Hadoop的数据仓库Hive第15章Hadoop架构再探讨第16章Spark,课堂内容与教材对应关系说明,厦门大学计算机科学系 2016年版,林子雨厦门大学计算机科学系E-mail: ziyulinxmu.edu.cn主页:http:/www.cs.xmu.edu.cn/linziyu,第九章 图计算 (2016春季学期),大数据技术原理与应用,http:/dblab.xmu.edu.cn/post/bigdata,中国高校大数据课程公共服务平台,http:/dblab.xmu.edu.cn/post/bigdata-teaching-platform/,百度搜索“厦门大学数据库实验室”访问平台主页,课程教材讲义PPT学习指南,免费提供,备课指南上机习题,授课视频技术资料,全方位、一站式服务,提纲,9.1图计算简介9.2Pregel简介9.3Pregel图计算模型9.4Pregel的C+ API9.5Pregel的体系结构9.6Pregel的应用实例9.7 Hama的安装和使用,本PPT是如下教材的配套讲义:21世纪高等教育计算机规划教材大数据技术原理与应用概念、存储、处理、分析与应用 (2015年8月第1版)厦门大学 林子雨 编著,人民邮电出版社ISBN:978-7-115-39287-9,欢迎访问大数据技术原理与应用教材官方网站:http:/dblab.xmu.edu.cn/post/bigdata欢迎访问“中国高校大数据课程公共服务平台”旗下子栏目“大数据课程学生服务站”,为学生学习大数据课程提供全方位、一站式免费服务:http:/dblab.xmu.edu.cn/post/4331/,9.1图计算简介,9.1.1 图结构数据9.1.2 传统图计算解决方案的不足之处9.1.3 图计算通用软件,许多大数据都是以大规模图或网络的形式呈现许多非图结构的大数据,也常常会被转换为图模型后进行分析图数据结构很好地表达了数据之间的关联性关联性计算是大数据计算的核心通过获得数据的关联性,可以从噪音很多的海量数据中抽取有用的信息,9.1.1 图结构数据,9.1.2传统图计算解决方案的不足之处,很多传统的图计算算法都存在以下几个典型问题:(1)常常表现出比较差的内存访问局部性(2)针对单个顶点的处理工作过少(3)计算过程中伴随着并行度的改变,9.1.2传统图计算解决方案的不足之处,针对大型图(比如社交网络和网络图)的计算问题,可能的解决方案及其不足之处具体如下:(1)为特定的图应用定制相应的分布式实现(2)基于现有的分布式计算平台进行图计算(3)使用单机的图算法库:比如BGL、LEAD、NetworkX、JDSL、Standford GraphBase和FGL等(4)使用已有的并行图计算系统:比如,Parallel BGL和CGM Graph,实现了很多并行图算法,针对大型图的计算,目前通用的图计算软件主要包括两种:第一种主要是基于遍历算法的、实时的图数据库,如Neo4j、OrientDB、DEX和 Infinite Graph第二种则是以图顶点为中心的、基于消息传递批处理的并行引擎,如GoldenOrb、Giraph、Pregel和Hama,这些图处理软件主要是基于BSP模型实现的并行图处理系统,9.1.3 图计算通用软件,9.1.3图计算通用软件,一次BSP(Bulk Synchronous Parallel Computing Model,又称“大同步”模型)计算过程包括一系列全局超步(所谓的超步就是计算中的一次迭代),每个超步主要包括三个组件:局部计算:每个参与的处理器都有自身的计算任务通讯:处理器群相互交换数据栅栏同步(Barrier Synchronization):当一个处理器遇到“路障”(或栅栏),会等到其他所有处理器完成它们的计算步骤,图91 一个超步的垂直结构图,9.2Pregel简介,谷歌公司在2003年到2004年公布了GFS、MapReduce和BigTable谷歌在后Hadoop时代的新“三驾马车”CaffeineDremelPregelPregel是一种基于BSP模型实现的并行图处理系统为了解决大型图的分布式计算问题,Pregel搭建了一套可扩展的、有容错机制的平台,该平台提供了一套非常灵活的API,可以描述各种各样的图计算Pregel作为分布式图计算的计算框架,主要用于图遍历、最短路径、PageRank计算等等,9.3Pregel图计算模型,9.3.1有向图和顶点9.3.2顶点之间的消息传递9.3.3Pregel的计算过程9.3.4实例,9.3.1有向图和顶点,Pregel计算模型以有向图作为输入有向图的每个顶点都有一个String类型的顶点ID每个顶点都有一个可修改的用户自定义值与之关联每条有向边都和其源顶点关联,并记录了其目标顶点ID边上有一个可修改的用户自定义值与之关联,String类型的顶点ID可修改的用户自定义值,边上有一个可修改的用户自定义值,边e1,顶点,9.3.1有向图和顶点,在每个超步S中,图中的所有顶点都会并行执行相同的用户自定义函数每个顶点可以接收前一个超步(S-1)中发送给它的消息,修改其自身及其出射边的状态,并发送消息给其他顶点,甚至是修改整个图的拓扑结构在这种计算模式中,“边”并不是核心对象,在边上面不会运行相应的计算,只有顶点才会执行用户自定义函数进行相应计算,表示顶点,表示发送消息,9.3.2顶点之间的消息传递,图92 纯消息传递模型图,采用消息传递模型主要基于以下两个原因:(1)消息传递具有足够的表达能力,没有必要使用远程读取或共享内存的方式(2)有助于提升系统整体性能,9.3.3Pregel的计算过程,Pregel的计算过程是由一系列被称为“超步”的迭代组成的在每个超步中,每个顶点上面都会并行执行用户自定义的函数,该函数描述了一个顶点V在一个超步S中需要执行的操作该函数可以读取前一个超步(S-1)中其他顶点发送给顶点V的消息,执行相应计算后,修改顶点V及其出射边的状态,然后沿着顶点V的出射边发送消息给其他顶点,而且,一个消息可能经过多条边的传递后被发送到任意已知ID的目标顶点上去这些消息将会在下一个超步(S+1)中被目标顶点接收,然后象上述过程一样开始下一个超步(S+1)的迭代过程,表示顶点,表示发送消息,9.3.3Pregel的计算过程,图93 一个简单的状态机图,在Pregel计算过程中,一个算法什么时候可以结束,是由所有顶点的状态决定的在第0个超步,所有顶点处于活跃状态当一个顶点不需要继续执行进一步的计算时,就会把自己的状态设置为“停机”,进入非活跃状态当一个处于非活跃状态的顶点收到来自其他顶点的消息时,Pregel计算框架必须根据条件判断来决定是否将其显式唤醒进入活跃状态当图中所有的顶点都已经标识其自身达到“非活跃(inactive)”状态,并且没有消息在传送的时候,算法就可以停止运行,9.3.4实例,图94 一个求最大值的Pregel计算过程图,9.4Pregel的C+ API,Pregel已经预先定义好一个基类Vertex类:,在Vetex类中,定义了三个值类型参数,分别表示顶点、边和消息。每一个顶点都有一个给定类型的值与之对应编写Pregel程序时,需要继承Vertex类,并且覆写Vertex类的虚函数Compute(),9.4Pregel的C+ API,9.4.1消息传递机制9.4.2Combiner9.4.3Aggregator9.4.4拓扑改变9.4.5输入和输出,9.4.1消息传递机制,顶点之间的通讯是借助于消息传递机制来实现的,每条消息都包含了消息值和需要到达的目标顶点ID。用户可以通过Vertex类的模板参数来设定消息值的数据类型在一个超步S中,一个顶点可以发送任意数量的消息,这些消息将在下一个超步(S+1)中被其他顶点接收一个顶点V通过与之关联的出射边向外发送消息,并且,消息要到达的目标顶点并不一定是与顶点V相邻的顶点,一个消息可以连续经过多条连通的边到达某个与顶点V不相邻的顶点U,U可以从接收的消息中获取到与其不相邻的顶点V的ID,9.4.2Combiner,Pregel计算框架在消息发出去之前,Combiner可以将发往同一个顶点的多个整型值进行求和得到一个值,只需向外发送这个“求和结果”,从而实现了由多个消息合并成一个消息,大大减少了传输和缓存的开销在默认情况下,Pregel计算框架并不会开启Combiner功能当用户打算开启Combiner功能时,可以继承Combiner类并覆写虚函数Combine()此外,通常只对那些满足交换律和结合律的操作才可以去开启Combiner功能,图9-5 Combiner应用的例子,9.4.3Aggregator,Aggregator提供了一种全局通信、监控和数据查看的机制在一个超步S中,每一个顶点都可以向一个Aggregator提供一个数据,Pregel计算框架会对这些值进行聚合操作产生一个值,在下一个超步(S+1)中,图中的所有顶点都可以看见这个值Aggregator的聚合功能,允许在整型和字符串类型上执行最大值、最小值、求和操作,比如,可以定义一个“Sum”Aggregator来统计每个顶点的出射边数量,最后相加可以得到整个图的边的数量Aggregator还可以实现全局协同的功能,比如,可以设计“and” Aggregator来决定在某个超步中Compute()函数是否执行某些逻辑分支,只有当“and” Aggregator显示所有顶点都满足了某条件时,才去执行这些逻辑分支,9.4.4拓扑改变,Pregel计算框架允许用户在自定义函数Compute()中定义操作,修改图的拓扑结构,比如在图中增加(或删除)边或顶点对于全局拓扑改变,Pregel采用了惰性协调机制对于本地的局部拓扑改变,是不会引发冲突的,顶点或边的本地增减能够立即生效,很大程度上简化了分布式编程,9.4.5输入和输出,在Pregel计算框架中,图的保存格式多种多样,包括文本文件、关系数据库或键值数据库等在Pregel中,“从输入文件生成得到图结构”和“执行图计算”这两个过程是分离的,从而不会限制输入文件的格式对于输出,Pregel也采用了灵活的方式,可以以多种方式进行输出,9.5Pregel的体系结构,9.5.1Pregel的执行过程9.5.2容错性9.5.3Worker9.5.4Master9.5.5 Aggregator,9.5.1Pregel的执行过程,图9-6图的划分图,在Pregel计算框架中,一个大型图会被划分成许多个分区,每个分区都包含了一部分顶点以及以其为起点的边一个顶点应该被分配到哪个分区上,是由一个函数决定的,系统默认函数为hash(ID) mod N,其中,N为所有分区总数,ID是这个顶点的标识符;当然,用户也可以自己定义这个函数这样,无论在哪台机器上,都可以简单根据顶点ID判断出该顶点属于哪个分区,即使该顶点可能已经不存在了,9.5.1Pregel的执行过程,图9-7 Pregel的执行过程图,在理想的情况下(不发生任何错误),一个Pregel用户程序的执行过程如下:(1)选择集群中的多台机器执行图计算任务,有一台机器会被选为Master,其他机器作为Worker,(2)Master把一个图分成多个分区,并把分区分配到多个Worker。一个Worker会领到一个或多个分区,每个Worker知道所有其他Worker所分配到的分区情况,9.5.1Pregel的执行过程,图9-7 Pregel的执行过程图,(3)Master会把用户输入划分成多个部分。然后,Master会为每个Worker分配用户输入的一部分。如果一个Worker从输入内容中加载到的顶点,刚好是自己所分配到的分区中的顶点,就会立即更新相应的数据结构。否则,该Worker会根据加载到的顶点的ID,把它发送到其所属的分区所在的Worker上。当所有的输入都被加载后,图中的所有顶点都会被标记为“活跃”状态。,9.5.1Pregel的执行过程,图9-7 Pregel的执行过程图,(4)Master向每个Worker发送指令,Worker收到指令后,开始运行一个超步。当一个超步中的所有工作都完成以后,Worker会通知Master,并把自己在下一个超步还处于“活跃”状态的顶点的数量报告给Master。上述步骤会被不断重复,直到所有顶点都不再活跃并且系统中不会有任何消息在传输,这时,执行过程才会结束。,(5)计算过程结束后,Master会给所有的Worker发送指令,通知每个Worker对自己的计算结果进行持久化存储,9.5.2容错性,Pregel采用检查点机制来实现容错。在每个超步的开始,Master会通知所有的Worker把自己管辖的分区的状态写入到持久化存储设备Master会周期性地向每个Worker发送ping消息,Worker收到ping消息后会给Master发送反馈消息每个Worker上都保存了一个或多个分区的状态信息,当一个Worker发生故障时,它所负责维护的分区的当前状态信息就会丢失。Master监测到一个Worker发生故障“失效”后,会把失效Worker所分配到的分区,重新分配到其他处于正常工作状态的Worker集合上,然后,所有这些分区会从最近的某超步S开始时写出的检查点中,重新加载状态信息,9.5.3Worker,在一个Worker中,它所管辖的分区的状态信息是保存在内存中的。分区中的顶点的状态信息包括:顶点的当前值以该顶点为起点的出射边列表,每条出射边包含了目标顶点ID和边的值消息队列,包含了所有接收到的、发送给该顶点的消息标志位,用来标记顶点是否处于活跃状态,在每个超步中,Worker会对自己所管辖的分区中的每个顶点进行遍历,并调用顶点上的Compute()函数,在调用时,会把以下三个参数传递进去:该顶点的当前值一个接收到的消息的迭代器一个出射边的迭代器,在Pregel中,为了获得更好的性能,“标志位”和输入消息队列是分开保存的对于每个顶点而言,Pregel只保存一份顶点值和边值,但是,会保存两份“标志位”和输入消息队列,分别用于当前超步和下一个超步如果一个顶点V在超步S接收到消息,那么,它表示V将会在下一个超步S+1中(而不是当前超步S中)处于“活跃”状态,9.5.3Worker,当一个Worker上的一个顶点V需要发送消息到其他顶点U时,该Worker会首先判断目标顶点U是否位于自己机器上如果目标顶点U在自己的机器上,就直接把消息放入到与目标顶点U对应的输入消息队列中如果发现目标顶点U在远程机器上,这个消息就会被暂时缓存到本地,当缓存中的消息数目达到一个事先设定的阈值时,这些缓存消息会被批量异步发送出去,传输到目标顶点所在的Worker上,9.5.3Worker,9.5.4Master,Master主要负责协调各个Worker执行任务,每个Worker会借助于名称服务系统定位到Master的位置,并向Master发送自己的注册信息,Master会为每个Worker分配一个唯一的IDMaster维护着关于当前处于“有效”状态的所有Worker的各种信息,包括每个Worker的ID和地址信息,以及每个Worker被分配到的分区信息Master中保存这些信息的数据结构的大小,只与分区的数量有关,而与顶点和边的数量无关,一个大规模图计算任务会被Master分解到多个Worker去执行,在每个超步开始时,Master都会向所有处于“有效”状态的Worker发送相同的指令,然后等待这些Worker的回应如果在指定时间内收不到某个Worker的反馈,Master就认为这个Worker失效如果参与任务执行的多个Worker中的任意一个发生了故障失效,Master就会进入恢复模式在每个超步中,图计算的各种工作,比如输入、输出、计算、保存和从检查点中恢复,都会在“路障(barrier)”之前结束,9.5.4Master,9.5.4Master,Master在内部运行了一个HTTP服务器来显示图计算过程的各种信息用户可以通过网页随时监控图计算执行过程各个细节图的大小关于出度分布的柱状图处于活跃状态的顶点数量在当前超步的时间信息和消息流量所有用户自定义Aggregator的值,9.5.5Aggregator,每个用户自定义的Aggregator都会采用聚合函数对一个值集合进行聚合计算得到一个全局值每个Worker都保存了一个Aggregator的实例集,其中的每个实例都是由类型名称和实例名称来标识的在执行图计算过程的某个超步S中,每个Worker会利用一个Aggregator对当前本地分区中包含的所有顶点的值进行归约,得到一个本地的局部归约值在超步S结束时,所有Worker会将所有包含局部归约值的Aggregator的值进行最后的汇总,得到全局值,然后提交给Master在下一个超步S+1开始时,Master就会将Aggregator的全局值发送给每个Worker,9.6Pregel的应用实例单源最短路径,Dijkstra算法是解决单源最短路径问题的贪婪算法,Pregel非常适合用来解决单源最短路径问题,实现代码如下:,9.6Pregel的应用实例单源最短路径,表1 超步0开始时的顶点值,每个顶点并行执行Compute()函数,表3 顶点0向其他顶点发送消息,表2 超步0结束时的顶点值,超步0结束时,所有顶点非活跃,9.6Pregel的应用实例单源最短路径,9.6Pregel的应用实例单源最短路径,表5 超步1开始时的顶点值,表6 超步1结束时的顶点值,表4 上一步(超步0)中发出的消息,超步1:顶点0:没有收到消息,依然非活跃顶点1:收到消息100(唯一消息),被显式唤醒,执行计算,mindist变为100,小于顶点值INF,顶点值修改为100,没有出射边,不需要发送消息,最后变为非活跃顶点2:收到消息30,被显式唤醒,执行计算, mindist变为30,小于顶点值INF,顶点值修改为30,有两条出射边,向顶点3发送消息90(即:30+60),向顶点1发送消息90(即:30+60),最后变为非活跃顶点3:没有收到消息,依然非活跃顶点4:收到消息10,被显式唤醒,执行计算, mindist变为10,小于顶点值INF,顶点值修改为10,向顶点3发送消息60(即:10+50),最后变为非活跃,剩余超步省略当所有顶点非活跃,并且没有消息传递,就结束,9.7 Hama的安装和使用,9.7.1 Hama介绍9.7.2 安装Hama的基本过程9.7.3 运行Hama实例PageRank,Hama是Google Pregel的开源实现与Hadoop适合于分布式大数据处理不同,Hama主要用于分布式的矩阵、graph、网络算法的计算Hama是在HDFS上实现的BSP(Bulk Synchronous Parallel)计算框架,弥补Hadoop在计算能力上的不足,9.7.1 Hama介绍,本实例中Hama具体运行环境如下:Ubuntu 14.04 Java JDK 1.7Hadoop 2.6.0,9.7.2 安装Hama的基本过程,Hama (单机)安装步骤如下:(1)安装好合适版本的JDK和Hadoop(2)从官网下载Hama安装文件,比如Hama 0.7.0版本(3)下载文件后,运用下面命令sudo tar -zxf /下载/hama-dist-0.7.0.tar.gz -C /usr/local 解压至 /usr/local/hama ,再运用下面命令 sudo mv ./hama-0.7.0/ ./hama 修改目录名称方便使用(4)进入hama中的conf文件夹,修改hama-env.sh文件,在其中加入java的home路径,即加入:export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64,9.7.2 安装Hama的基本过程,(5)修改 hama-site.xml文件,这是hama配置的核心文件,具体内容如下:,9.7.2 安装Hama的基本过程, bsp.master.address local The address of the bsp master server. Either the literal string "local" or a host:port for distributed mode fs.default.name local ,The name of the default file system. Either the literal string "local" or a host:port for HDFS. ,9.7.2 安装Hama的基本过程, hama.zookeeper.quorum localhost Comma separated list of servers in the ZooKeeper Quorum. For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com". By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HAMA_MANAGES_ZK is set in hama-env.sh this is the list of servers which we will start/stop zookeeper on. ,9.7.3 运行Hama实例PageRank,(1)生成 randomgraph,运行如下命令:./bin/hama jar hama-examples-0.7.0.jar gen fastgen -v 100 -e 10 -o randomgraph -t 2,生成的文件位于 /usr/local/hama 下的 randomgraph。它表示100个节点,1000条边的数据,存储在两个文件中(part-00000,part-00001)。,9.7.3 运行Hama实例PageRank,(2)执行pagerank./bin/hama jar hama-examples-0.7.0.jar pagerank -i randomgraph -o pagerankresult -t 4运行结果保存在pagerankresult文件中,单机模式下,数据读取都是在本地文件系统,不需要读取HDFS中的文件。,本章小结,本章内容介绍了图计算框架Pregel的相关知识。传统的图计算解决方案无法解决大型的图计算问题,包括Pregel在内的各种图计算框架脱颖而出。Pregel并没有采用远程数据读取或者共享内存的方式,而是采用了纯消息传递模型,来实现不同顶点之间的信息交换。Pregel的计算过程是由一系列被称为“超步”的迭代组成的,每次迭代对应了BSP模型中的一个超步。Pregel已经预先定义好一个基类Vertex类,编写Pregel程序时,需要继承Vertex类,并且覆写Vertex类的虚函数Compute()。在Pregel执行计算过程时,在每个超步中都会并行调用每个顶点上定义的Compute()函数。Pregel是为执行大规模图计算而设计的,通常运行在由多台廉价服务器构成的集群上。一个图计算任务会被分解到多台机器上同时执行,Pregel采用检查点机制来实现容错。Pregel作为分布式图计算的计算框架,主要用于图遍历、最短路径、PageRank计算等等。本章最后通过对PageRank算法在MapReduce和Pregel上执行方式的不同进行比较,说明了Pregel解决图计算问题的优势。,附录:主讲教师,单位:厦门大学计算机科学系E-mail: ziyulinxmu.edu.cn个人网页:http:/www.cs.xmu.edu.cn/linziyu数据库实验室网站:http:/dblab.xmu.edu.cn,主讲教师:林子雨,扫一扫访问个人主页,林子雨,男,1978年出生,博士(毕业于北京大学),现为厦门大学计算机科学系助理教授(讲师),曾任厦门大学信息科学与技术学院院长助理、晋江市发展和改革局副局长。中国高校首个“数字教师”提出者和建设者,厦门大学数据库实验室负责人,厦门大学云计算与大数据研究中心主要建设者和骨干成员,2013年度厦门大学奖教金获得者。主要研究方向为数据库、数据仓库、数据挖掘、大数据、云计算和物联网,并以第一作者身份在软件学报计算机学报和计算机研究与发展等国家重点期刊以及国际学术会议上发表多篇学术论文。作为项目负责人主持的科研项目包括1项国家自然科学青年基金项目(No.61303004)、1项福建省自然科学青年基金项目(No.2013J05099)和1项中央高校基本科研业务费项目(No.2011121049),同时,作为课题负责人完成了国家发改委城市信息化重大课题、国家物联网重大应用示范工程区域试点泉州市工作方案、2015泉州市互联网经济调研等课题。编著出版中国高校第一本系统介绍大数据知识的专业教材大数据技术原理与应用并成为畅销书籍,编著并免费网络发布40余万字中国高校第一本闪存数据库研究专著闪存数据库概念与技术;主讲厦门大学计算机系本科生课程数据库系统原理和研究生课程分布式数据库大数据技术基础。具有丰富的政府和企业信息化培训经验,曾先后给中国移动通信集团公司、福州马尾区政府、福建省物联网科学研究院、石狮市物流协会、厦门市物流协会、福建龙岩卷烟厂等多家单位和企业开展信息化培训,累计培训人数达2000人以上。,附录:大数据学习教材推荐,欢迎访问大数据技术原理与应用概念、存储、处理、分析与应用教材官方网站:http:/dblab.xmu.edu.cn/post/bigdata,扫一扫访问教材官网,大数据技术原理与应用概念、存储、处理、分析与应用,由厦门大学计算机科学系林子雨博士编著,是中国高校第一本系统介绍大数据知识的专业教材。全书共有13章,系统地论述了大数据的基本概念、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据 库HBase、NoSQL数据库、云数据库、分布式并行编程模型MapReduce、流计算、图计算、数据可视化以及大数据在互联网、生物医学和物流等各个领域的应用。在Hadoop、HDFS、HBase和MapReduce等重要章节,安排了入门级的实践操作,让读者更好地学习和掌握大数据关键技术。本书可以作为高等院校计算机专业、信息管理等相关专业的大数据课程教材,也可供相关技术人员参考、学习、培训之用。,附录:中国高校大数据课程公共服务平台,扫一扫访问平台主页,http:/dblab.xmu.edu.cn/post/bigdata-teaching-platform/,扫一扫观看3分钟FLASH动画宣传片,Department of Computer Science, Xiamen University, 2016,