Spark
文章平均质量分 71
缘定三石
这个作者很懒,什么都没留下…
展开
-
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 阅读 · 0 评论 -
常见的Action
Action动作含义reduce(func)通过func函数聚集RDD中的所有元素,这个功能必须是课交换且可并联的collect()在驱动程序中,以数组的形式返回数据集的所有元素count()返回RDD的元素个数first()返回RDD的第原创 2017-09-10 00:20:52 · 550 阅读 · 0 评论 -
SparkContext源码深入剖析
本节分析针对Standalone模式版本:Spark2.11在Spark中,SparkContext是Spark所有功能的一个入口,你无论是用java、scala,甚至是python编写都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件,包括 调度器(DAGSchedule、TaskScheduler),还会去到Spark Master原创 2017-09-10 23:26:24 · 366 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
troubleshooting之解决各种序列化导致的报错
你会看到什么样的序列化导致的报错?用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么恭喜大家,就碰到了序列化问题导致的报错。虽然是报错,但是序列化报错,应该是属于比较简单的了,很好处理。序列化报错要注意的三个点:1、你的算子函数里面,如果使用到了外部的自定义类型的变量,那原创 2017-09-21 22:23:32 · 432 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
分布式深度学习框架TensorFlowOnSpark
TensorFlowOnSpark分析TensorFlowOnSpark(https://github.com/yahoo/TensorFlowOnSpark)项目是由Yahoo开源的一个软件包,能将TensorFlow(https://github.com/tensorflow/tensorflow)与Spark结合在一起使用,为ApacheHadoop和ApacheSpark集群带来可扩展原创 2017-12-05 18:21:12 · 4501 阅读 · 0 评论 -
使用开源项目根据IP解析出城市信息的工具类编译
使用github上已有的开源项目 1)git clone https://github.com/wzhe06/ipdatabase.git 2)编译下载的项目:mvn clean package -DskipTests 3)安装jar包到自己的maven仓库 mvn install:install-file -Dfile=/Users/rocky/source/ipdatabase/tar原创 2018-01-31 11:29:05 · 654 阅读 · 0 评论 -
Spark SQL在100TB上的自适应执行实践
Spark SQL是Apache Spark最广泛使用的一个组件,它提供了非常友好的接口来分布式处理结构化数据,在很多应用领域都有成功的生产实践,但是在超大规模集群和数据集上,Spark SQL仍然遇到不少易用性和可扩展性的挑战。为了应对这些挑战,英特尔大数据技术团队和百度大数据基础架构部工程师在Spark 社区版本的基础上,改进并实现了自适应执行引擎。本文首先讨论Spark SQL在大规模数据集转载 2018-02-01 14:12:13 · 341 阅读 · 0 评论 -
常用的Transformation
TransformationRDD中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时,这些转换才会真正运行。这种设计让Spark更加有效率地运行。 常用的Transformation:转换含义map(fun原创 2017-09-10 00:19:13 · 574 阅读 · 0 评论 -
弹性分布式数据集RDD
1.1. RDD概述1.1.1. 什么是RDDRDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。原创 2017-09-10 00:16:17 · 618 阅读 · 0 评论 -
Spark--性能优化之解决数据倾斜
前言继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为《Spark性能优化指南》的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题。数据倾斜调优调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据转载 2017-09-16 14:02:27 · 433 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 1108 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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---性能调优之使用Kryo序列化
1、Spark默认的序列化机制和Kryo序列化机制相比有什么优势?默认情况下,Spark内部是使用Java的序列化机制,ObjectOutputStream / ObjectInputStream,对象输入输出流机制,来进行序列化这种默认序列化机制的好处在于,处理起来比较方便;也不需要我们手动去做什么事情,只是,你在算子里面使用的变量,必须是实现Serializable接口的,可序列化即可原创 2017-09-14 23:06:17 · 851 阅读 · 0 评论 -
Spark---性能调优之广播共享数据
假设有一个map,1M,举例。还算小的。如果你是从哪个表里面读取了一些维度数据,比方说,所有商品品类的信息,在某个算子函数中要使用到。100M。1000个task。100G的数据,网络传输。集群瞬间因为这个原因消耗掉100G的内存。每个task拷贝一个变量的副本会造成什么样的影响?这种默认的,task执行的算子中,使用了外部的变量,每个task都会获取一份变量的副本,有什么缺点呢?原创 2017-09-14 00:15:38 · 1244 阅读 · 0 评论 -
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 阅读 · 0 评论 -
Spark---算子调优之filter过后使用coalesce减少分区数量
默认情况下,经过了这种filter之后,RDD中的每个partition的数据量,可能都不太一样了。(原本每个partition的数据量可能是差不多的)问题:1、每个partition数据量变少了,但是在后面进行处理的时候,还是要跟partition数量一样数量的task,来进行处理;有点浪费task计算资源。2、每个partition的数据量不一样,会导致后面的每个tas原创 2017-09-12 00:54:07 · 2667 阅读 · 0 评论 -
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 评论 -
Spark--性能优化之shuffle调优
shuffle调优调优概述大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行调优。但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以及数据倾斜,shuffle调优只能在整个Spark的性能调优中占到一小部分而转载 2017-09-16 10:53:06 · 382 阅读 · 0 评论 -
Spark---Shuffle调优之调节map端内存缓冲与reduce端内存占比
1、map端内存缓冲,reduce端内存占比概述map端内存缓冲,reduce端内存占比;很多资料、网上视频,都会说,这两个参数,是调节shuffle性能的不二选择,很有效果的样子,实际上,不是这样的。以实际的生产经验来说,这两个参数没有那么重要,往往来说,shuffle的性能不是因为这方面的原因导致的但是,有一点点效果的,broadcast,数据本地化等待时长;这两个shuffl原创 2017-09-16 11:52:52 · 2094 阅读 · 1 评论 -
Spark---性能优化之开发篇
在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。Spark主要就是为了让大数据计算作业的执行速度更快、性能更高。然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进行合理的调优,转载 2017-09-16 13:29:00 · 362 阅读 · 0 评论 -
Spark---性能调优之资源调优篇
资源调优调优概述在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,转载 2017-09-16 13:35:38 · 340 阅读 · 0 评论 -
Spark2.2.1源码编译企业版
Spark2.2.1源码编译1、概述Spark和Haoop的官网提供了写Haoop和Spark的安装版本,但是在生产中,很大部分是CDH和HDP,官方提供的Hadoop和Spark,经常会对源码进行修改,根据本人在企业中做大数据的经验,大数据开发的人员应该会根据Haddop的版本编译出对应的Spark安装包,集成CDH2、准备参考Spark的官方文档根据Spark官方文档编原创 2018-01-10 15:19:01 · 942 阅读 · 0 评论