阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

《Spark GraphX in Action》书评及作者访谈

  • 2016-10-27
  • 本文字数:5454 字

    阅读完需:约 18 分钟

关键要点

  • 图数据分析与传统数据分析间的差异是什么?
  • 如何使用 Apache Spark GraphX 软件库和 GraphFrames 这样的 API 进行图数据处理。
  • 使用图数据分析的热门用例。
  • 高效 GraphX 程序开发中的性能及优化技术。
  • 在图数据分析领域中即将出现的趋势。

Spark GraphX in Action 》一书已由 Manning 出版社出版,该书作者是 Michael Malak 和 Robin East,书中以教程方式给出了对 Spark GraphX 的全方位覆盖。Spark GraphX 是 Apache Spark 架构中的图处理程序库。

读者可参考这本书去安装和配置 Spark GraphX,进一步地使用 GraphX 去处理图数据。

读者将学会如何使用 GraphFrames API 在 Spark 图中进行 SQL 查询,以及在图数据上应用机器学习算法。

书中第五章涉及 PageRank 三角形计数、最短路径、连通分量等内置算法。本书作者还探讨了加权最短路径、路由算法(使用做小生成树)等其它的有用算法。

InfoQ 访谈了该书的作者,访谈话题涉及该书的内容、Spark GraphX 程序库、Spark 的整体架构、图数据处理和分析领域的未来发展等问题。

InfoQ:你们是如何定义图数据的?

Michael Malak:就事论事,图结构看上去并非像股价图那样,而是边和点的集合。但这只是一种模糊的数学抽象。更具体地说,在书的第一章中我们将真实世界中的图划分为五类:网络、树、类 RDBMS 结构、稀疏矩阵以及其它杂七杂八的结构。

Robin East:传统的数据分析方法侧重于事物本身,即实体,例如银行交易、资产注册等等。而图数据不仅关注事务,还关注事物之间的联系。例如,如果有一个呼叫记录告诉我张三曾打电话给李四,这样就可以将张三和李四关联起来。这种关联关系提供了与两者相关的有价值信息,而这样的信息是不可能仅从两者单纯的个体数据中获取的。

InfoQ:什么是图数据分析,它与传统数据的处理有什么不同?

Malak:正如我们在书的第一章中所描述的,RDBMS 不足以有效地处理图路径遍历运算,因为该运算需要进行大量的自连接运算。用于稀疏矩阵处理是另一个图分析展示出良好性能的领域,在书中机器学习相关的第七章中对此有所描述。

East:图分析事实上是一系列的实践,这些实践侧重于对数据条目间关联信息内容的描绘。在不同实体间连接模式可见的情况下,对不同数据间关联建模提供了十分强大的能力。再次使用电话呼叫记录作为例子,当我们对由不同人所做的不同呼叫而组成的“网络”进行分析时,就可以去构建具有不同交互类型的图形。在一些情况下,我们可以使用数据的结构信息对不同的行为进行分隔(例如区分犯罪与否)。

InfoQ:图数据分析是如何促进大数据和预测分析的?

Malak:对于已有的大数据,首先你需要从数据中抽取出结构化数据,通常是关系模型或者图模型。一些问题可自然地表示为图问题,例如地图中的路由查找、社会网络分析(尤其是在一个社会网络图中发现意见领袖)。所有的机器学习都是关于做预测的,而在书中关于机器学习的一章也是内容最长的。这一章中展示了一些使用图数据上机器学习的方法。

East:基于大数据的预测分析的效能,事实上取决于抽取许多不同类型的特征作为预测算法输入的能力。书中我最喜欢的例子就是对原有垃圾邮件检测的全新实现。原问题是使用逻辑回归检测垃圾页面,但是我们采用了一种有趣的新思想,即 Truncated Page Rank 算法,该算法使用基于图的输入特性扩展了传统的输入特性。书中展示了如何在 GraphX 中实现这个模型。

InfoQ:你们能介绍一下 GraphFrames 的工作机制吗?它与 DataFrames 相比如何?

