大数据/Spark/项目实战
Anbang713
这个作者很懒,什么都没留下…
展开
-
Spark项目实战-实际项目中常见的优化点-设置本地化等待时间
一、什么是数据本地化Spark在Driver上,对Application的每一个stage的task进行分配之前,都会计算出每个task要计算的是哪个分片数据。Spark的task分配算法优先会希望每个task正好分配到它要计算的数据所在的节点,这样的话就不用在网络间传输数据。但是通常来说,有时事与愿违,可能task没有机会分配到它的数据所在的节点,可能那个节点的计算资源和计算能力都满了。...原创 2018-09-19 06:44:18 · 470 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-降低cache操作内存占比
一、原理在JVM中,有一块内存我们称之为堆内存,其作用是用来存放程序中的对象。堆内存中又分为年轻代和老年代,年轻代中又分为三块,分别是Eden区域和两个survivor区域。每一次放对象的时候都是放入eden区域和其中一个survivor区域,另外一个survivor区域是空闲的。当eden区域和一个survivor区域放满了以后(spark运行过程中,产生的对象实在太多了),就会...原创 2018-09-19 07:12:23 · 256 阅读 · 0 评论 -
Spark项目实战-troubleshooting之控制shuffle reduce端缓冲大小以避免OOM
一、reduce缓冲机制如下,我们知道shuffle的map端task是不断输出数据的,数据量可能是很大的。 但是其实reduce端的task,并不是等到map端task将属于自己的那份数据全部写入磁盘文件之后再去拉取的。map端写一点数据,reduce端task就会拉取一小部分数据,立即进行后面的聚合、算子函数的应用。每次reduece能够拉取多少数据,就由缓冲buffer来决定。因为拉取过...原创 2018-09-25 20:33:07 · 255 阅读 · 0 评论 -
Spark项目实战-troubleshooting之解决JVM GC导致的shuffle文件拉取失败
一、shuffle文件拉取失败的背景介绍我们知道Executor是一个JVM进程,在其内部有一个BlockManager用于管理该executor的一些数据。 Map端的task在往磁盘里写文件的时候,会通过BlockManager来维护底层的数据,同时也会将数据的元信息写入到Driver中。 下一个stage的task拉取数据的时候会从Driver获取拉取数据的元信息,找到executor并...原创 2018-09-25 21:23:40 · 297 阅读 · 0 评论 -
Spark项目实战-troubleshooting之解决各种序列化导致的报错
在实际项目中,用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么基本上可以断定是序列化问题导致的报错。 虽然是报错,但是序列化报错应该是属于比较简单的了,很好处理。序列化报错要注意的三个点:1、你的算子函数里面,如果使用到了外部的自定义类型的变量,那么此时,就要求你的自定义类型,必须是可...原创 2018-09-25 21:28:47 · 182 阅读 · 0 评论 -
Spark项目实战-troubleshooting之解决算子函数返回NULL导致的问题
return actionRDD.mapToPair(new PairFunction<Row, String, Row>() { private static final long serialVersionUID = 1L; @Override public Tuple2<String, Row> call(Row row) throws ...原创 2018-09-25 21:36:12 · 253 阅读 · 0 评论 -
Spark项目实战-troubleshooting之解决yarn-client模式导致的网卡流量激增问题
一、yarn-client模式我们先来回顾下yarn-client模式的整个流程,如下:几个关键点:1、DriverDriver到底是什么? 我们写的spark程序,打成jar包用spark-submit来提交。jar包中的一个main类,通过jvm的命令启动起来。 JVM进程,这个进程其实就是咱们的Driver进程。Driver进程启动起来以后,执行我们自己写的main函数,...原创 2018-09-25 22:07:10 · 222 阅读 · 0 评论 -
Spark项目实战-troubleshooting之解决yarn-cluster模式的JVM内存溢出无法执行问题
一、yarn-cluster模式我们先来回顾下yarn-cluster模式的整个流程,如下:二、yarn-client和yarn-cluster模式的不同之处1、yarn-client模式:driver运行在本地机器上的;yarn-cluster模式:driver是运行在yarn集群上某个nodemanager节点上面的。2、yarn-client会导致本地机器负责spark作...原创 2018-09-26 07:56:59 · 276 阅读 · 0 评论 -
Spark项目实战-数据倾斜解决方案之原理以及现象分析
一、数据倾斜的原理在执行shuffle操作的时候,大家都知道是按照key来进行values的数据的输出、拉取和聚合的。同一个key的values,一定是分配到一个reduce task进行处理的。假设多个key对应的values,总共是90万。但是问题是可能某个key对应了88万数据,key-88万values,分配到一个task上去面去执行。另外两个task,可能各分配到了1万数据,可能是数...原创 2018-09-26 08:18:31 · 381 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-shuffle调优
我相信这个shuffle调优有多重要就不用我在这里说了吧,其实在Spark Core系列的Spark性能优化,我们就已经说了Shuffle调优了。但是这里仍然要提起,是因为它在实际开发中太重要了,除了一些硬性指标,如CPU资源、IO等引起的性能问题。可以说shuffle是性能问题的最大杀手。所以我们这里重新提出来,是提醒自己在实际项目中要了解这其中的机制和原理以及如何优化。...原创 2018-09-20 21:54:00 · 207 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-算子调优之MapPartitions
首先我们应该知道在Spark中,最基本的原则就是每个task处理一个RDD的partition。在mapToPair算子里,partition中的数据以此传递到算子里进行处理。假设一个partition里有100条数据,那么就需要处理100次。但是mapPartitionsToPair算子是将partitions中所有的数据一次性处理,这就大大提升了新能。一、MapPartitions操作的优...原创 2018-09-20 22:13:05 · 1354 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-filter过后使用coalesce减少分区数量
如上,默认情况下,经过了filter操作之后RDD中的每个partition的数据量可能都不太一样了。(原本每个partition的数据量可能是差不多的)1、这种情况下存在两个问题: (1)每个partition数据量变少了,但是在后面进行处理的时候,还是要跟partition数量一样数量的task,来进行处理;有点浪费task计算资源。(2)每个partition的数据量不一样,...原创 2018-09-21 07:59:45 · 879 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-使用foreachPartition优化写数据库性能
首先,我们看一下foreach的写原理:1、foreach的性能缺陷在哪里? (1)首先对于每条数据都要单独去调用一次function,task为每个数据都要去执行一次function函数。 如果100万条数据(一个partition),调用100万次,性能比较差。(2)另外一个非常非常重要的一点,如果每个数据你都去创建一个数据库连接的话,那么你就得创建100万次数据库连接。我们都...原创 2018-09-21 08:12:02 · 1336 阅读 · 0 评论 -
Spark项目实战-数据倾斜解决方案之聚合源数据
数据倾斜的解决跟之前讲解的性能调优,有一点异曲同工之妙。性能调优,其实调了半天,最有效、最直接、最简单的方式就是加资源,加并行度,注意RDD架构(复用同一个RDD,加上cache缓存)。而shuffle、jvm等都是调优次要的。数据倾斜问题最直接、最有效、最简单的方案就是:聚合源数据和过滤导致倾斜的key。一、聚合源数据我们在Spark做一些聚合的操作groupByKey、redu...原创 2018-09-26 20:00:57 · 377 阅读 · 0 评论 -
Spark项目实战-数据倾斜解决方案之提高shuffle操作reduce并行度
对于之前说的《Spark项目实战-数据倾斜解决方案之聚合源数据》都不适合做,那么第三个方案:提高shuffle操作的reduce并行度。将reduce task的数量变多,就可以让每个reduce task分配到更少的数据量,这样的话也许就可以缓解或者甚至是基本解决掉数据倾斜的问题。问题1:如何提高reduce的并行度?很简单,主要给我们所有的shuffle算子,比如groupByKey、...原创 2018-09-26 20:06:05 · 304 阅读 · 0 评论 -
Spark项目实战-数据倾斜解决方案之使用随机key实现双重聚合
原创 2018-09-26 20:11:44 · 414 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-fastutil优化数据格式
一、fastutil介绍fastutil是扩展了Java标准集合框架(Map、List、Set;HashMap、ArrayList、HashSet)的类库,提供了特殊类型的map、set、list和queue。fastutil能够提供更小的内存占用,更快的存取速度。我们使用fastutil提供的集合类来替代自己平时使用的JDK的原生的Map、List、Set,好处在于fastutil集合类可以...原创 2018-09-16 15:07:40 · 213 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-广播大变量
首先我们从这篇博客简单了解下Spark中的共享变量。然后我们在这里举个简单例子更加深入的了解一下为什么需要广播大变量。假设,我们现在有一个外部变量A(大小10M),然后有三个Task都需要用到变量A。在这种默认的,task执行的算子中使用了外部的变量,每个task都会获取一份变量的副本,通俗点说就是每个task中都会有一个变量A,那么3个task并行执行的时候就会占掉30M内存。这...原创 2018-09-16 14:46:38 · 248 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-RDD持久化
假设我们现在是这样的,RDD1从HDFS上读取源数据,然后转换成RDD2,RDD2又分别转换成RDD3和RDD4。默认情况下,多次对一个RDD执行算子去获取不同的RDD,都会对这个RDD以及之前的父RDD,全部重新计算一次。比如在这里,我们现在要对RDD3执行后续操作,那么就要先读取HDFS->RDD1->RDD2-RDD3。此时我们又要对RDD4进行后续操作,那么流程是HDF...原创 2018-09-16 13:45:49 · 509 阅读 · 0 评论 -
Spark项目实战-集群SSH免密码登录
首先我们会根据之前的CentOS安装教程再搭建sparkproject2和sparkproject3两台虚拟机机器。然后在这基础上配置三台机器之间的ssh免密码登录。1、在三台机器的/etc/hosts文件中,都配置对三台机器的ip-hostname的映射。 2、我们先通过ssh-keygen -t rsa生成sparkproject1这台机器的公钥,过程中直接回车即可。 ...原创 2018-08-30 20:06:53 · 1465 阅读 · 0 评论 -
Spark项目实战-Hadoop集群搭建
今天,我们来一起学习一下hadoop-2.5.0-cdh5.3.6版本的hadoop集群搭建。一 下载首先我们需要下载对应的tar.gz,下载地址:http://archive.cloudera.com/cdh5/cdh/5/二 上传使用WinSCP将刚刚下载的tar.gz上传到sparkproject1的/usr/local下。三 解压使用tar -zxvf hado...原创 2018-08-30 21:57:37 · 399 阅读 · 1 评论 -
Spark项目实战-VirtualBox安装
一 下载安装之前,我们先去下载一个VirtualBox,博主这里下载的是window版的5.2.18版本。下载地址:https://www.virtualbox.org/wiki/Downloads二 安装1、下载下来是一个exe文件,鼠标双击运行。2、在这里,我们可以修改安装位置,然后继续下一步。3、 这里我们不做修改,直接下一步。4、立即安装。...原创 2018-08-29 08:05:59 · 783 阅读 · 0 评论 -
Spark项目实战-CentOS安装
一 下载镜像本次我们安装的是:CentOS-6.4-i386-minimal.iso,下载地址:http://vault.centos.org/6.4/isos/i386/二 安装1、打开我们安装好的VirtualBox(安装步骤),点击新建。2、 设置一个名称,然后选择Linux类型,版本是Ret Hat。3、分配内存,1024M即可。4、虚拟硬盘这步,我们默...原创 2018-08-29 08:06:39 · 351 阅读 · 0 评论 -
Spark项目实战-Hive安装
Hive官网地址:https://hive.apache.org/cdh版Hive下载地址:http://archive.cloudera.com/cdh5/cdh/5/Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简...原创 2018-08-31 08:29:28 · 798 阅读 · 0 评论 -
Spark项目实战-Linux下安装JDK
一 下载从官网下载对应版本的jdk,博主下载的是32位的tar.gz文件。二 安装1、安装之前我们用WinSCP工具,将刚下载的tar.gz文件上传到Linux的/usr/local目录下。2、解压tar.gz。3、配置环境变量(vi /etc/profile) 在profile文件末尾添加:# 这里替换成我们刚刚解压出来的jdk目录export JAVA_...原创 2018-08-29 08:06:55 · 332 阅读 · 0 评论 -
Spark项目实战-ZooKeeper集群安装
ZooKeeper官网地址:http://zookeeper.apache.org/cdh版ZooKeeper下载地址:http://archive.cloudera.com/cdh5/cdh/5/ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、...原创 2018-09-01 10:02:47 · 283 阅读 · 0 评论 -
Spark项目实战-Scala集群安装
一 下载从官网下载对应版本的scala,博主下载的是scala-2.11.4.tgz。二 安装1、安装之前我们用WinSCP工具,将刚下载的tgz文件上传到Linux的/usr/local目录下。2、解压tgz。3、配置环境变量,并生效配置文件4、通过scala -version命令查看是否成功安装 ...原创 2018-09-01 10:27:22 · 393 阅读 · 0 评论 -
Spark项目实战-kafka集群安装
一 下载从官网下载对应版本的kafka,博主下载的是kafka_2.9.2-0.8.1.tgz。二 安装1、安装之前我们用WinSCP工具,将刚下载的tgz文件上传到Linux的/usr/local目录下。2、解压tgz文件。三 配置kafka1、进入kafka/config目录,编辑server.properties。2、配置参数。# 依次增长的整数,0...原创 2018-09-01 13:32:39 · 452 阅读 · 0 评论 -
Spark项目实战-flume安装
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。原创 2018-09-01 14:23:44 · 379 阅读 · 0 评论 -
Spark项目实战-Spark客户端安装
一 下载从官网下载对应版本的spark,博主下载的是spark-1.5.1-bin-hadoop2.4.tgz。二 安装1、安装之前我们用WinSCP工具,将刚下载的tgz文件上传到Linux的/usr/local目录下。2、解压tgz文件。三 配置环境变量四 修改spark-env.sh文件进入spark/conf目录,然后我们用cp命令将spark-env...原创 2018-09-02 10:16:01 · 5185 阅读 · 0 评论 -
Spark项目实战-实际项目中常见的优化点-分配更多的资源和调节并行度
1、分配更多的资源(1)分配哪些资源?executor、cpu per executor、memory per executor、driver memory。(2)在哪里分配这些资源?在我们在生产环境中,提交spark作业时,用的spark-submit shell脚本,里面调整对应的参数 。/usr/local/spark/bin/spark-submit \--class cn...原创 2018-09-16 11:42:29 · 319 阅读 · 0 评论 -
Spark项目实战-数据倾斜解决方案之将reduce join转换为map join
一、reduce端join操作原理二、map端join操作原理 三、适用场景如果两个RDD要进行join,其中一个RDD是比较小的。一个RDD是100万数据,一个RDD是1万数据。(一个RDD是1亿数据,一个RDD是100万数据) 其中一个RDD必须是比较小的,broadcast出去那个小RDD的数据以后,就会在每个executor的block manager中都驻留一份。要确...原创 2018-09-26 20:28:29 · 2408 阅读 · 0 评论