刚开始接触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框架来实现决策树算法的方法。在这个方法中,主要使用Mapper和Reducer来实现决策树算法的计算。下面是基于MapReduce实现决策树算法的知识点: 1. 基于C45决策树算法...
《基于Java实现的简易MapReduce框架》 在大数据处理领域,Hadoop是一个不可或缺的重要工具,它为海量数据的存储和处理提供了分布式计算框架。而MapReduce是Hadoop的核心组件之一,用于处理和生成大规模数据集。这个...
### 基于MapReduce框架的文本挖掘算法设计与实现 #### 重要概念与背景 在信息技术迅速发展的背景下,文本挖掘技术成为了从海量文本数据中提取有价值信息的关键工具。随着互联网的普及,每日产生的文本数据量呈爆炸...
基于MapReduce的Apriori算法代码是一个使用Hadoop MapReduce框架实现的关联规则挖掘算法,称为Apriori算法。Apriori算法是一种经典的关联规则挖掘算法,用于发现事务数据库中频繁出现的项集。该算法的主要思想是生成...
《KNN分类算法的MapReduce并行化实现》 KNN(K-Nearest Neighbor)算法是一种基于实例的学习方法,广泛应用于数据挖掘和机器学习领域,尤其在分类问题上表现出色。然而,随着大数据时代的到来,传统的单机版KNN算法...
本话题将深入探讨如何使用Hadoop MapReduce实现两个矩阵相乘的算法,这在数据分析、机器学习以及高性能计算中有着重要应用。 首先,理解矩阵相乘的基本原理至关重要。矩阵相乘不是简单的元素对元素相乘,而是对应...
在这个场景中,我们讨论的是如何在Hadoop 2.0框架下利用MapReduce实现朴素贝叶斯(Naive Bayes)算法。朴素贝叶斯算法是一种基于概率的分类方法,广泛应用于文本分类、垃圾邮件过滤等领域。它假设特征之间相互独立,...
此时,结合MapReduce框架可以在分布式环境中高效地执行KMeans算法。以下将详细阐述如何用MapReduce实现KMeans算法以及涉及的关键步骤。 1. **数据预处理**: 在HDFS(Hadoop Distributed File System)上存储数据...
本项目“基于MapReduce实现物品协同过滤算法(ItemCF)”是针对推荐系统中的一种经典算法进行分布式实现,旨在提高推荐效率和精度。下面我们将深入探讨MapReduce、Hadoop以及物品协同过滤(Item-based Collaborative...
云计算MapReduce实现KNN算法,使用环境:在vmware虚拟机上安装unbuntu14系统,系统中安装hadoop。文件中包含有MapReduce以及KNN的java代码、包含训练数据的excel表格以及详细的教程文档,文档中手把手教到如何使用...
在IT领域,尤其是在大数据处理和社交网络分析中,"MapReduce实现二度好友推荐算法"是一种常见的技术应用。MapReduce是Google提出的一种分布式计算模型,主要用于处理和生成大规模数据集。在这个场景下,我们利用...
在Hadoop生态系统中,我们可以通过Apache Mahout或者Spark MLlib等库实现基于MapReduce的推荐算法。Mahout提供了丰富的推荐算法实现,包括基于用户和物品的协同过滤,而Spark的并行计算能力则使得实时推荐成为可能。...
本文主要探讨的是在MapReduce框架下,如何实现Dijkstra算法的并行化,以高效地解决大规模图中的最短路径问题。 Dijkstra算法是一种经典的单源最短路径算法,广泛应用于网络路由、图形理论等领域。其基本思想是从源...
这里我们使用Dijkstra算法的变种,结合MapReduce框架来处理大规模图数据。 首先,图数据以邻接表的形式存储。每行数据代表一个节点,包含节点ID、距离信息、颜色以及边和边的权重。例如,节点ID为10的节点可能有一...
该算法利用MapReduce模型,实现了图数据的并行处理,提高了计算效率和扩展性。 知识点1:图结构聚类 图结构聚类是一种基于密度的图聚类算法,可以找到图中的聚类结构,并发现图中的Hub节点和离群节点。图结构聚类...
总结来说,这个项目通过哈希技术优化了KNN的近邻搜索过程,再借助MapReduce实现了并行计算,使得在大数据集上执行KNN算法变得可行且高效。这样的实现方式不仅能够处理大规模数据,而且在保持算法准确性的同时,大大...