Spark优化之一:分布式下的map操作是闭包
例如对一个JavaPairRDD<String, String>做遍历操作,常见的,我们可以通过先通过collect()操作将它转化为Map对象再进行遍历,也可以使用Spark提供的mapToPair方法进行遍历。然而两者的性能差距是非常显著的。
仅仅遍历1500条长度为155的序列,前者需要消耗6s,后者只需要消耗不到1s的时间。这说明,将Spark内存对象转化为普通Java对象有时会产生巨大的开销!
这里需要提到的是,我依旧还没有源代码,过年争取看一下。
贴上两个遍历操作的源代码:
第一种Map遍历:
List<String> s_key = new ArrayList<>();
fastaDataJavaPairRDD.collect().forEach(a -> {
s_key.add(a._1);
});
fastaDataJavaPairRDD = null;
List<String> s_out1 = new ArrayList<>();
List<String> s_out2 = new ArrayList<>();
fastaMSADataJavaPairRDD.collect().forEach(a -> {
s_out1.add(a._1);
s_out2.add(a._2);
});
fastaMSADataJavaPairRDD = null;
System.out.println((System.currentTimeMillis()-startTime)+"ms");
第二种mapToPair遍历:
List<String> s_key = new ArrayList<>();
fastaDataJavaPairRDD.mapToPair(
(PairFunction<Tuple2<String, String>, String, String>) stringTuple2 -> {
s_key.add(stringTuple2._1);
return new Tuple2<>(null, null);
}
);
fastaDataJavaPairRDD = null;
List<String> s_out1 = new ArrayList<>();
List<String> s_out2 = new ArrayList<>();
fastaMSADataJavaPairRDD.mapToPair(
(PairFunction<Tuple2<String, String>, String, String>) stringTuple2 -> {
s_out1.add(stringTuple2._1);
s_out2.add(stringTuple2._2);
return new Tuple2<>(null, null);
}
);
fastaMSADataJavaPairRDD = null;
System.out.println((System.currentTimeMillis()-startTime)+"ms");
但是,也请注意,分布式下的map,mapToPair等操作都是闭包的,也要注意这些操作内部调用的类和方法都必须是序列化后的,否则是线程不安全的。Spark在操作时,将map等算子内部的操作代码拷贝到每台从节点,从节点进行分别的操作,因此内部不应该出现线程不安全的类和方法。需要注意。
Spark优化之一:分布式下的map操作是闭包的更多相关文章
- spark优化参数调节和故障参数调节
1:“物尽其用”,但给spark分配多个机器后,先需配置spark-submit shell如下: /usr/local/spark/bin/spark-submit \ --class com.sp ...
- 【spark】spark应用(分布式估算圆周率+基于Spark MLlib的贷款风险预测)
注:本章不涉及spark和scala原理的探讨,详情见其他随笔 一.分布式估算圆周率 计算原理:假设正方形的面积S等于x²,而正方形的内切圆的面积C等于Pi×(x/2)²,因此圆面积与正方形面积之比C ...
- 聊聊分布式下的WebSocket解决方案
前言 最近王子自己搭建了个项目,项目本身很简单,但是里面有使用WebSocket进行消息提醒的功能,大体情况是这样的. 发布消息者在系统中发送消息,实时的把消息推送给对应的一个部门下的所有人. 这里面 ...
- spark优化项
一.Shuffle优化项 1.Shuffle优化配置 - spark.shuffle.file.buffer 默认值:32k 参数说明:该参数用于设置shuffle write task的Buffer ...
- lucene之排序、设置权重、优化、分布式搜索(转)
lucene之排序.设置权重.优化.分布式搜索(转) 1. 基本应用 using System;using System.Collections.Generic;using System.Text;u ...
- spark优化设置
->>>配置参数优化 SparkConf sc = new SparkConf().setAppName("com.sp.test.GroupTop3").set ...
- (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子
本篇先介绍HBase在伪分布式环境下的安装方式,然后将MapReduce编程和HBase结合起来使用,完成WordCount这个例子. HBase在伪分布环境下安装 一. 前提条件 已经成功地安装 ...
- Spark Streaming之六:Transformations 普通的转换操作
与RDD类似,DStream也提供了自己的一系列操作方法,这些操作可以分成四类: Transformations 普通的转换操作 Window Operations 窗口转换操作 Join Opera ...
- spark on yarn模式下内存资源管理(笔记1)
问题:1. spark中yarn集群资源管理器,container资源容器与集群各节点node,spark应用(application),spark作业(job),阶段(stage),任务(task) ...
随机推荐
- java设计模式之责任链模式以及在java中作用
责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个 ...
- Chrome 与 Firefox-Dev 的 DevTools
不管是做爬虫还是写 Web App,Chrome 和 Firefox 的 DevTools 都是超常用的,但是经常发现别人的截图有什么字段我找不到,别人的什么功能我的 Chrome 没有,仔细一搜索才 ...
- HDU 4582 DFS spanning tree(DFS+贪心)(2013ACM-ICPC杭州赛区全国邀请赛)
Problem Description Consider a Depth-First-Search(DFS) spanning tree T of a undirected connected gra ...
- Python两个内置函数——locals 和globals (学习笔记)
这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...
- nopcommerce商城系统--技术与系统需求
原址:http://www.nopcommerce.com/technologysystemrequirements.aspx 在这里,我们将着眼于nopCommerce的系统要求.为了运行nopCo ...
- poi excel导出 xssf 带下拉框
需求:导出之后带有二级级联的下拉框.(类似于省市). 最初的思路是怀疑是不是数组内串太多了,导出之后的excel有36行,调试的误区在于刚开始认为对行数有限制,后自己写了一个测试类,才发现不是行数,而 ...
- systemtap没找到函数变量
为啥systemtap没找到函数 hon@station6:~/codebox/stap/net$ sudo stap -L 'kernel.function("sock_recvmsg_n ...
- could not read column value from result set:
错误描述: INFO [http-apr-8080-exec-26] (NullableType.java:203) - could not read column value from result ...
- 建议 里面的sql查找单列 外面的sql查找所有列 这样方便查找数据
- windows curl 命令
windows 64 curl 命令的使用 https://blog.csdn.net/qq_27093465/article/details/53545693 curl命令可以通过命令行的方式,执行 ...