自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 RabbitMQ-通配符模式

一、简介上一篇,我们说到《RabbitMQ-路由模式》实现了一条消息被多个消费者消费。在路由模式中我们通过指定routingKey,消费者只有订阅了该key的队列才能消费消息。今天我们学习通配符模式,它可以说是路由模式的升级版,反过来说路由模式就是通配符模式的特殊情况。通配符模式:将路由键和某模式进行匹配,此时队列需要绑定一个模式上。符号“#”匹配一个或多个词,符号“*”匹配一个词。比如“...

2018-09-29 08:20:20 2913

原创 RabbitMQ-路由模式

一、简介上一篇我们提到《RabbitMQ-订阅模式》从而实现了一个消息被多个消费者消费,其大致原理是消费者1和消费者2都创建自己的队列,然后将队列绑定到交换机即可实现。但是我们想象一下这样的场景,比如我们有两个系统,假设就叫做前台系统和搜索系统,那么我们的后台系统对某一商品进行增删改查,就需求发送消息到前台和搜索系统。但是我们就在想,增删改查四个操作到底哪些操作需求通知到不同的系统,比如新...

2018-09-28 22:16:50 414

原创 RabbitMQ-订阅模式

一、简介学习完《RabbitMQ-简单队列》和《RabbitMQ-Work模式》,今天我们一起学习订阅模式。如下图所示:解读:1、1个生产者,多个消费者。2、每一个消费者都有自己的一个队列。3、生产者没有将消息直接发送到队列,而是发送到了交换机(x)。4、每个队列都要绑定到交换机。5、生产者发送的消息,经过交换机到达队列,实现一个消息被多个消费者获取的目的。二、...

2018-09-28 21:37:38 774

原创 RabbitMQ-Work模式

一、简介在《RabbitMQ-简单队列》中,只有一个生产者一个消费者。今天我们一起学习Work模式,即一个生产者,多个消费者,如下图所示:需要注意的是:(1)生产者的消息是发送到一个队列里,所以即使有两个消费者,一个消息只能被一个消费者消费。(2)Work模式中可以分为两种模式:一两个消费者平均消费队列中的消息,即使它们的消费能力是不一样的;二能者多劳模式,消费能力强的消费者会...

2018-09-28 20:33:38 1383

原创 RabbitMQ-简单队列

一、基本概念RabbitMQ是一个消息代理,它被用于接收并转发消息。官方文档里把它比作邮局,当我们要把寄发的邮件投递到邮箱中时,我们确信邮递员最终会将邮件发送给收件人。在这个比喻中,RabbitMQ是一个邮箱,邮局和邮递员。RabbitMQ和邮局之间的主要区别在于它不处理消息数据,而是接收、存储和转发二进制数据块的消息。生产意味着不仅仅是发送,我们称发送消息的程序是一个生产者。...

2018-09-27 21:32:59 433

原创 RabbitMQ-彻底删除服务

要从计算机中完全卸载RabbitMQ和Erlang,请执行以下操作:(1)打开Windows控制面板,双击“程序和功能”。(2)在当前安装的程序列表中,右键单击RabbitMQ Server,然后单击“卸载”。(3)在当前安装的程序列表中,右键单击“Erlang OTP”,然后单击“卸载”。(4)打开Windows任务管理器。(5)在任务管理器中,查找进程epmd.exe。 如果...

2018-09-27 20:31:48 20538 1

转载 RabbitMQ-应用场景以及基本原理介绍

可参考杨龙飞的博客:https://blog.csdn.net/whoamiyang/article/details/54954780

2018-09-26 20:39:10 254

原创 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 2402

原创 Spark项目实战-数据倾斜解决方案之使用随机key实现双重聚合

2018-09-26 20:11:44 406

原创 Spark项目实战-数据倾斜解决方案之提高shuffle操作reduce并行度

对于之前说的《Spark项目实战-数据倾斜解决方案之聚合源数据》都不适合做,那么第三个方案:提高shuffle操作的reduce并行度。将reduce task的数量变多,就可以让每个reduce task分配到更少的数据量,这样的话也许就可以缓解或者甚至是基本解决掉数据倾斜的问题。问题1:如何提高reduce的并行度?很简单,主要给我们所有的shuffle算子,比如groupByKey、...

2018-09-26 20:06:05 297

原创 Spark项目实战-数据倾斜解决方案之聚合源数据

数据倾斜的解决跟之前讲解的性能调优,有一点异曲同工之妙。性能调优,其实调了半天,最有效、最直接、最简单的方式就是加资源,加并行度,注意RDD架构(复用同一个RDD,加上cache缓存)。而shuffle、jvm等都是调优次要的。数据倾斜问题最直接、最有效、最简单的方案就是:聚合源数据和过滤导致倾斜的key。一、聚合源数据我们在Spark做一些聚合的操作groupByKey、redu...