Malak:作为 Apache Spark 生态系统的一部分,GraphX 是 Spark 的官方图处理系统。即使在 Spark 2.0 中也是如此。GraphX 基于 RDD 技术,每条边和每个节点均由一个 RDD 表示。GraphFrames 作为 spark-packages.org 所提供的附加软件,依然是基于 DataFrames 的。将 GraphX 与 GrapeFrames 进行对比,这很大程度上就是 RDD 与 DataFrames 的对比。使用 DataFrames(对于 GraphFrames 也一样),Catalyst 查询计划器、Tungsten sun.misc.unsafe 原始内存布局、即时字节码生成会得到潜在的巨大性能提升。就即时字节码生成而言,Spark 2.0 对整个处理流水线而非 keyhole 代码生成进行了改进,这取得了相比于 Spark 1.6 Dataframes 十倍的性能提升。GraphX 具有内部路由表,这便利了三元组(triplet)的构建;GraphFrames 虽然缺少内部路由表的设计,但从 DataFrames 所免费获取的性能改进弥补这一不足,并给出了更大的性能优势。GraphFrames 还具有使用 Neo4j Cypher 语言的子集和 DataFrames 对 SQL 语言的支持进行组合查询的功能。最后一点,GraphFrames 提供了对 Python 和 Java 语言的绑定,这对于喜欢 Python 语言和更适应 Java 开发的程序员是一个喜讯。但是 GraphX 的痛点在于仅官方支持 Scala 语言(虽然在书中我们也展示了如何跨域数以百计的关卡实现在开发中对 Java 的支持)。我们在第十章中涵盖了 GraphFrames 相关内容,并给出了一个有趣的例子,就是去查找本应存在于 Wikipedia 中的缺失链接。

East: 弹性分布式数据集(Resilient Distributed Datasets,RDD)是 Spark 提供的核心底层数据结构。在 GraphX 中,RDD 用于表示图中的边和节点。另一方面,DataFrames 是高层数据接口,提供了一些面向开发人员的有用特性,例如 SQL 接口。DataFrames 还提供了若干性能优化。GraphFrames 使用 DataFrames 表示图,而非 RDD。

GraphFrames 中添加了若干 GraphX 所不具有的关键特性,例如查询结构、Python 属性函数(Property)和 Java API。无论如何,从一种表示方式转化为另一种都是可能的,事实上这也是 PageRank、连通分量等标准算法的实现方法。

InfoQ:你们能介绍一下 NoSQL 图数据库、图数据查询、图数据分析和图数据可视化这四种图数据相关的概念吗?

Malak:我在 2016 年 6 月的 Spark 峰会上做过一个报告,报告中对图技术给出了一个很好的“频谱”展示。频谱图的一端是真正 OLTP 风格的 NoSQL 图数据库,包括 Neo4j、Titan、OrientDB 等。另一端是 OLAP 风格的图处理和数据分析系统,包括 GraphX、GraphLab 等。图查询涉及的范围处于该频谱图的中央。NoSQL 图数据库和 GraphFrames 也都可以进行查询,但是 GraphX 在查询方面非常有局限性。无论 OLTP 风格图数据库或是 OLAP 风格的图处理和分析系统,都可以应用图数据库可视化技术,所以图数据可视化的领域范围与该频谱图是相互正交的。在本书中我们论及两种特定的技术:Gephi 和组合使用 Zpeppelin 与 d3.js。需要指出的是,图可视化的用例与关系数据可视化的用例之间有很大的差异。关系数据可视化的目标是对数据取得直观的了解,而图数据可视化的目标在于对数据或算法进行调试。

East:正如 Michael 已提到的,现在已有一些不同的图数据库,它们满足了一系列不同用例的需求。值得强调的是 GraphX 提供了内存中的图处理功能,而非数据库功能。可以使用 GraphX 从一系列数据源中构建基于内存的图,这样的数据源中可能包括对 NoSQL 图数据库的查询。实际上后一种组合的潜在应用前景巨大。

图可视化是一个需要整整一本书去阐述的话题,很高兴看到 Manning 出版社已经于前期初版了这样的一本书,那就是 Corey Lanum 所著的《Visualizing Graph Data》。

InfoQ:在哪些受欢迎的用例数据处理中,图数据处理是更好解决的方案?

Malak: 应用 GraphX 的典型代表性算法是 PageRank。一些用例使用或者拓展了 RageRank 算法,这样的用例超越了 Google 将 PageRank 用于搜索排序的应用,可用于在论文引用网络(书中给出了一个实例)和社会网络这样类型的图中查找意见领袖。在书中我们还展示了如何将 PageRank 转化为另一种称为 Truncated Page Rank 的算法,这种算法可用于发现垃圾网页链接农场。除了 PageRank 之外,我们在书中还给出了一些经典图算法的实现,这些经典图算法提出于半个世纪之前,其中包括了最短路径(例如地理空间映射)、旅行推销员问题和最小生成树等算法。最小生成树问题听上去很学术,但是在书中我们展示了它的一个有意思的应用,就是辅以 MLlib 提供的 word2vec 算法,从语料库中自动建立层次化概念分类结构。一些 Spark 中的机器学习算法实际上是 GraphX 实现的,其中包括:一种类似于 ALS 可用于推荐系统的算法 SVD++、幂迭代聚类(Power Iteration Clustering,PIC)等。在书中给出了使用 PIC 算法实现计算机视觉中图像分割的例子。

