LouvainMethod分布式运行的升级之路

2023-11-16

1、背景介绍        

        Louvain是大规模图谱的谱聚类算法,引入模块度的概念分二阶段进行聚类,直到收敛为止。分布式的代码可以在如下网址进行下载。

GitHub - Sotera/spark-distributed-louvain-modularity: Spark / graphX implementation of the distributed louvain modularity algorithm

  该代码依赖的spark-core和spark-graphx、scala-lang是2.10版本,采用的gradle的进行打包,也可以采用maven进行打包,解决相关的依赖问题之后,本地模式可以很快跑通。但是转向集群的时候,发现集群的spark的scala版本是2.12,我采用的是maven的scala编译的版本是2.10, 编译用到的scala和运行环境的scala版本不一致,结果无法进行spark集群模式的运行。

2、LouvainMethod的升级之路

        首先更改环境,即把louvain的代码依赖保持2.10,把spark的scala版本改成2.10,但是这样会影响其他任务的执行,其他任务可能依赖2.12的版本。因此,踏上了LouvainMethod的升级之路,即由2.10升级到2.12。

        将项目依赖的版本和编译的scala版本改为2.12之后,发现在新的高版本的spark-graphx_2.12版本里Graph对象没有了mapReduceTriplet方法,通过查找发现该方法在2.12版本的GraphXUtils类里,以一个私有方法存在,只能在包graphx下被访问,对外部不可见,因此首先想到的是通过反射机制对该私有方法进行访问,参照了如下的方法:

         在任意scala对象中调用私有方法 - 问答 - 腾讯云开发者社区-腾讯云

代码调试后,私有方法带有泛类型参数和普通参数,可以正常被反射出来,然而在调用的时候,始终报 wrong-number-of-arguments的问题。原因还没有查到。继而通过高版本的api是实现低版本的mapReduceTriplets方法。   参照该文档  GraphX - Spark 3.4.1 Documentation   的api接口含义,注意到新版2.12的Graph里aggregateMessage方法和低版本的mapReduceTriplets返回值一致,参数类型有diff,高版本的参数是EdgeContext,低版本的是EdgeTriplet,高版本通过sendToDst和sendToSrc对低版本进行了简化,使用功能更强大,因此尝试用aggregateMessage实现mapReduceTriplets。

val nodeWeightMapFunc = (e:EdgeTriplet[VD,Long]) => Iterator((e.srcId,e.attr), (e.dstId,e.attr))

val nodeWeightReduceFunc = (e1:Long,e2:Long) => e1+e2

转化为:

def nodeWeightMapFunc(e:EdgeContext[VD, Long, Long]) {
e.sendToDst(e.attr)
e.sendToSrc(e.attr)
}
Msg与reduceFunc的返回值保持一致。

通过如下方式进行调用:val nodeWeights = graph.aggregateMessages[Long](nodeWeightMapFunc,nodeWeightReduceFunc)

sendMsg的低版本如下:

private def sendMsg(et:EdgeTriplet[VertexState,Long]) = {
    val m1 = (et.dstId,Map((et.srcAttr.community,et.srcAttr.communitySigmaTot)->et.attr))
   val m2 = (et.srcId,Map((et.dstAttr.community,et.dstAttr.communitySigmaTot)->et.attr))
   Iterator(m1, m2)
}

升级为:

private def sendMsg(et: EdgeContext[VertexState, Long, Map[(Long,Long),Long]]) = {
et.sendToSrc(Map((et.dstAttr.community, et.dstAttr.communitySigmaTot) -> et.attr))
et.sendToDst(Map((et.srcAttr.community, et.srcAttr.communitySigmaTot) -> et.attr))
}

