大数据平台与编程第5章 Spark分布式计算框架.pptx
第5章Spark分布式计算框架;?Spark背景;Spark背景;Spark背景;;;JVM和任务管理优化:
Spark基于JVM(JavaVirtualMachine)进行了优化。Hadoop每次MapReduce操作,启动一个Task便会启动一次JVM,这是基于进程的操作;
而Spark每次MapReduce操作是基于线程的,只在启动Executor启动一次JVM,内存的Task操作是在线程复用的。
每次启动JVM的时间可能就需要几秒甚至十几秒,那么当Task多了,Hadoop就比Spark花了更多时间。;;;;?Spark生态系统;Spark生态系统;;(3)Spark引入弹性分布式数据集(ResilientDistributedDatasets,RDD),实现了应用任务的调度、RPC、序列化和压缩,并为运行在其上层的组件提供API,另外这些对象集合是弹性的,若有部分数据集丢失,它可根据“血统”对丢失部分进行重建,提高数据的容错性。
(4)Spark优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘,这极大地减少了访问磁盘次数,提升了任务执行的效率,使得Spark适用于实时计算、流式计算等场景。;;;;;Spark生态系统;;?Spark运行架构;Spark运行架构;;;;;;;;;;;;;;;;;;;;;;;?程序示例;程序示例;程序示例;程序示例;程序示例;;//将每一个单词,映射为(单词,1)的这种格式
JavaPairRDDString,Integerpairs=words.mapToPair(newPairFunctionString,String,Integer(){
privatestaticfinallongserialVersionUID=1L;
@Override
publicTuple2String,Integercall(Stringword)throwsException{
returnnewTuple2String,Integer(word,1);
}
});
//以单词作为key,统计每个单词出现的次数
JavaPairRDDString,IntegerwordCounts=pairs.reduceByKey(newFunction2lnteger,Integer,Integer(){
privatestaticfinallongserialVersionUID=1L;
@Override
publicIntegercall(Integerv1,Integerv2)throwsException{
returnv1+v2;
}
});
//输出WordCount结果
wordCounts.foreach(newVoidFunctionTuple2String,Integer(){
privatestaticfinallongserialVersionUID=1L;
@Override
publicvoidcall(Tuple2String,IntegerwordCount)throwsException{
System.out.println(wordCount);
}
});
sc.close();
}};;程序示例;程序示例;程序示例;?本章小结;;?本章习题;