East:在数据间关联与数据项本身同等重要的情况下,就应该考虑使用图方法进行数据处理。虽然有时使用传统方法也能实现这种图处理,但是这样的实现方法很快会变成一种繁重工作,因为即使对于十分简单的结构,这样的方法也需要付出很大的努力才能实现。与之相对比的是,对于互连的数据,GraphX 等图处理系统提供了非常自然的数据表示和交互方式。

InfoQ:通过提供面向批处理、流数据和图数据处理的程序库,Spark 给出了一种统一的大数据处理架构。Spark 还提供了机器学习程序库。你们能介绍一些同时使用所有这些程序库的用例吗?

Malak:在书里关于机器学习的一章中,我们描述了在 MLlib 中使用 GraphX 的方法,但是其中所提及的方法都是批处理应用。类似于 Spark 中的任何其它对象,在 GraphX 和 GraphFrames 中图也是不可变的对象,不可以在图中增量地添加边或节点。虽然 Spark Streaming 也是基于不可变数据,但是它通过实现对关系数据的小型批处理方法使得流数据处理成为可能,小型批处理实现了类似于微型关系表的功能,这种微型表比微型图更加有用。在《Spark GraphX in Action》一书出版后,GraphX 的创立者 Ankur Dave 在 Spark 峰会上展示了一个称为 Tegra 的研究项目,该项目为实现对增量流数据的更新,重写了 GraphX 的代码(该项目与 Spark Streaming 无关)。但是我并不相信当前 Tegra 的代码已经公开可用。

East:在线欺诈检测就是这样的一个领域。考虑到欺诈攻击的快速演变特性,预测分析需要使用最近五分钟或者更短时间内所生成的特性。此外将图模型加入到特征混合中的方法,具有实现更加有效的预测算法的潜力。

InfoQ:在书中提及了性能和监控。你们能给出一些使 GraphX 程序更加高效的技术吗?

Malak:一个原则就是审慎地掌控缓存和 RDD 血统(lineage)。鉴于 GraphX 程序多为实现迭代运算,该原则对于性能问题是尤其重要的。其它一些典型的 Spark 技术对性能优化也有效,例如选取适当的序列化程序。

East:当然首要的是了解 Spark 的工作机制,以及如何对进程进行监控以了解系统运行状态。Spark 提供的基于 Web 的 GUI 可以实时展示系统运行状态,为此必须了解如何最大化地去使用这些工具。程序有很多不同的优化方向,例如缓存、序列化、监测点等,但是理想情况下只有在你理解你的应用是如何执行的,才可以应用这些优化方向。

InfoQ:在当前的 Spark GraphX 程序库实现中还有哪些缺失特性吗?

Malak:书中第八章专用于阐述“缺失的算法”,其中包括:PDF 文件的读取、图的合并、孤立节点的滤除、全局聚类参数的计算等。此外,为加速 GraphX 程序运行,GraphX 的创建者 Ankur Dave 建立了一个称为 IndexedRDD 的程序包。该程序包尚未集成到 Apache Spark 的发布版本中,因而在某种程度上也可以说是 GraphX 所“缺失”的。在第八章中我们展示了如何将 IndexedRDD 集成到 GraphX 程序中,以实现程序性能的提高。

East:可能协同使用 Spark Streaming 时需要对图的增量更新的支持,所以大家时常会提出需要此特性。鉴于当前 GraphX 的数据结构是不可变的,因而增量更新意味着重新创建整个图,这是一个十分耗时的过程。

InfoQ:接下来在图数据处理领域中将会发生什么?

Malak:一个发展趋势将会是同时可处理 OLAP 和 OLTP 类型应用的图系统。在上面提到过我在 2016 年 6 月 Spark 峰会上给出的频谱图,其中很明显可以看出 NoSQL 图数据库在对整个频谱的覆盖上遥遥领先。但是对于哪一种特定的 NoSQL 图数据库将会成为最终胜出者的问题,Neo4j、Turi(或 Dato、GraphLab)、OrientDB、Titan、Oracle PGX 等都是潜在的胜出者。其中 GraphX 的一个显著优势是,对于已经部署了 Spark 集群的系统,无需再付出额外的安装和管理代价。而当前 Spark 集群已在很多公司中得以部署。因而与 Spark 的集成将会成为影响任何未来可能处于统治地位的图技术的关键因素。

East:我认为有两个领域值得密切关注。第一个领域是在图数据库与图处理架构间的紧密集成。这可通过 Neo4j 这样的图数据库与 Spark 这样的图处理系统间的无缝互操作实现,或许这些功能也可出现在同一产品中。