2018-09-26 20:00:57 363

原创 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 372

原创 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 264

原创 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 216

原创 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 244

原创 Spark项目实战-troubleshooting之解决各种序列化导致的报错

在实际项目中,用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么基本上可以断定是序列化问题导致的报错。 虽然是报错,但是序列化报错应该是属于比较简单的了,很好处理。序列化报错要注意的三个点:1、你的算子函数里面,如果使用到了外部的自定义类型的变量,那么此时,就要求你的自定义类型,必须是可...

2018-09-25 21:28:47 174

原创 Spark项目实战-troubleshooting之解决JVM GC导致的shuffle文件拉取失败

一、shuffle文件拉取失败的背景介绍我们知道Executor是一个JVM进程,在其内部有一个BlockManager用于管理该executor的一些数据。 Map端的task在往磁盘里写文件的时候,会通过BlockManager来维护底层的数据,同时也会将数据的元信息写入到Driver中。 下一个stage的task拉取数据的时候会从Driver获取拉取数据的元信息,找到executor并...

2018-09-25 21:23:40 288

原创 Spark项目实战-troubleshooting之控制shuffle reduce端缓冲大小以避免OOM

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

2018-09-25 20:33:07 244

原创 Spark项目实战-实际项目中常见的优化点-使用foreachPartition优化写数据库性能

首先,我们看一下foreach的写原理:1、foreach的性能缺陷在哪里? (1)首先对于每条数据都要单独去调用一次function,task为每个数据都要去执行一次function函数。 如果100万条数据(一个partition),调用100万次,性能比较差。(2)另外一个非常非常重要的一点,如果每个数据你都去创建一个数据库连接的话,那么你就得创建100万次数据库连接。我们都...

2018-09-21 08:12:02 1326

原创 Spark项目实战-实际项目中常见的优化点-filter过后使用coalesce减少分区数量

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

2018-09-21 07:59:45 868

原创 Spark项目实战-实际项目中常见的优化点-算子调优之MapPartitions

首先我们应该知道在Spark中,最基本的原则就是每个task处理一个RDD的partition。在mapToPair算子里,partition中的数据以此传递到算子里进行处理。假设一个partition里有100条数据,那么就需要处理100次。但是mapPartitionsToPair算子是将partitions中所有的数据一次性处理,这就大大提升了新能。一、MapPartitions操作的优...

2018-09-20 22:13:05 1347

原创 Spark项目实战-实际项目中常见的优化点-shuffle调优

我相信这个shuffle调优有多重要就不用我在这里说了吧,其实在Spark Core系列的Spark性能优化,我们就已经说了Shuffle调优了。但是这里仍然要提起,是因为它在实际开发中太重要了,除了一些硬性指标,如CPU资源、IO等引起的性能问题。可以说shuffle是性能问题的最大杀手。所以我们这里重新提出来,是提醒自己在实际项目中要了解这其中的机制和原理以及如何优化。...

2018-09-20 21:54:00 199

原创 SpringBoot-集成swagger2

在工作中,一个Web管理系统通常都是前后端分离的。有专门的前端开发,也有专门的后端开发,甚至有些项目可能还会要求有专门的接口开发,这类人通常就只是定义接口规范,然后由后端开发实现。那么问题来了,当一个项目需要这么多人协助完成时,我们就必须有统一的文档来约定一些规范。对于一个接口来说,我们要定义请求方法,请求参数,参数的属性(如是否允许为空),响应体以及响应码的含义等等。传统的做法就是我们新建一...

2018-09-19 08:17:45 250

原创 Spark项目实战-实际项目中常见的优化点-降低cache操作内存占比

一、原理在JVM中,有一块内存我们称之为堆内存,其作用是用来存放程序中的对象。堆内存中又分为年轻代和老年代,年轻代中又分为三块,分别是Eden区域和两个survivor区域。每一次放对象的时候都是放入eden区域和其中一个survivor区域,另外一个survivor区域是空闲的。当eden区域和一个survivor区域放满了以后(spark运行过程中,产生的对象实在太多了),就会...

2018-09-19 07:12:23 248

原创 Spark项目实战-实际项目中常见的优化点-设置本地化等待时间

一、什么是数据本地化Spark在Driver上,对Application的每一个stage的task进行分配之前,都会计算出每个task要计算的是哪个分片数据。Spark的task分配算法优先会希望每个task正好分配到它要计算的数据所在的节点,这样的话就不用在网络间传输数据。但是通常来说,有时事与愿违,可能task没有机会分配到它的数据所在的节点,可能那个节点的计算资源和计算能力都满了。...

2018-09-19 06:44:18 462

原创 MongoDB-聚合

