`
zxxapple
  • 浏览: 79060 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

现阶段MapReduce框架 实现简单图的算法

阅读更多

刚开始接触hadoop的mapreduce并行计算的编程框架,使用的是java语言,对于一些简单的日志文档处理,相当的容易上手,但是经过一段时间的学习调研,发现用其实现一些图的算法,相当蹩脚,效率很低。。。

 

下面我列出下mapreduce实现图的单源最短路径的算法(伪代码)这里假设的是每个节点之间是单源节点

1: class Mapper
2: method Map(nid n,node N)
3: d ! N.Distance
4: Emit(nid n,N) Passalonggraphstructure
5: forall nodeid m ! N.AdjacencyListdo
6: Emit(nid m,d +1) Emitdistancestoreachablenodes

1: class Reducer
2:       method Reduce(nid m,[d ,d ,...])
3:      dmin=Max
4:      M=0
5:      forall d ! counts [d ,d ,...] do
6:     if IsNode(d) then
7:     M=d 
8:    elseif d<dmin then 
       dmin=d
9:    M.Distance=dmin
10:  Emit(nid m,node M)

 其中的要点是(采用的广度优先搜索的思想)

 

这只是其中的一次迭代,每次迭代都是一个job,而且每个job之间需要传输一个特殊的键值对  包含整个图的完整信息。

还有一个问题整体的迭代次数,什么时候停止呢  如何判断,我这里采用的Counter计数器,记录到达源节点的距离为Max的个数,根据这个个数来判断是否该停止工作,工作之间的数据传输,最好采用二进制文件来传输方便处理。图在mapreduce中存储是采用临界表的方式进行存储,比较方便

 

如果实现节点之间的边带权值的也很简单  只需要将上述的伪代码  d+1 改为d+对应的全知即可

 

整个工作需要一个驱动程序来控制作业。。下面是一个简单的实现 伪代码

public static void main(String[] args) throws Exception
	{
		long count = 0;
		int it=1;
		String input="/Graph/input/";
		String output="/Graph/output1";
		do
		{
			Job job = getNodeJob(input, output);
			job.waitForCompletion(true);
			Counters counter = job.getCounters();
			count = counter.findCounter(ReachableNodes.Reduce).getValue();
			
			input="/Graph/output"+it+"/part-r-00000";
			it++;
			output="/Graph/output"+it;
		} while (count != agr[0]);//所有节点都可达的时候结束迭代--
	}
	
	public static Job getNodeJob(String inPath,String outPath) throws Exception
	{
		Configuration conf = new Configuration();
		Job job=new Job(conf,"Iterable Node");
		
		job.setJarByClass(GraphDrive.class);
		
		job.setNumReduceTasks(1);

		job.setMapperClass(GraphMapper.class);
		job.setReducerClass(GraphReducer.class);
		
		job.setMapOutputKeyClass(IntWritable.class);
		job.setMapOutputValueClass(BFSNode.class);
		job.setOutputKeyClass(IntWritable.class);
		job.setOutputValueClass(BFSNode.class);
		
		job.setInputFormatClass(SequenceFileInputFormat.class);
		job.setOutputFormatClass(SequenceFileOutputFormat.class);
		
		FileInputFormat.addInputPath(job, new Path(inPath));
		FileOutputFormat.setOutputPath(job, new Path(outPath));
		
		FileSystem.get(job.getConfiguration()).delete(new Path(outPath), true);//如果文件已存在删除
		
		return job;	
	}

 

 

下面我来说说我的问题,能帮我解惑的朋友谢谢指正,当把一个图存放到一个文件的时候 也就是一个map的时候 ,比较容易实现--很容易收敛,,但是如果采用多个map任务的时候  收敛会很慢  甚至死循环。。。很困惑

 

分享到:
评论

相关推荐

    基于MapReduce实现决策树算法

    基于MapReduce实现决策树算法是一种使用MapReduce框架来实现决策树算法的方法。在这个方法中,主要使用Mapper和Reducer来实现决策树算法的计算。下面是基于MapReduce实现决策树算法的知识点: 1. 基于C45决策树算法...

    基于Java实现的简易MapReduce框架.zip

    《基于Java实现的简易MapReduce框架》 在大数据处理领域,Hadoop是一个不可或缺的重要工具,它为海量数据的存储和处理提供了分布式计算框架。而MapReduce是Hadoop的核心组件之一,用于处理和生成大规模数据集。这个...

    基于MapReduce框架一种文本挖掘算法的设计与实现

    ### 基于MapReduce框架的文本挖掘算法设计与实现 #### 重要概念与背景 在信息技术迅速发展的背景下,文本挖掘技术成为了从海量文本数据中提取有价值信息的关键工具。随着互联网的普及,每日产生的文本数据量呈爆炸...

    KNN分类算法的MapReduce并行化实现1

    《KNN分类算法的MapReduce并行化实现》 KNN(K-Nearest Neighbor)算法是一种基于实例的学习方法,广泛应用于数据挖掘和机器学习领域,尤其在分类问题上表现出色。然而,随着大数据时代的到来,传统的单机版KNN算法...

    MapReduce实现矩阵相乘算法

    本话题将深入探讨如何使用Hadoop MapReduce实现两个矩阵相乘的算法,这在数据分析、机器学习以及高性能计算中有着重要应用。 首先,理解矩阵相乘的基本原理至关重要。矩阵相乘不是简单的元素对元素相乘,而是对应...

    mapreduce 实现朴素贝叶斯算法-源码

    在这个场景中,我们讨论的是如何在Hadoop 2.0框架下利用MapReduce实现朴素贝叶斯(Naive Bayes)算法。朴素贝叶斯算法是一种基于概率的分类方法,广泛应用于文本分类、垃圾邮件过滤等领域。它假设特征之间相互独立,...

    用MapReduce实现KMeans算法

    此时,结合MapReduce框架可以在分布式环境中高效地执行KMeans算法。以下将详细阐述如何用MapReduce实现KMeans算法以及涉及的关键步骤。 1. **数据预处理**: 在HDFS(Hadoop Distributed File System)上存储数据...

    基于MapReduce的Apriori算法代码

    基于MapReduce的Apriori算法代码是一个使用Hadoop MapReduce框架实现的关联规则挖掘算法,称为Apriori算法。Apriori算法是一种经典的关联规则挖掘算法,用于发现事务数据库中频繁出现的项集。该算法的主要思想是生成...

    云计算MapReduce实现KNN算法

    云计算MapReduce实现KNN算法,使用环境:在vmware虚拟机上安装unbuntu14系统,系统中安装hadoop。文件中包含有MapReduce以及KNN的java代码、包含训练数据的excel表格以及详细的教程文档,文档中手把手教到如何使用...

    MapReduce实现二度好友推荐算法

    在IT领域,尤其是在大数据处理和社交网络分析中,"MapReduce实现二度好友推荐算法"是一种常见的技术应用。MapReduce是Google提出的一种分布式计算模型,主要用于处理和生成大规模数据集。在这个场景下,我们利用...

    MapReduce下的Dijkstra并行算法研究.pdf

    本文主要探讨的是在MapReduce框架下,如何实现Dijkstra算法的并行化,以高效地解决大规模图中的最短路径问题。 Dijkstra算法是一种经典的单源最短路径算法,广泛应用于网络路由、图形理论等领域。其基本思想是从源...

    MapReduce实现单元最短路径算法.doc

    这里我们使用Dijkstra算法的变种,结合MapReduce框架来处理大规模图数据。 首先,图数据以邻接表的形式存储。每行数据代表一个节点,包含节点ID、距离信息、颜色以及边和边的权重。例如,节点ID为10的节点可能有一...

    基于MapReduce的图结构聚类算法.pdf

    该算法利用MapReduce模型,实现了图数据的并行处理,提高了计算效率和扩展性。 知识点1:图结构聚类 图结构聚类是一种基于密度的图聚类算法,可以找到图中的聚类结构,并发现图中的Hub节点和离群节点。图结构聚类...

    基于哈希技术与MapReduce的大数据集K-近邻算法实现代码

    总结来说,这个项目通过哈希技术优化了KNN的近邻搜索过程,再借助MapReduce实现了并行计算,使得在大数据集上执行KNN算法变得可行且高效。这样的实现方式不仅能够处理大规模数据,而且在保持算法准确性的同时,大大...

    基于Hadoop下MapReduce框架实现的的并行C4.5算法.zip

    # 基于Hadoop下MapReduce框架的并行C4.5算法 &gt; 项目来源于**西南交通大学**信息科学与技术学院**计算科学与技术专业**毕业设计 ## 说明 * 程序利用Eclipse EE在Hadoop平台下,使用Map/Reduce编程框架,将传统的C...

    基于Hadoop下MapReduce框架的并行C4.5算法.zip

    本项目“基于Hadoop下MapReduce框架的并行C4.5算法”聚焦于将经典的决策树算法C4.5应用于Hadoop的MapReduce编程模型中,以提升数据挖掘效率。 首先,我们要理解Hadoop的核心组件。Hadoop是由Apache基金会开发的一个...

Global site tag (gtag.js) - Google Analytics