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 ...
随机推荐
- C++随机崩溃捕捉处理
1. 会引起异常的几个原因(主要记录目前遇到过的几个问题) 程序读取了无效的内存地址 堆栈的溢出,比如无限循环导致那段内存溢出,比如把size为20的缓存拷贝到size为10的缓存块等 无法申请到有效 ...
- table边框设置
一.表格的常用属性基本属性有:width(宽度).height(高度).border(边框值).cellspacing(表格的内宽,即表格与tr之间的间隔). cellpadding(表格内元素的间隔 ...
- 包(package)
防止文件重名,包体现在文件夹上.包必须建立文件夹. 类名的全称是:包名.类名 javac xx.java 命令编译的时候,不会建立对应的文件夹, 建立包对应的文件夹的命令,要用 javac -d ...
- hdu 3342 Legal or Not(拓扑排序)
Legal or Not Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- LightOJ 1341 Aladdin and the Flying Carpet(整数拆分定理)
分析:题目并不难理解,就是一些细节上的优化需要我们注意,我在没有优化前跑了2000多MS,优化了一些细节后就是400多MS了,之前还TLE了好几次. 方法:将整数拆分为质因子以后,表达为这样的形式,e ...
- PAT (Advanced Level) 1113. Integer Set Partition (25)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- PAT (Advanced Level) 1094. The Largest Generation (25)
简单DFS. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...
- 利用htmlunit登陆带验证码图片的网站
http://htsoft.org/html/y2011/822_using-htmlunit-landing-site-with-captcha-image.html 利用htmlunit登陆带验证 ...
- Codeforces Round #363 (Div. 2) C. Vacations(DP)
C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- gen_grant_sel.sql
set echo off feedback off verify off pagesize 0 linesize 120 define v_grantee=&1 define v_grant_ ...