访问【WRITE-BUG数字空间】_[内附完整源码和文档]
本文在 Spark 及图计算引擎 GraphX 的基础上,设计并实现一套用于顶点分 析的社交网络分析系统,为使用 Spark 进行大规模社交网络的顶点分析提供具体 接口,包括社交网络的图模型构建、顶点重要度估值、顶点间路径的计算、顶点 分组等接口,并对计算结果进行了一定程度上的可视化展现。主要工作包括两个 方面:第一是构建图和数据可视化的实现;第二是具体的顶点分析接口的实现。
1系统相关技术
1.1通用并行框架 Spark
Spark 是由加州大学伯克利分校 AMP 实验室所开源的类 Hadoop MapReduce 的通用并行框架,Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS, 因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce 的算法。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行,通过名为 Mesos 的第三方集群框架可以支持此行为。
RDD(Resilient Distributed Datasets),弹性分布式数据集,是分布式内存的一个抽象概念,RDD 提供了一种高度受限的共享内存模型,即 RDD 是只读的记录分区的集合,只能通过对其他 RDD 执行确定的转换操作(如 map、join 和 group by)而创建,然而这些限制使得实现容错的开销很低。对开发者而言,RDD 可以看作是 Spark 的一个对象,它本身运行于内存中,如读文件是一个 RDD,对文件计算是一个 RDD,结果集也是一个 RDD ,不同的分片、数据之间的依赖、key-value 类型的 map 数据都可以看做 RDD。
1.2图计算框架 GraphX
Spark GraphX 是一个分布式图处理框架,Spark GraphX 基于 Spark 平台提供对图计算和图挖掘简洁易用的而丰富多彩的接口,极大的方便了大家对分布式图处理的需求。
众所周知,社交网络中人与人之间有很多关系链,例如 Twitter、Facebook、微博和微信等,这些都是大数据产生的地方都需要图计算,现在的图处理基本都是分布式的图处理,而并非单机处理。Spark GraphX 由于底层是基于 Spark 来处理的,所以天然就是一个分布式的图处理系统。
图的分布式或者并行处理其实是把图拆分成很多的子图,然后分别对这些子图进行计算,计算的时候可以分别迭代进行分阶段的计算,即对图进行并行计算。
1.3动态图形组件 GraphStream
GraphStream 是一个 Java 类库,用于管理动态图形。它由一个面向对象的 API 组成,能够以简便、快速的方式在一张图形中添加边缘和节点,并让它们进行演变[15]。
1.4函数式编程语言 Scala
Scala 是一门多范式的编程语言,一种类似 java 的编程语言,设计初衷是实现可伸缩的语言,并集成命令式编程、面向对象编程和函数式编程的各种特性。Scala 有几项关键特性表明了它的面向对象的本质。例如,Scala 中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。另外,类可以被子类化,而且 Scala 还提供了基于 mixin 的组合(mixin-based com position)。
与只支持单继承的语言相比,Scala 具有更广泛意义上的类重用。Scala 允许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差异之处)”, Scala 称之为 mixin 类组合。
Scala 还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Se quence Comprehensions)等等。
Scala 是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法(Po lymorphic Method)。另外值得一提的是,Scala 被特意设计成能够与 Java 和.NE T 互操作。Scala 当前版本还不能在.NET 上运行,但按照计划将来可以在.NET 上运行。
Scala 可以与 Java 互操作。它用 scalac 这个编译器把源文件编译成 Java 的 cl ass 文件(即在 JVM 上运行的字节码)。你可以从 Scala 中调用所有的 Java 类库, 也同样可以从 Java 应用程序中调用 Scala 的代码。用 David Rupp 的话来说,它也可以访问现存的数之不尽的 Java 类库,这让 Java 类库迁移到 Scala 变得更加容易。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net