另一个领域是图算法与主流机器学习算法两者间更加紧密地集成。当前一些程序库只是侧重于其中的一方(GraphX 也仅是与 Spark 机器学习程序库松散地集成)。事实上,可经常看到用图来替代表示稀疏数据矩阵。

Robin 还谈及了图数据处理的方法。

East: 如果你习惯于使用关系数据库进行传统数据处理,那么可能需要一段时间去理解使用基于图的方法进行数据建模。如果你固步自封,那么很快就会看到图结构的应用将无所不在。

关于被访者

Michael Malak是《Spark GraphX In Action》一书的主要作者,他自 2013 年初以来,已在两家《财富》世界 200 强企业中开展了 Spark 解决方案实施。在企业能采购到具有适合功能的商业产品之间,他可以做编程实现。

Robin East曾作为大型企业顾问工作超过 15 年,现在是 Worldpay 公司的数据科学家。

查看英文原文: Spark GraphX in Action Book Review and Interview


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2016-10-27 17:472613
用户头像

发布了 227 篇内容, 共 71.3 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

火山引擎ByteHouse:4000字总结,Serverless在OLAP领域应用的五点思考

字节跳动数据平台

数据库 大数据 云原生

在HarmonyOS上使用ArkUI实现计步器应用

HarmonyOS开发者

HarmonyOS

走进中国近代工业摇篮,探索业财融合领先实践

用友BIP

业财融合

2024上海国际智能驾驶技术展览会

AIOTE智博会

自动驾驶展 智能驾驶展

对话在行人|新漢智能:基于用友BIP共创智能解决方案,使能中企全球化

用友BIP

数智化领先实践 中企全球化

理解技术和业务的共同目标

老张

质量保障 业务目标 技术目标

苹果超好用的Markdown文本编辑器:Ulysses for Mac最新激活 支持M1

彩云

文本编辑器 Ulysses

【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布

阿里云大数据AI技术

大数据

Amazon EC2 新手初探:初始设置之创建安全组

王强

Amazon EC2 亚马逊云服务

promise时效架构升级方案的实施及落地 | 京东物流技术团队

京东科技开发者

架构 重构 Promise 架构升级 企业号11月PK榜

Sonoma Cache Cleaner for Mac 苹果系统优化工具

彩云

Sonoma Cache Cleaner 系统优化工具

实时化与Serverless是开源大数据3.0时代的必然选择

阿里云大数据AI技术

开源

用友与清华合力赋能,提升大型企业数智化领导力!

用友BIP

企业数智化

通过Python脚本支持OC代码重构实践(三):数据项使用模块接入数据通路的适配

百度Geek说

Python 自动化 重构 脚本 企业号11月PK榜

【软件推荐】行云管家让你轻松实现数据安全运维!

行云管家

数据安全 数据泄露 数据安全运维

服务器硬盘选机械还是固态

Geek_f19a80

服务商

浅谈仓储UI自动化之路 | 京东物流技术团队

京东科技开发者

测试 自动化测试 UI自动化测试 企业号11月PK榜

推荐一个适合小公司的自动化部署脚本

秃头小帅oi

程序员 自动化部署

WorkPlus移动数字化平台,助力企业全面掌控业务和生态

WorkPlus

BI 数据可视化平台建设(2)—筛选器组件升级实践

vivo互联网技术

设计模式 前端组件设计 组件库开发

QCN9024 vs. QCN9274: Performance comparison of wireless network chips

wifi6-yiyi

QCN9024 qcn9274

Android下Linux创建进程的姿势(下)

江湖修行

android Linux Kenel 移动端 #面试 #前端

第五期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效

云渲染的“公”“私”技术!

Finovy Cloud

渲染 云渲染 元宇宙 云渲染农场 动画制作

WorkPlus移动数字化平台高定制化服务,贴身满足企业的个性化需求

WorkPlus

软件测试/测试开发丨掌握未来,引领人工智能测试新潮流!

测试人

人工智能 软件测试

开源埋点用户行为分析方案-ClickLog埋点(ClkLog)

ClkLog

开源埋点分析系统:洞察用户行为的新视角

ClkLog

开源 埋点 用户行为分析 用户分析 埋点框架

为React Ant-Design Table增加字段设置 | 京东云技术团队

京东科技开发者

前端 React Ant Design 企业号11月PK榜 前端组件

企业、政府单位及公共组织办会,一键高效合规直达酒店!

用友BIP

企业数智化

Macos鼠标右键助手专业版:MouseBoost PRO for Mac 支持M1

iMac小白

《Spark GraphX in Action》书评及作者访谈_Book Review_Srini Penchikala_InfoQ精选文章