MongoDB产生的背景是在大数据环境下,所谓的大数据实际上也就是进行的信息收集汇总。一、取得聚合的数据量1.1、统计集合中文档数量(1)命令格式:db.testCollection.count();(2)结果:1.2、统计集合中姓张的学生数量(模糊查询)(1)命令格式:db.testCollection.count({“name”:/张/});(2)结果:...

2018-09-18 21:38:13 201

原创 MongoDB-索引

一、索引1.1、得到集合中的默认索引(1)命令格式:db.testCollection.getIndexes();(2)结果:1.2、创建索引格式:db.集合名.ensureIndex({“成员名”:boolean,”成员名”:boolean……},{“name”:”index_name”});说明:①在成员名上创建索引;②boolean:1升序索引;-1降序索...

2018-09-18 21:25:38 251

原创 MongoDB-入门操作

上一篇我们讲了window下如何安装mongodb,那这一篇我们趁热打铁,这就入门吧。打开cmd,进入mongodb安装路径下的bin目录,然后输入mongo命令进入交互环境。1、查看所有数据库(1)命令格式:show databases;(2)结果:2、 创建数据库(1)命令格式:use testDatabase;(2)说明:use + dbname命令,即是切换...

2018-09-17 22:34:35 235

原创 Redis-windows下安装redis服务

一、下载安装之前我们先下载相应版本的redis。博主下载的是:二、安装服务zip是免安装的,直接解压到某一路径。然后进入cmd到redis的解压路径开始安装服务即可。redis-server --service-install redis.windows-service.conf上述已经安装好window服务,启动redis服务可以直接到任务管理器通过界面启动和停止,当然...

2018-09-16 15:37:20 208

原创 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 207

原创 Spark项目实战-实际项目中常见的优化点-广播大变量

首先我们从这篇博客简单了解下Spark中的共享变量。然后我们在这里举个简单例子更加深入的了解一下为什么需要广播大变量。假设,我们现在有一个外部变量A(大小10M),然后有三个Task都需要用到变量A。在这种默认的,task执行的算子中使用了外部的变量,每个task都会获取一份变量的副本,通俗点说就是每个task中都会有一个变量A,那么3个task并行执行的时候就会占掉30M内存。这...

2018-09-16 14:46:38 237

原创 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 497

原创 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 313

原创 SpringBoot-集成MongoDB

本篇既然是学习如何集成MongoDB,那必然要先安装MongoDB,这是毋庸置疑的。安装好之后,我们直接开始“干”。一、添加MongoDB依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-dat...

2018-09-15 09:39:12 206

原创 MongoDB-window下的安装

一、下载安装之前,我们也去官网下载一个安装包。博主在这里安装的是:二、开始安装 找到刚刚下载的msi程序,双击运行。上一步,我们直接next即可。 上一步,我们勾上这个选项,然后直接next。 在这里,我们可以选择complete,也可以选择custom自定义安装。当然博主选择的是custom,主要是想自己设置安装路径。 选择好安装路径,直接next。 ...

2018-09-14 22:00:53 202

原创 SpringBoot-开启声明式事务

SpringBoot开启事务很简单,只需要一个@Transactional注解即可。因为在SpringBoot中已经默认对jpa,jdbc,mybatis开启了事务,引入它们依赖的时候,事务就默认开启了。下面我们以SpringBoot-整合JPA的案列来实际检验下事务性。修改StudentServiceImpl中的save实现,我们在成功保存之后跑出一个异常,然后去数据库看是是否有正确保存...

2018-09-14 08:15:22 287

原创 SpringBoot-整合JPA

一 JPA是什么JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,...

2018-09-13 08:15:21 1460

原创 SpringBoot-通过JdbcTemplates访问MySQL

数据库准备开门见山吧,首先我们在MySQL中创建数据库:CREATE DATABASE IF NOT EXISTS springboot_project DEFAULT CHARSET utf8;然后在springboot_project数据库中创建temp表:CREATE TABLE `temp` ( `id` INT(11) NOT NULL AUTO_INCREMEN...

2018-09-12 21:38:42 363

原创 SpringBoot-配置文件详解之多个配置文件

在现实的开发环境中,我们需要不同的配置环境。比如开发环境用于开发,测试环境用于测试,预生产环境用于发布测试。那么对于多个环境的配置文件,其文件格式为:application-{profile}.properties,其中{profile}对应我们的环境标识。比如我们这里定义了开发环境和测试环境:配置文件分别为:# application-test.propertiesmy.name...

2018-09-12 20:02:01 366

原创 SpringBoot-配置文件详解之自定义配置文件

今天我们一起来学习一下如何自定义配置文件,在这之前我们可能会把配置项写在application.properties或者application.yml中。这是springboot默认读取的配置文件,但是有时候我们需要自定义配置文件用于配置特定需求的配置项。比如我们在classpath下建一个test.properties文件:然后将该配置文件配置项的值用一个javabean来接收: ...

2018-09-12 08:20:04 284

空空如也

空空如也

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

TA关注的人

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