单机运行速度比集群运行速度快,求解释这个这个应用运行在集群运行这么耗时间的原因

问题描述

由于处理数据的需求,我写了一个简单的spark应用处理数据,本想着处理速度应该有很大的提高,然而结果令我难以接受!1spark集群运行条件:3个work节点,Hdfs文件管理系统,数据输入2.5G左右,运行时间大约8分钟。spark应用程序如下:packageexamples;importjava.util.List;importjava.util.regex.Pattern;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.mapred.TextOutputFormat;importorg.apache.spark.SparkConf;importorg.apache.spark.api.java.JavaPairRDD;importorg.apache.spark.api.java.JavaRDD;importorg.apache.spark.api.java.JavaSparkContext;importorg.apache.spark.api.java.function.Function;importorg.apache.spark.api.java.function.PairFunction;importscala.Tuple2;importscala.Tuple6;importcom.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text;publicclassCompression{privatestaticfinalPatternSPACE=Pattern.compile("");publicstaticvoidmain(String[]args)throwsException{if(args.length<4){System.err.println("Usage:Compression<file><interval><slice><type>");System.exit(1);}finalIntegerinterval=Integer.valueOf(args[1]);SparkConfconf=newSparkConf().setAppName("Compression"+args[3]);JavaSparkContextctx=newJavaSparkContext(conf);JavaRDD<String>lines=ctx.textFile(args[0]);JavaPairRDD<Integer,Tuple2<Integer,Double>>key_v=lines.mapToPair(newPairFunction<String,Integer,Tuple2<Integer,Double>>(){@OverridepublicTuple2<Integer,Tuple2<Integer,Double>>call(Strings){String[]x=SPACE.split(s);Integerorder=Integer.valueOf(x[0]);Integerk=order/interval;Tuple2<Integer,Double>v=newTuple2<Integer,Double>(order%interval,Double.valueOf(x[1]));returnnewTuple2<Integer,Tuple2<Integer,Double>>(k,v);}});JavaPairRDD<Integer,Iterable<Tuple2<Integer,Double>>>segments=key_v.groupByKey();//JavaPairRDD<Integer,Iterable<Tuple2<Integer,Double>>>segments=key_v.distinct();JavaPairRDD<Integer,Tuple6<Double,Double,Double,Double,Double,Double>>compressdata=segments.mapValues(newFunction<Iterable<Tuple2<Integer,Double>>,Tuple6<Double,Double,Double,Double,Double,Double>>(){@OverridepublicTuple6<Double,Double,Double,Double,Double,Double>call(Iterable<Tuple2<Integer,Double>>list)throwsException{//TODOAuto-generatedmethodstubDoublemax=Double.MIN_VALUE;Doublemin=Double.MAX_VALUE;Doubletotal=0.0;Doublestart=0.0;Doubleend=0.0;Doubleavg=0.0;Doubles=0.0;Integerlen=0;for(Tuple2<Integer,Double>v:list){len++;if(v._1.equals(0))start=v._2;total+=v._2;if(v._2>max)max=v._2;if(v._2<min)min=v._2;}avg=total/len;Doubletemp=0.0;len-=1;for(Tuple2<Integer,Double>v:list){if(v._1.equals(len))end=v._2;temp+=(v._2-avg)*(v._2-avg);}s=Math.sqrt(temp/len);returnnewTuple6<Double,Double,Double,Double,Double,Double>(start,end,max,min,avg,s);}});compressdata.saveAsHadoopFile("/SparkTest/Compression/result"+args[3],Text.class,IntWritable.class,TextOutputFormat.class);System.exit(0);}}

2单机运行,时间大约在2分钟左右packagedeal;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjavax.xml.crypto.Data;publicclassCompression{publicstaticvoidmain(String[]args)throwsIOException{//TODOAuto-generatedmethodstubif(args.length<3){System.out.println("In,out,intervaln");System.exit(0);}Filerecord=newFile("records.txt");BufferedWriterrw=newBufferedWriter(newFileWriter(record,true));Datedates=newDate();DateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Stringtimestart=format.format(dates);Filefiler=newFile(args[0]);Filefilew=newFile(args[1]);Integerinterval=Integer.valueOf(args[2]);BufferedReaderreader=null;BufferedWriterwriter=null;try{reader=newBufferedReader(newFileReader(filer));writer=newBufferedWriter(newFileWriter(filew));StringtempString=null;intline=0;onedataone=null;while((tempString=reader.readLine())!=null){String[]lines=tempString.split("");if(line%interval==0){if(one!=null){one.calculate();writer.write(one.ToString());}one=newonedata(line/interval);}one.list.add(Double.valueOf(tempString.split("")[1]));line++;}reader.close();writer.close();}catch(IOExceptione){e.printStackTrace();}finally{if(reader!=null){try{reader.close();}catch(IOExceptione1){}}}Datedatee=newDate();Stringtimeend=format.format(datee);longcha=datee.getTime()-dates.getTime();rw.write(args[0]+"t"+timestart+"t"+timeend+"t"+cha+"n");rw.close();}}classonedata{publicArrayList<Double>list=newArrayList<Double>();Doublemax=Double.MIN_VALUE;Doublemin=Double.MAX_VALUE;Doublestart=0.0;Doubleend=0.0;Doubleavg=0.0;Doubles=0.0;Integerorder=0;publiconedata(Integero){//TODOAuto-generatedconstructorstuborder=o;}publicvoidcalculate(){Doublesum=0.0;start=list.get(0);end=list.get(list.size()-1);for(Doubledouble1:list){sum+=double1;if(max<double1)max=double1;if(min>double1)min=double1;}avg=sum/list.size();Doubletemp=0.0;for(Doubledouble1:list){temp+=(double1-avg)*(double1-avg);}s=Math.sqrt(temp/list.size());}publicStringToString(){returnorder+"t("+start+","+end+","+max+","+min+","+avg+","+s+")n";}}

求各位大牛解释为啥spark集群运行时消耗的时间比单机的时候多那么多?谢谢!

解决方案

解决方案二:
是不是同样的代码?如果不是同样的代码,不好比较.
解决方案三:
处理逻辑基本都是一样的,单机的代码是正常的Java写的处理数据的代码。集群运行的代码是Spark应用的代码。
解决方案四:
集群怎么配置的处理的数据量有多大
解决方案五:
集群处理大数据有优势,集群启动分配任务是需要时间的

时间: 2024-09-20 19:18:08

单机运行速度比集群运行速度快,求解释这个这个应用运行在集群运行这么耗时间的原因的相关文章

poj3295 运行输入之后就崩溃了 求大神看看 英汉题意如下

问题描述 poj3295 运行输入之后就崩溃了 求大神看看 英汉题意如下 Description WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s, t. A Well-formed formula (WFF) is any string of these s

acm-c语言 ACM求绝对值为什么是错误答案,明明可以运行啊

问题描述 c语言 ACM求绝对值为什么是错误答案,明明可以运行啊 #include ""stdio.h""#include ""math.h"" int main(){ float x; for(;scanf(""%f""&x)!=EOF;) printf(""%.2fn""fabs(x));} 解决方案 题目要求是循环输入数据循环打印么?

求各大神帮忙,有关html代码运行的小问题?

问题描述 求各大神帮忙,有关html代码运行的小问题? 我在用wordpad++写了html代码后,点击默认浏览器运行,却总是没有任何反应.我已经将默认浏览器改为谷歌浏览器了,只是默认的是搜狗,那个运行选项里面貌似没有搜狗的???? 解决方案 代码呢,没反应肯定是你脚本编写有问题了,或者使用到了null对象 f12打开谷歌开发工具看报什么错误 解决方案二: 那你这个代码是以什么格式保存的. 解决方案三: .html 文件保存格式为html 代码没错的话就是格式不对

新手入门-新手求问为什么我的记事本写的程序运行不起来T_T

问题描述 新手求问为什么我的记事本写的程序运行不起来T_T Java初学者用记事本写的程序用cmd运行不起来,能翻译成class但是就是输出不了,但是用eclipse可以T_TT_T 解决方案 不是用cmd运行的啊,你编译后的程序放在tomcat下运行了吗 解决方案二: 用java运行 参考 http://ivan0513.iteye.com/blog/982445 ,看下环境变量 你说运行不了,请贴出截图和错误信息. 解决方案三: 你你命令行写对了吗 解决方案四: java 类名(不能带.cl

冒泡排序-java入门新人求代码:html中如何让一个提交按钮运行十个空格。

问题描述 java入门新人求代码:html中如何让一个提交按钮运行十个空格. 是这样,我做一个网页版的冒泡排序,对10个数字进行冒泡排序,每个数字占一个空格(表格), 然后设定一个提交按钮,点击这个按钮后可以对这十个空格的数字进行冒泡排序. 请不吝指教,谢谢. 要完整的代码,谢谢. 解决方案 可以这样写 ......复制十遍 用个form表单包着,这样就可以随机让别人输入10个数了,再加个ajax点击事件,这样点击它后台通过request.getparametervalues("shuzhi&q

c-各位大神,生命游戏,代码有点长,运行输入之后总是崩溃,求大神看一下

问题描述 各位大神,生命游戏,代码有点长,运行输入之后总是崩溃,求大神看一下 #define _CRT_SECURE_NO_WARNINGS //关闭安全检查 #include #include #define hs 3 //这能改行数 #define ls 3 //这能改列数 #define tiaojian1 2 //这里可改周围几个细胞时存活 #define tiaojian2 3 //这里可改周围几个细胞时繁殖 int world[hs][ls] = { 0 }; void shuru(

java-androidstudio运行时总是报错:求大神指教

问题描述 androidstudio运行时总是报错:求大神指教 报的错:Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:Program Files (x86)Javajdk1.7.0binjava.exe'' finished

c++-运行不成功,这是求点到直线的 距离

问题描述 运行不成功,这是求点到直线的 距离 #include"iostream.h" #include"math.h" class line; class point() { private: double x,y; public: point (double x1,double y1) { x=x1; y=y1; } friend double dist(point,line); }; class line() { private: double a,b,c;

进制转换-为什么我的程序运行不了。。。求大神帮忙

问题描述 为什么我的程序运行不了...求大神帮忙 package 跑; import java.awt.*;import java.awt.event.*; import javax.swing.*;import javax.swing.event.*; public class JinZhi extends JFrame implements ActionListener{ JLabel jl1jl2jl3jl4;JTextField jt1jt2jt3jt4;public JinZhi(){