《云计算与大数据--配套习题(徐小龙) 第16章 分布式内存计算平台Spark-习题答案.docx》由会员分享,可在线阅读,更多相关《云计算与大数据--配套习题(徐小龙) 第16章 分布式内存计算平台Spark-习题答案.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第16章 分布式内存计算平台Spark习题16.1 选择题1、Spark是Hadoop生态(B )组件的替代方案。A. HadoopB. MapReduceC. YamD. HDFS2、以下(D )不是Spark的主要组件。B. DriverB. SparkContextC. CIusterManagerD. ResourceManager3、Spark 中的 Execulor 是( A )。A.执行器 B.主节点C.从节点D.上下文4、下面(D )不是Spark的四大组件之一。C. Spark StreamingB.Spark MLlibD. Spark GraphXD.Spark R5、S
2、cala属于哪种编程语言(C ).A.汇编语言B.机器语言C.函数式编程语言D.多范式编程语言6、Spark组件中,SparkContext是应用的(C ),控制应用的生命周期。A.主节点B.从节点C.上下文D.执行器7、以下(D )不是Spark的主要组件。A.DAGSchedulerB.TaskSchedulerE. SparkContextD.MultiScheduler8、Spark 组件中,CIusterManager 是(BA.从节点B.主节点C.执行器D.上下文9、关于Spark中的RDD说法不正确的选项是(B )。A.是弹性分布式数据集B.是可读可写分区的集合C.存在容错机制D
3、.是Spark中最基本的数据抽象10、GraphX的BSP计算模型中,一个超步中的内容不包括(C )。A.计算B.消息传递C.缓存D.整体同步点填空题1、内存计算主要用于处理(数据密集型)的计算任务,尤其是数据量极大且需要实时分析处理的应用。2、Ignite是一个可扩展的、(容错性好的)分布式内存计算平台。3、RDD通过一种名为( 血统 )的容错机制进行错误的时的数据恢更。4、数据分析栈 BDAS 包括( Spark SQL )、( Spark Streaming )、 (Spark GraphX )、( MLlib )四个局部。5、Spark Streaming是建立在Spark上的( 实时
4、计算 )框架,提供了丰富的API、基 于内存的高速执行引擎,用户可以结合流式、批处理进行交互式查询应用16.3简答题|、在硬件、软件、应用与体系等方面,内存计算有哪些主要特性? 答: 在硬件方面,需要大容量的内存,以便尽量将待处理的数据全部存放在内存中,内 存可以是单机内存或分布式内存,且内存要足够大。 在软件方面,需要有良好的编程模型和编程接口。 在应用方面,主要面向数据密集型应用,数据规模大、对实时处理性能要求高。 在体系方面,需要支持并行处理数据。2、请与MapReduce相比,Spark的优势有哪些? 答: 中间结果可输出。基于M卯Reduce的计算模型会将中间结果序列化到磁盘上,而
5、Spark将执行模型抽象为通用的有向无环图,可以将中间结果缓存在内存中。 数据格式和内存布局.Spark抽象出分布式内存存储结构RDD,用于进行数据存储。 Spark能够控制数据在不同节点上的分区,用户可以自定义分区策略。 执行策略。M叩Reduce在数据Shuffle之前总是花费大量时间来排序,Spark支持 基于Hash的分布式聚合,Spark默认Shuffle已经改为基于排序的方式。 任务调度的开销。当MapReduce上不同的作业在同一个节点运行时,会各自启动 一个Java虚拟机(Java Virtual Machine, JVM); Spark同一节点的所有任务都可 以在一个JVM上
6、运行。 编程模型。MapReduce仅仅提供了 M叩和Reduce两个计算原语,需要将数据处理 操作转化为Map和Reduce操作,在一定程度增加了编程难度:Spark那么提供了丰 富的输出处理算子,实现了分布式大数据处理的高层次抽象。 统一数据处理。Spark框架为批处理(Spark Core)、交互式(Spark SQL)流式(Spark Streaming机器学习(MLlib)、图计算(GraphX)等计算任务提供一个统一的数 据处理平台,各组件间可以共享数据。3、请描述Pregel计算模型的缺点或局限。答: 在图的划分上,采用的是简单的Hash方式,这样固然能够满足负载均衡,但Hash
7、 方式并不能根据图的连通特性进行划分,导致超步之间的消息传递开销影响性能。 简单的Checkpoint机制只能将状态恢复到当前超步的几个超步之前,要到当前超 步还需要重复计算。BSP计算模型本身有其局限性,整体同步并行对于计算速度快 的Worker,长期等待的问题无法解决。 由于Pregel目前的计算状态都是常驻内存的,对于规模继续增大的图处理可能会 导致内存缺乏。4、请简要描述函数式编程中尾递归的含义。答:尾递归是递归的一种优化方法。递归的空间效率很低,当递归深度很深时,容易产生栈 溢出的情况。尾递归就是将递归语句写在函数的最底部,这样在每次调用尾递归时,就不需 要保存当前状态值,可以直接把
8、当前的状态值传递给下次一次调用,然后清空当前的状态。 占用的栈空间就是常量值,不会出现栈溢出的情况。16.4解答题1、根据用户手机上网的行为记录,基于Spark设计程序来分别统计不同设备的用户使用的 上行总流量以及卜.行总流量。其中,数据记录的字段描述如卜。序号字段字段类型描述0reportTimelong记录报告时间戳1deviceldString手机号码2upPackNumlong上行数据包数,单位:个3down Pack Numlong下行数据包总数,单位:个数据文件的具体内容(一局部)如下:77e3c9e 1811d4fb291 d()d9bbd456bb4b 7997611496(9
9、2ecfBe076d44b89f2d070fb Idf7l9795291890923de7d6514fl d4ac790c630fa63d8d0be5702950228dd382d2a20464a74hbb7414e429ae452 2042893467bb2956150d6741 df875fbcca76ae9e7c5199457706答:Stcpl:将SparkConf封装在一个类中。import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaSparkContext;public class ComniSp
10、arkContext public static JavaSparkContext getsc()SparkConfsparkConfnewSparkConf().sctAppNamc(CoinmSparkContcxt).sctMastcr(local); return new JavaSparkContext(sparkConf);)Step2:自定义数据类型Loginfo import java.io.Serializable;public class Loglnfb implements Serializable private long timeStamp;private long
11、upTraffic;private long downTraffic;public long getTimeStampO return timeSiamp;public void setTimeStame(long timeStame) this.timcStamp = timeStame;)public long ge(UpTrafflc() return upTraffic;)public void sctUpTraffic(long upTraffic) Ihis.upTraffic = upTraffic;public long getDownTrafficO return downT
12、raffic;)public void se(DownTrafflc(long downTrafflc) this.downTraffic = downTraffic;Ipublic Loglnfo()public Loglnfo(long timeStame, long upTraffic, long downTraffic) this.timeStainp = timeStame;this.upTraffic = upTraffic; this.downTraffic = downTraffic;Step3 :自定义key排序类LogSort import scala.Serializab
13、le;import scala.niath.Ordered;public class LogSort extends Loginfb implements Ordered , Serializable private long timeStamp;private long upTraffic;private long downTraffic;Overridepublic long ge(TiineStamp() return timeStamp;)public void selTimcStamp(long timcStamp) this.timeStamp = limeStamp;IOverr
14、idepublic long gctUpTrafficO return upTraffic;Overridepublic void setUpTraffic(long upTraffic) this.upTraffic = upTraffic;)Ovcrridcpublic long ge(DovvnTraffic() return downTraffic;I()verridcpublic void setDownTraffic(long downTraffic) this.downTraffic = downTraffic;)public LogSorl()public LogSort(lo
15、ng timeStamp. long upTraffic, long downTraffic) this.timeStamp = timcStamp;this.upTraffic = upTraffic;this.downTraffic = downTraffic;public in( compare(LogSort (hat) int comp = Long.valueOf(this.getUpTraffic() pareTo(that.getUpTraffic();if (comp = 0)comp = Long.valueOf(this.getDownTraffic() parelb(t
16、ha(.getDownTraffic(); if (comp = 0)comp = Long.valueOf(this.getTinieStamp() pareTo(that.getTimeStanip();)return comp;)public boolean $lcss(LogSort that) return false;Ipublic boolean $greater(LogSort that) return false;)public boolean $less$eq(LogSort that) return false;)public boolean $grcatcr$cq(Lo
17、gSort that) return false;)public int compareTo(LogSort that) int comp = Long.valueOf(his.getUpTraffic() pareTo(that.getUpTraff,ic();if (comp = 0)comp = Long.valueOf(this.getDovnTraffic().coinpareTo(that.getDownTraffic(); )if (comp = 0)comp = Long.valueOf(this.getTimeSlamp().coinpareTo(that.getTimeS(
18、amp();)return comp;)Stcp4:定义主类import com.kfk.spark inon inSparkContext;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.Function2;import org.apache.spark.api.java.function
19、.PairFunction;import scala.Tuple2;import java.util.List;public class LogApp public static JavaPairRDD mapToPairValues(JavaRDD rdd)rdd .mapToPa ir(newrdd .mapToPa ir(newJavaPairRDD mapToPairRddPairFunction() public Tuple2 call(String line) throws Exception long timeSiamp = Long.parseLong(line.split(,
20、t,)0);String diviceld = String. valueOf(line.spIit(t) 1 );long upTraffic = Long.parseLong(line.split(Mt)2);long downTraffic = Long.parseLong(line.split(t)3);Loginfo loglnfb = new LogInfo(timeStamp,upTraffic,downTraffic);return new Tuple2(diviceld,loginfo););return mapToPairRdd;publicstaticJavaPairRD
21、DreduceByKeyValues(JavaPairRDD mapPairRdd)JavaPairRDD reduceByKcyRdd = mapPairRdd.reduceByKcy(newFunc(ion2() public Loginfo calKLoglnfb vl, Loglnfb v2) throws Exception long timeSiamp = Math.min(v 1 .getTimeStampO, v2.getTimeStamp();long upTraffic = vl .getUpTraffic() + v2.getUpTraffic();long downTr
22、affic = v I .getDownTraffic() + v2.getDownTraffic();Loginfo loginfo = new Loglnfb();loglnfo.setTimeStame(timeStamp);loglnfo.sctUpTraffic(upTraffic);loglnfo.setDownTraffic(downTrafnc);return loglnfb;0;return reduceByKeyRdd;publicpublicstaticJavaPairRDDmapToPairSortValucs(JavaPairRDD aggrcgatcByKcyRdd
23、) JavaPairRDDmapToPairSortRdd=aggregateByKeyRdd.mapToPair(new PairFunctionTuple2, LogSort, String() | public Tuple2 call(Tuple2 stringLoginfoTuple2) throws Exception (String diviceld = stringLogInfoTuplc2._l;long timeStamp = stringLogInfbTuple2._2.getTimeStamp();long upTraffic = stringLogInfoTuple2.
24、_2.getUpTraffic();long downTraffic = stringLogInfbTuple2._2.getDownTraffic();LogSort logSort = new LogSort(timcStamp,upTraffic,downTraffic);return new Tuplc2(logSort,diviceld);0;return mapToPairSortRdd;)public static void main(String args) JavaSparkContcxt sc = CommSparkContcxt.gctsc();JavaRDD rdd =
25、 sc.textFile( 文件路径);/ rdd map() - JavaPairRDD niapToPairRdd = m叩ToPairValues(rdd);/niapToPairRddrcduccByKeyO-JavaPairRDDreduceByKeyRdd=reduceByKeyValues(inapToPairRdd);/ reduceByKeyRdd map() - JavaPairRDDmapToPairSortRdd=mapToPairSortValucs(rcduccByKcyRdd);/ sortByKeyJavaPairRDDsortByKey Values=mapT
26、oPairSortRdd.sortByKey(false);/TopNListTuple2LogSort,String sortKeyList = sortByKeyValues.take( 10);for (Tuplc2 logSortStringTuplc2 : sortKeyList) System.oul.println(logSorlStringTuple2._2 +:+logSortStiingTuple2._l.getUpTraffic() + : + logSortStringTuple2._l.getDownTraffic();St印5:使用maven将程序打包成jar包St
27、ep6:将数据文件上传到hdfsStcp7:运行jar包,进行SPARK_HOME/bin目录卜.,执行下面的操作./spark-submit -class LogApp -master spark:/master:7077 jar 包位置 hdfs 文件地址 结 果输出的地址Step8:查看结果efde893d9c254e549f740d9613b3421c : 1036288 : 629025 84da30d2697042ca9a6835f6ccec6024 : 930018 : 737453 94055312e 11 c464d8bb 16f21 c4d607c6 : 827278 :
28、897382 c2a24d73d77d4984a 1 d88ea3330aa4c5 : 826817: 943297 6c535645436f4926bc 1 cc6c823dfd9d2 : 806761 : 613670 92f78b79738948bea0d27178bbcc5f3a : 761462 : 567899 lcca6591b6aa4033a)90154db54a8087 : 750069 : 696854 f92ecf8e076d44b89f2d070fbldt7l97 : 740234 : 779789 e6164ce7a908476a94502303328b26e8 : 722636 : 513737 537ec845bb4b405d9bf13975e4408b41 : 709()45 : 642202