4、在集群运行相关jar的及运行脚本

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LouvainMethod分布式运行的升级之路 的相关文章

  • centos 7修改打开文件数限制

    本文转自 http www tuicool com articles b2UNzm 未作修改 由于原文内容过多 在此仅列出部分内容 3 加大打开文件数的限制 open files 查看 ulimit n ulimit a vi etc se
  • 记录一次生产环境MySQL死锁以及解决思路

    一 背景 1 业务背景 这里因为涉及到公司的业务问题不进行深入讨论 下面换成通用的一些业务场景就是举例 2 技术背景 众所周知 所谓锁的产生本质上是想解决资源竞争问题 在MySQL的前提下 MySQL为了解决事务并发独写的问题 在进行ins
  • 深度学习大模型训练--分布式 deepspeed PipeLine Parallelism 源码解析

    deepspeed PipeLine Parallelism 源码解析 basic concept PipeDream abstract 1F1B 4 steps Code comprehension in deepspeed prepar
  • Zookeeper(三)—分布式锁实现

    一 独占锁原理 独占锁是利用zk同一目录下不能创建多个相同名称的节点这个特性 来实现分布式锁的功能 竞争锁的分布式系统 都在zk根目录下创建一个名为lock的节点 创建节点成功的系统 说明抢到了这把锁 没有创建成功的系统 说明这个节点已经被
  • Hadoop 完全分布式运行实战

    Hadoop运行模式包括 本地模式 伪分布式模式以及完全分布式模式 Hadoop官方网站 Apache Hadoop 流程步骤 准备3台客户机 关闭防火墙 静态ip 主机名称 安装JDK 配置环境变量 安装Hadoop 配置环境变量 配置集
  • 基于一致性理论的孤岛微电网分布式控制策略研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真搭建 2 2 优化控制
  • 基于一致性理论的孤岛微电网分布式控制策略研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真搭建 2 2 优化控制
  • MQ - KAFKA 高级篇

    kafak是一个分布式流处理平台 提供消息持久化 基于发布 订阅的方式的消息中间件 同时通过消费端配置相同的groupId支持点对点通信 适用场景 构造实时流数据管道 用于系统或应用之间可靠的消息传输 数据采集及处理 例如连接到一个数据库系
  • 基于一致性理论的孤岛微电网分布式控制策略研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真搭建 2 2 优化控制
  • RabbitMQ避免重复消费

    在Java中 可以使用消息队列来实现消息的异步处理 其中常用的消息队列有 RabbitMQ ActiveMQ Kafka 等 什么是幂等性 幂等性是指无论操作执行多少次 都是得到相同的结果 而不会产生其他副作用 在rabbitMQ中 什么是
  • Apollo(阿波罗)——携程推出的分布式配置管理中心 & 启动Apollo & SpringBoot集成 & @ConfigurationProperties的使用姿势

    前言 Apollo 阿波罗 是一款可靠的分布式配置管理中心 诞生于携程框架研发部 能够集中化管理应用不同环境 不同集群的配置 配置修改后能够实时推送到应用端 并且具备规范的权限 流程治理等特性 适用于微服务配置管理场景 本篇博客介绍如何启动
  • 深入理解软件测试中的Web请求流程!

    在软件开发的过程中 软件测试是不可或缺的一环 它有助于确保软件系统的稳定性 可靠性和安全性 而在众多测试中 Web请求流程的测试显得尤为重要 因为几乎所有的现代应用都离不开网络交互 接下来我们将深入探讨软件测试中完整的Web请求流程 帮助大
  • 各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录(SSO)系统

    各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录 SSO 系统 单点登录 SSO 是一个登录服务层 通过一次登录访问多个应用 使用SSO服务可以提高多系统使用的用户体验和安全性 用户不必记忆多个密码 不必多次登录浪费时间 下面推荐一
  • Zookeeper 和 Dubbo 的关系?

    Zookeeper的作用 zookeeper用来注册服务和进行负载均衡 哪一个服务由哪一个机器来提供必需让调用者知道 简单来说就是ip地址和服务名称的对应关系 当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现 但是如果提供服务
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • 终于找到了最新版的Zookeeper入门级教程,建议收藏!

    小熊学Java https javaxiaobear cn 1 分布式一致性 1 CAP 理论 CAP 理论指出对于一个分布式计算系统来说 不可能同时满足以下三点 一致性 在分布式环境中 一致性是指数据在多个副本之间是否能够保持一致的特性
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • Redis分布式锁--java实现

    文章目录 Redis分布式锁 方案 SETNX EXPIRE 基本原理 比较好的实现 会产生四个问题 几种解决原子性的方案
  • Kafka速度之谜:高性能的幕后秘密大揭秘

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 kafka高性能的原因 Page Cache ZeroCopy 零拷贝 前言 Kafka的介绍 kafka是linkedIn开源的分布式消息系统 归给Ap
  • 2024年华为Harmony OS走到新里程碑:取代iOS成为国内第二大智能手机操作系统

    前言 如果要问2024年最火的技术是什么 那鸿蒙开发必须占据一些位置 HarmonyOS是华为自主研发的物联网操作系统 经历四年多的发展已构建起全新的智慧生态体系 彻底改变了智能终端的交互方式 当时鸿蒙生态的智能设备已超过7亿台 同时还带来

