自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 troubleshooting之解决yarn-client模式导致的网卡流量激增问题

Driver到底是什么?     我们写的spark程序,打成jar包,用spark-submit来提交。jar包中的一个main类,通过jvm的命令启动起来。JVM进程,这个进程,其实就是咱们的Driver进程。Driver进程启动起来以后,执行我们自己写的main函数,从new SparkContext()。。。Application-Master?    yarn中的

2017-09-21 23:24:10 585

原创 troubleshooting之解决算子函数返回NULL导致的问题

在算子函数中,返回null//return actionRDD.mapToPair(new PairFunction() {//// private static final long serialVersionUID = 1L;// // @Override// public Tuple2 call(Row row) throws Exception {// return new

2017-09-21 22:38:54 414

原创 troubleshooting之解决各种序列化导致的报错

你会看到什么样的序列化导致的报错?用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么恭喜大家,就碰到了序列化问题导致的报错。虽然是报错,但是序列化报错,应该是属于比较简单的了,很好处理。序列化报错要注意的三个点:1、你的算子函数里面,如果使用到了外部的自定义类型的变量,那

2017-09-21 22:23:32 432

原创 troubleshooting之解决YARN队列资源不足导致的application直接失败

1、YARN队列资源不足导致的application直接失败的 现象      如果说,你是基于yarn来提交spark。比如yarn-cluster或者yarn-client。你可以指定提交到某个hadoop队列上的。每个队列都是可以有自己的资源的。      跟大家说一个生产环境中的,给spark用的yarn资源队列的情况:500G内存,200个cpu core。比如说,某个spa

2017-09-21 21:58:00 2930

原创 troubleshooting之解决JVM GC导致的shuffle文件拉取失败

1、shuffle文件拉取原理图2、JVM GC时,会导致spark作业出现什么问题?比如,executor的JVM进程,可能内存不是很够用了。那么此时可能就会执行GC。minor GC or full GC。总之一旦发生了JVM之后,就会导致executor内,所有的工作线程全部停止,比如BlockManager,基于netty的网络通信。有时会出现的一种情况,非常普

2017-09-21 21:37:31 455

原创 troubleshooting之控制shuffle reduce端缓冲大小以避免OOM

1、rduce端task拉取map端数据的原理图map端的task是不断的输出数据的,数据量可能是很大的。但是,其实reduce端的task,并不是等到map端task将属于自己的那份数据全部写入磁盘文件之后,再去拉取的。map端写一点数据,reduce端task就会拉取一小部分数据,立即进行后面的聚合、算子函数的应用。每次reduece能够拉取多少数据,就由buffer来决定。因

2017-09-21 21:02:12 386

转载 Spark--性能优化之解决数据倾斜

前言继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为《Spark性能优化指南》的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题。数据倾斜调优调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据

2017-09-16 14:02:27 433

转载 Spark---性能调优之资源调优篇

资源调优调优概述在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,

2017-09-16 13:35:38 340

转载 Spark---性能优化之开发篇

在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。Spark主要就是为了让大数据计算作业的执行速度更快、性能更高。然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进行合理的调优,

2017-09-16 13:29:00 362

原创 Spark---Shuffle调优之调节map端内存缓冲与reduce端内存占比

1、map端内存缓冲,reduce端内存占比概述map端内存缓冲,reduce端内存占比;很多资料、网上视频,都会说,这两个参数,是调节shuffle性能的不二选择,很有效果的样子,实际上,不是这样的。以实际的生产经验来说,这两个参数没有那么重要,往往来说,shuffle的性能不是因为这方面的原因导致的但是,有一点点效果的,broadcast,数据本地化等待时长;这两个shuffl

2017-09-16 11:52:52 2092 1

转载 Spark--性能优化之shuffle调优

shuffle调优调优概述大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行调优。但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以及数据倾斜,shuffle调优只能在整个Spark的性能调优中占到一小部分而

2017-09-16 10:53:06 382

原创 Spark---JVM调优之调节executor离堆内存与连接等待时长

1、executor堆外内存有时候,如果你的spark作业处理的数据量特别特别大,几亿数据量;然后spark作业一运行,时不时的报错,shuffle file cannot find,executor、task lost,out of memory(内存溢出);可能是说executor的堆外内存不太够用,导致executor在运行的过程中,可能会内存溢出;然后可能导致后续的stage的

2017-09-15 23:43:51 1848 1

原创 Spark---JVM调优之原理以及降低cache操作的内存占比

1、为什么需要jvm调优?spark的scala代码调用了很多java api。scala也是运行在java虚拟机中的。spark是运行在java虚拟机中的。java虚拟机可能会产生什么样的问题:内存不足??!!我们的RDD的缓存、task运行定义的算子函数,可能会创建很多对象。都可能会占用大量内存,没搞好的话,可能导致JVM出问题。JVM调优(Java虚拟机):JVM相关的参

2017-09-15 22:27:37 1107

原创 Spark--性能调优之使用fastutil优化数据格式

1、fastutil介绍:fastutil是扩展了Java标准集合框架(Map、List、Set;HashMap、ArrayList、HashSet)的类库,提供了特殊类型的map、set、list和queue;fastutil能够提供更小的内存占用,更快的存取速度;我们使用fastutil提供的集合类,来替代自己平时使用的JDK的原生的Map、List、Set,好处在于,fastut

2017-09-15 11:52:14 339

原创 Spark---性能调优之使用Kryo序列化

