PageRank在Hadoop和spark下的实现以及对比
package org.apache.hadoop.PageRank; import java.util.ArrayList; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class PageRank { public static void run(){ } public static void main(String[] args) throws Exception {
double factor=0;
if(args.length>1){
factor=Double.parseDouble(args[0]);
}else{
factor=0.85;
}
String input="hdfs://10.107.8.110:9000/PageRank_input";
String output="hdfs://10.107.8.110:9000/PageRank/output";
ArrayList<String> pathList=new ArrayList<String>();
for(int i=0;i<20;i++){
Configuration conf = new Configuration();
conf.set("num","4");
conf.set("factor",String.valueOf(factor));
Job job = Job.getInstance(conf, "PageRank");
job.setJarByClass(org.apache.hadoop.PageRank.PageRank.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.setInputPaths(job, new Path(input));
FileOutputFormat.setOutputPath(job, new Path(output));
input=output;
pathList.add(output);
output=output+1; System.out.println("the "+i+"th iterator is finished");
job.waitForCompletion(true);
}
for(int i=0;i<pathList.size()-1;i++){
Configuration conf=new Configuration();
Path path=new Path(pathList.get(i));
FileSystem fs=path.getFileSystem(conf);
fs.delete(path,true);
}
} } package org.apache.hadoop.PageRank; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; public class MyMapper extends Mapper<LongWritable, Text, Text, Text> { public void map(LongWritable ikey, Text ivalue, Context context)
throws IOException, InterruptedException {
String[] line=ivalue.toString().split(":");
String content=line[1];
int num=content.split(",").length;
String word=line[0].split(" ")[0];
String alaph=line[0].split(" ")[1];
context.write(new Text(word),new Text("content:"+content));
for(String w:content.split(",")){
context.write(new Text(w),new Text("link:"+word+" "+String.valueOf(1.0/num)));
context.write(new Text(w),new Text("alaph:"+word+" "+alaph));
}
} } package org.apache.hadoop.PageRank; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; public class MyReducer extends Reducer<Text, Text, Text, Text> { public void reduce(Text _key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
// process values
Configuration conf=context.getConfiguration();
double factor=Double.parseDouble(conf.get("factor"));
int num=Integer.parseInt(conf.get("num")); Map<String,Double> alaph=new HashMap<String,Double>();
Map<String,Double> link=new HashMap<String,Double>(); String content="";
for (Text val : values) {
String[] line=val.toString().split(":");
if(line[0].compareTo("content")==0){
content=line[1];
}else {
String[] s=line[1].split(" ");
double d=Double.parseDouble(s[1]);
if(line[0].compareTo("alaph")==0){
alaph.put(s[0],d);
}else if(line[0].compareTo("link")==0){
link.put(s[0],d);
}
}
}
double sum=0;
for(Map.Entry<String,Double> entry:alaph.entrySet()){
sum+=link.get(entry.getKey())*entry.getValue();
} System.out.println(" ");
System.out.println("sum is "+sum);
System.out.println(" ");
double result=factor*sum+(1-factor)/num;
context.write(_key,new Text(String.valueOf(result)+":"+content)); } }
def f(x):
links=x[1][0]
rank=x[1][1]
n=len(links.split(","))
result=[]
for s in links.split(","):
result.append((s,rank*1.0/n))
return result file="hdfs://10.107.8.110:9000/spark_test/pagerank.txt" data=sc.textFile(file)
link=data.map(lambda x:(x.split(":")[0],x.split(":")[1]))
n=data.count()
rank=link.mapValues(lambda x:1.0/n) for i in range(10):
rank=link.join(rank).flatMap(f).reduceByKey(lambda x,y:x+y).mapValues(lambda x:0.15/n+0.85*x)









PageRank在Hadoop和spark下的实现以及对比的更多相关文章
- Ubuntu14.04或16.04下Hadoop及Spark的开发配置
对于Hadoop和Spark的开发,最常用的还是Eclipse以及Intellij IDEA. 其中,Eclipse是免费开源的,基于Eclipse集成更多框架配置的还有MyEclipse.Intel ...
- hadoop+tachyon+spark的zybo cluster集群综合配置
1.zybo cluster 架构简述: 1.1 zybo cluster 包含5块zybo 开发板组成一个集群,zybo的boot文件为digilent zybo reference design提 ...
- Hadoop与Spark比较
先看这篇文章:http://www.huochai.mobi/p/d/3967708/?share_tid=86bc0ba46c64&fmid=0 直接比较Hadoop和Spark有难度,因为 ...
- 2分钟读懂Hadoop和Spark的异同
谈到大数据框架,现在最火的就是Hadoop和Spark,但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,倒底现在业界都在使用哪种技术?二者间究竟有哪些异同?它们各自解决了哪些问题? ...
- 成都大数据Hadoop与Spark技术培训班
成都大数据Hadoop与Spark技术培训班 中国信息化培训中心特推出了大数据技术架构及应用实战课程培训班,通过专业的大数据Hadoop与Spark技术架构体系与业界真实案例来全面提升大数据工程师 ...
- 安装Hadoop及Spark(Ubuntu 16.04)
安装Hadoop及Spark(Ubuntu 16.04) 安装JDK 下载jdk(以jdk-8u91-linux-x64.tar.gz为例) 新建文件夹 sudo mkdir /usr/lib/jvm ...
- 老李分享:大数据框架Hadoop和Spark的异同 1
老李分享:大数据框架Hadoop和Spark的异同 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...
- hadoop+hive+spark搭建(一)
1.准备三台虚拟机 2.hadoop+hive+spark+java软件包 传送门:Hadoop官网 Hive官网 Spark官网 一.修改主机名,hosts文件 主机名修改 hostnam ...
- 深度:Hadoop对Spark五大维度正面比拼报告!
每年,市场上都会出现种种不同的数据管理规模.类型与速度表现的分布式系统.在这些系统中,Spark和hadoop是获得最大关注的两个.然而该怎么判断哪一款适合你? 如果想批处理流量数据,并将其导入HDF ...
随机推荐
- TexturePacker license Key免费获取方式
TexturePacker是一款功能非常强大的图片制作工具.是一款付费软件,但是TexturePacker的作者Andreas Löw先生也给出获得免费key 的方法...大家可以到这个网站去申请 h ...
- Lua基础(一)
1.Lua中有8个基本类型分别为:nil.boolean.number.string.userdata.function.thread和table 2.Lua中的表达式包括数字常量.字符串常量.变量. ...
- 为什么总是要求使用position的时候父类是relative
当我们使用position的时候,一般来说外面的框架是使用relative,里面的元素使用absolute的,这里有两个注意点: 1.如果我们不给父类一个position属性的时候,那么子元素就会以b ...
- js播放器
<object?id="player"?height="64"?width="260"?classid="CLSID:6BF ...
- PL/SQL Developer StringBuffer 专用复制
;PL/SQL Developer SpecialCopy definition;<LINE_1> for first line;<LINE_*> for all other ...
- java 继承与多态
Example5_11.java class 动物 { void cry() { } } class 狗 extends 动物 { void cry() { System.out.println(&q ...
- CodeForces 696A Lorenzo Von Matterhorn (LCA + map)
方法:求出最近公共祖先,使用map给他们计数,注意深度的求法. 代码如下: #include<iostream> #include<cstdio> #include<ma ...
- aspx基础开始
<%@ Page Language="C#" Debug="true" trace="false" validateRequest=& ...
- Servlet程序开发--取得初始化配置信息
代码: 两个初始化init方法,一起出现的话,有参的才起作用 package org.lxh.servletdemo ; import java.io.* ; import javax.servlet ...
- WiresShark 使用方法
Wireshark(前称Ethereal)是一款功能强大的网络抓包分析工具,在我的工作中是不可或缺的一部分工具,往往在网络出现异常时,查看网络中的数据包,会豁然开朗.1.菜单栏 主菜单包括以下几个项 ...