随机推荐

  • 2022-2023 计算机视觉顶会截止时间

    2022 2023计算机视觉会议截止时间 参考网页 Docs 网页中内容如下 Level Conference Name Conference Location Submission Deadline Conference Date Web
  • 第三周作业

    1 图文并茂说明raid0 raid1 raid10 raid01 raid5等原理 RAID 0 以chunk为单位并行读写数据 速度非常快 但是没有冗余容错能力 如果一块硬盘损坏的话 会导致所有数据的丢失 最少磁盘数 1 RAID 1
  • vector模板类的简单实现 C++

    学了模板类那一节 所以动手自己用C 简单实现了一下 vector 的几个简单函数 直接上代码吧 include
  • JVM内存溢出与内存泄露

    1 什么是内存溢出 当前创建的对象的大小大于可用的内存容量大小 发生内存溢出 2 什么是内存泄露 该回收的垃圾对象没有被回收 发生了内存泄露 垃圾对象越堆越多 可用内存越来越少 若可用内存无法存放新的垃圾对象 就导致内存溢出 内存泄露会导致
  • 华为云云耀云服务器L实例评测|redis漏洞回顾 & MySQL数据安全解决 搭建主从集群MySQL & 相关设置

    前言 最近华为云云耀云服务器L实例上新 也搞了一台来玩 期间遇到过MySQL数据库被攻击的情况 数据丢失 还好我有几份备份 没有造成太大的损失 后来有发现Redis数据库被攻击的情况 加入了redis密码初步解决问题 总之就是各种遭受毒打
  • 2023年网络与信息安全国际会议(NISecurity 2023)

    会议简介 Brief Introduction 2023年网络与信息安全国际会议 NISecurity 2023 会议时间 2023年10月13日 15日 召开地点 中国 杭州 大会官网 www nisecurity org 2023年网络
  • python之selenium-web自动化<一>

    python之web自动化 二 戳这里 一图了解整个代码驱动浏览器的过程 前提 Chrome浏览器驱动下载地址 http chromedriver storage googleapis com index html Firefox 火狐 浏
  • 【vscode单位转换】px、rem、rpx相互转换工具

    文章目录 一 px rem px rem rem px 我失效了 写个新的 二 px rpx 三 rpx px 重点 四 新 px rem px rem rem px 记录学习的轨迹 2022 06 20 之前写在wiki里 移植记录 具体
  • global lib dirs 在设置多个编译器时仍旧使用旧的编译器路径

    BB的地方 以前自己用arm linux gnueabihf的5 4 1的版本编译测试了虚拟键盘 全部都没有问题 突然呢 说不行 就要用厂家给的arm realarm的5 5版本 原本Qt用5 13 0 那不行 要用13 2的 那拜托你之前
  • springboot项目制作docker镜像,如何动态传递变量值?

    springboot项目制作成docker镜像后 如何给properties文件的变量动态传递值呢 步骤1 将properties文件设置为如下形式 serverUrl SERVER URL apiKey API KEY 步骤2 制作成do
  • 如何重启mysql服务?

    Mysql在修改my ini文件后 如修改字符集 需要重启服务才能生效 下面介绍如何重启mysql服务 1 Win R 输入cmd 确定后进入命令窗口 输入命令net stop mysql 停止当前mysql服务 2 如果出现如图所示错误
  • JAVA 获取指定月份的每周的开始日期和结束日期

    1 第一种情况 从1号开始到月份最后一天结束 代码如下 private DateTimeFormatter dateTimeFormatter DateTimeFormatter ofPattern yyyy MM dd public Li
  • Arduino和Python卡尔曼滤波对四元数进行姿态测定

    在本文中 我将演示使用EKF 扩展卡尔曼滤波 对四元数确定姿态的实现 并说明将多个传感器数据融合在一起以使系统正常工作的必要性 将要使用的传感器是陀螺仪 加速度计和磁力计 Arduino用于从传感器读取数据 但是数据处理将在python中完
  • 移动端开发框架

    总体概述 现在比较流行的移动APP开发框架有以下六种 网页 混合 渐进 原生 桥接 自绘 前三种体验与Web的体验相似 后三种与原生APP的体验相似 这六种框架形式 都有自己适用的范围 无所谓好坏 适用就是好 网页应用适用于传统网站APP化
  • 手写vue(三)模板渲染解析

    一 目标 创建一个Vue实例时 我们可以传入el配置项 去指定一个DOM元素作为Vue容器 而这个Vue容器中 可以使用例如插值表达式等Vue框架提供的语法 并且能够渲染到浏览器页面上 而浏览器并不能解析这些Vue语法 因此 Vue框架是通
  • python: How to Create a Python Package

    StudentScoreInfo py 学生成绩类 date 2023 06 16 edit Geovin Du geovindu 涂聚文 ide PyCharm 2023 1 python 11 import datetime impor
  • GAN生成手写数字实例讲解Colab使用教程

    Colab 全称Colaboratory 是谷歌提供的一个在线工作平台 可以与谷歌云盘协作使用 我们可以在Colab平台上运行代码 而且大部分常用的包都已经安装好 不需要再进行安装 也不需要进行环境配置 非常方便快捷 对于初学者来说非常友好
  • 颠覆传统逻辑的C程序

    1 在main之前运行的C代码 before main c include
  • k8s 部署spring cloud项目

    微服务架构是一项在云中部署应用和服务的新技术 大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务 而红帽说API应该是重点 微服务可以在 自己的程序 中运行 并通过 轻量级设备与HTTP型API进行沟通 关键在于该服务可以在
  • LouvainMethod分布式运行的升级之路

    1 背景介绍 Louvain是大规模图谱的谱聚类算法 引入模块度的概念分二阶段进行聚类 直到收敛为止 分布式的代码可以在如下网址进行下载 GitHub Sotera spark distributed louvain modularity