1、Spark默认的序列化机制和Kryo序列化机制相比有什么优势?默认情况下,Spark内部是使用Java的序列化机制,ObjectOutputStream / ObjectInputStream,对象输入输出流机制,来进行序列化这种默认序列化机制的好处在于,处理起来比较方便;也不需要我们手动去做什么事情,只是,你在算子里面使用的变量,必须是实现Serializable接口的,可序列化即可

2017-09-14 23:06:17 851

原创 Spark---性能调优之广播共享数据

假设有一个map,1M,举例。还算小的。如果你是从哪个表里面读取了一些维度数据,比方说,所有商品品类的信息,在某个算子函数中要使用到。100M。1000个task。100G的数据,网络传输。集群瞬间因为这个原因消耗掉100G的内存。每个task拷贝一个变量的副本会造成什么样的影响?这种默认的,task执行的算子中,使用了外部的变量,每个task都会获取一份变量的副本,有什么缺点呢?

2017-09-14 00:15:38 1244

原创 Spark---性能调优之重构RDD架构以及RDD持久化

1、当第一次对RDD2执行算子,获取RDD3的时候,就会从RDD1开始计算,就是读取HDFS文件,然后对RDD1执行算子,获取到RDD2,然后再计算,得到RDD3。2、默认情况下,多次对一个RDD执行算子,去获取不同的RDD;都会对这个RDD以及之前的父RDD,全部重新计算一次;读取HDFS->RDD1->RDD2-RDD4这种情况,是绝对绝对,一定要避免的,一旦出现一个RDD重复计算

2017-09-13 23:09:21 402

原创 Task执行源码详细剖析

1、task是封装在一个线程中(TaskRunner)class TaskRunner( execBackend: ExecutorBackend, val taskId: Long, val attemptNumber: Int, taskName: String, serializedTask: ByteBuffer) e

2017-09-13 17:06:58 485

原创 Executor原理剖析与源码分析

版本:spark2.1.01、work中为application启动的executor,实际上是启动了CoarseGrainedExecutorBackend进程private[spark] object CoarseGrainedExecutorBackend extends Logging { private def run( driverUrl: String,

2017-09-13 15:11:05 526

原创 Spark---算子调优之filter过后使用coalesce减少分区数量

默认情况下,经过了这种filter之后,RDD中的每个partition的数据量,可能都不太一样了。(原本每个partition的数据量可能是差不多的)问题:1、每个partition数据量变少了,但是在后面进行处理的时候,还是要跟partition数量一样数量的task,来进行处理;有点浪费task计算资源。2、每个partition的数据量不一样,会导致后面的每个tas

2017-09-12 00:54:07 2667

原创 Spark---算子调优之MapPartitions提升Map类操作性能

spark中,最基本的原则,就是每个task处理一个RDD的partition。1、MapPartitions操作的优点:如果是普通的map,比如一个partition中有1万条数据;ok,那么你的function要执行和计算1万次。但是,使用MapPartitions操作之后,一个task仅仅会执行一次function,function一次接收所有的partition

2017-09-12 00:46:51 7767 1

原创 SparkContext源码深入剖析

本节分析针对Standalone模式版本:Spark2.11在Spark中,SparkContext是Spark所有功能的一个入口,你无论是用java、scala,甚至是python编写都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件,包括 调度器(DAGSchedule、TaskScheduler),还会去到Spark Master

2017-09-10 23:26:24 366

原创 常见的Action

Action动作含义reduce(func)通过func函数聚集RDD中的所有元素,这个功能必须是课交换且可并联的collect()在驱动程序中,以数组的形式返回数据集的所有元素count()返回RDD的元素个数first()返回RDD的第

2017-09-10 00:20:52 550

原创 常用的Transformation

TransformationRDD中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时,这些转换才会真正运行。这种设计让Spark更加有效率地运行。 常用的Transformation:转换含义map(fun

2017-09-10 00:19:13 574

原创 弹性分布式数据集RDD

1.1. RDD概述1.1.1. 什么是RDDRDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

2017-09-10 00:16:17 618

原创 Scala的常用高阶函数

// map: 对传入的每个元素都进行映射,返回一个处理后的元素Array(1, 2, 3, 4, 5).map(2 * _)// foreach: 对传入的每个元素都进行处理,但是没有返回值(1 to 9).map("*" * _).foreach(println _)// filter: 对传入的每个元素都进行条件判断,如果对元素返回true,则保留该元素,否则

2017-09-06 23:23:34 517

原创 scala函数编程--与Java的区别

Scala中的函数是Java中完全没有的概念。因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只有方法的概念,即寄存和依赖于类和对象中的方法。Java中的方法是绝对不可能脱离类和对象独立存在的。而Scala是一门既面向对象,又面向过程的语言。因此在Scala中有非常好的面向对象的特性,可以使用Scala来基于面向对象的思想开发大

2017-09-06 21:54:25 883

转载 Write-Ahead-Log(WAL)保障数据高可用

1.1 Write-Ahead-Log(WAL)保障数据高可用该机制用于数据的容错和恢复:每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据

2017-09-03 23:32:43 3095

原创 Shuffle阶段详细解读

Shuffer阶段说明shuffle阶段主要包括map阶段的combine、group、sort、partition以及reducer阶段的合并排序。Map阶段通过shuffle后会将输出数据按照reduce的分区分文件的保存,文件内容是按照定义的sort进行排序好的。Map阶段完成后会通知ApplicationMaster,然后AM会通知Reduce进行数据的拉取,在拉取过程中进行r

2017-09-02 21:25:01 7939

Apache_Kylin系列之:概念,原理,架构和典型案例

Apache_Kylin系列之:概念,原理,架构和典型案例,Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc.开发并贡献至开源社区。

2018-02-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除