记一次Spark集群查询速度变慢的问题调查

现象:针对某张表(下文中用A表代替)的查询速度慢了6s

 

 

 

简单介绍一下系统的架构:Spark + Tachyon + glusterfs+mesos,其中glusterfs负责tachyon数据的持久化,Sparktachyon上加载数据,mesos负责Spark任务调度

 

通过对比分析Spark:4040页面提供的任务执行信息发现,A表的Spark任务中,出现了Locality LevelANY的,这导致后三个任务的起始时间延迟6s,如图.

 

 

简单介绍一下SparkLocality Level

   PROCESS_LOCAL: 是指读取缓存在本地节点的数据

 NODE_LOCAL: 是指读取本地节点硬盘数据

   ANY: 是指读取非本地节点数据

 运行速度上由快到慢 PROCESS_LOCAL > NODE_LOCAL > ANY

 

1.5版本的Spark中引入了两个新的级别NO_PREF RACK_LOCAL

http://spark.apache.org/docs/latest/tuning.html#data-locality

 

书归正传,以上可以分析出,A表是由于Spark任务中出现了读取非本地节点数据导致的。接下来去Tachyonweb页面中看看能否查出蛛丝马迹,进入到A表的Tachyon文件目录层,

发现有的文件分布在node56上,如下图
记一次Spark集群查询速度变慢的问题调查_第1张图片
 

 

原因:由此想起了,在数据导入后我们对mesos集群进行了重新划分,node56只被划分为mesos-master

这就导致node56上的数据需要被其它的mesos-slave跨节点copy数据,由此产生了Locality Level中的any

导致查询速度显著变慢

 

注意: 对集群规模和角色的划分一定要在调整前,考虑到各个方面

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(spark,sparksql,Spark问题调查)