自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鸭梨的博客

输出每一天

  • 博客(196)
  • 收藏
  • 关注

原创 spark 数据倾斜之两阶段聚合(局部聚合+全局聚合)

两阶段聚合(局部聚合+全局聚合)方案适用场景:对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用groupby语句进行分组聚合时,比较适用这种方案。方案实现思路:这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello,(hello, 1) (hello, 1) (hello, 1),就会变成(1_hello, 1) (1_hello,

2021-01-30 16:55:03 1410

转载 spark数据倾斜解决之提高并行度

调整并行度分散同一个Task的不同Key方案适用场景:如果我们必须要对数据倾斜迎难而上,那么建议优先使用这种方案,因为这是处理数据倾斜最简单的一种方案。方案实现思路:在对RDD执行shuffle算子时,给shuffle算子传入一个参数,比如reduceByKey(1000),该参数就设置了这个shuffle算子执行时shuffle redu task的数量。对于Spark SQL中的shuffle类语句,比如groupby、join等,需要设置一个参数,即spark.sql.shuffl

2021-01-30 16:28:12 511

转载 spark 尽量避免数据源的数据倾斜

比如数据源是Kafka:以Spark Stream通过DirectStream方式读取Kafka数据为例。由于Kafka的每一个Partition对应Spark的一个Task(Partition),所以Kafka内相关Topic的各Partition之间数据是否平衡,直接决定Spark处理该数据时是否会产生数据倾斜。Kafka某一Topic内消息在不同Partition之间的分布,主要由Producer端所使用的Partition实现类决定。如果使用随机Partitioner,则每条消息会随机发送到一个

2021-01-30 16:11:26 201

原创 Spark如何定位导致数据倾斜的代码

数据倾斜只会发生在shuffle过程中。这里给大家罗列一些常用的并且可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等出现数据倾斜时,可能就是你的代码中使用了这些算子中的某一个所导致的。某个task执行特别慢的情况首先要看的,就是数据倾斜发生在第几个stage中。可以通过Spark Web UI来查看当前运行到了第几个stage,看一下当前这个stage各个task分

2021-01-30 14:59:08 1245

原创 Spark数据倾斜是如何造成的

什么是数据倾斜对Spark/Hadoop这样的大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜。何谓数据倾斜?数据倾斜指的是,并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈。如果数据倾斜没有解决,完全没有可能进行性能调优,其他所有的调优手段都是一个笑话。数据倾斜是最能体现一个spark大数据工程师水平的性能调优问题。数据倾斜如果能够解决的话,代表对spark运行机制了如指掌。数据倾斜俩大直接

2021-01-30 14:43:06 338 1

原创 Spark部署模式入门

部署模式概述Spark支持的主要的三种分布式部署方式分别是standalone、spark on mesos和 spark on YARN。standalone模式即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。它是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点。yarn模式yarn是统一的资源管理机制,在上面可以运行多套计算框架,如mapreduce、storm等根据driver在集群中的位置不同,分为y

2021-01-30 14:07:11 732

原创 Spark内存空间分配机制

静态内存管理在 Spark 最初采用的静态内存管理机制下,存储内存、执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的,但用户可以应用程序启动前进行配置,堆内内存的分配如图 2 所示:可以看到,可用的堆内内存的大小需要按照下面的方式计算:可用堆内内存空间:可用的存储内存 = systemMaxMemory * spark.storage.memoryFraction * spark.storage.safetyFraction可用的执行内存 = systemMaxMemory *

2021-01-30 10:53:44 376

原创 Broker 的 Heap Size 如何设置?

如何设置 Heap Size 的问题,其实和 Kafka 关系不大,它是一类非常通用的面试题目。一旦你应对不当,面试方向很有可能被引到 JVM 和 GC 上去,那样的话,你被问住的几率就会增大。因此,我建议你简单地介绍一下 Heap Size 的设置方法,并把重点放在 Kafka Broker 堆小设置的最佳实践上。比如,你可以这样回复:任何 Java 进程 JVM 堆大小的设置都需要仔细地进行考量和测试。一个常见的做法是,以默认的初始 JVM 堆大小运行程序,当系统达到稳定状态后,手动触发一次

2021-01-30 10:06:06 555

原创 漏斗分析入门SQL

我们漏斗分析中定义的需求如下注册-> 点击新闻-> 进入详情页-> 发布评论 可以记事件为ABCDA->B->C->D接下来我们用SQL实现这个需求我们来查询 20210103到2020109 事件范围内,并且窗口时间是3天的漏斗with t1 as (selectid,ctime,eventfrom tmpwhere event=A and ctime>='20200103' and ctime<'20200109'),t2

2021-01-30 10:03:22 1302

原创 kafka监控工具Burrow安装

安装Burrow$ git clone https://hub.fastgit.org/linkedin/Burrow.git$ cd Burrow/$ go mod tidy$ go install 参考Kafka 消费迟滞监控工具 Burrow_weixin_34259159的博客-CSDN博客linkedin/Burrow: Kafka Consumer Lag Checkinghttps://github.com/linkedin/Burrow...

2021-01-29 17:20:19 785

原创 go语言环境安装

安装go环境wget https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz# 解压tar -zxvf go1.12.1.linux-amd64.tar.gz -C /usr/local# 配置环境变量vim /etc/profileexport GO_HOME=/usr/local/goexport PATH=$PATH:$GO_HOME/bin# 激活source /etc/profile检查是否安装成功[root@mypc01

2021-01-29 17:12:49 121

原创 flink知识点总结

简单介绍一下 FlinkFlink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 提供了数据分布、容错机制以及资源管理等核心功能。Flink提供了诸多高抽象层的API以便用户编写分布式任务:DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,

2021-01-29 16:55:33 385

原创 spark foreach与foreachPartition的区别

val spark: SparkSession = SparkSession.builder().master("local").getOrCreate() val sc: SparkContext = spark.sparkContext val rdd: RDD[Int] = sc.parallelize(Array(1, 1, 2, 3)) rdd.foreach((x: Int) =>{ println(x) })val spark: Spark

2021-01-29 14:35:19 671

原创 spark reduce与reduceByKey的区别

reduce针对集合是单个元素的,reduceByKey针对有key的reduce是行动算子,reduceByKey的转换算子案例reduce val spark: SparkSession = SparkSession.builder().master("local").getOrCreate() val sc: SparkContext = spark.sparkContext val rdd: RDD[Int] = sc.parallelize(Array(1, 2, 3).

2021-01-29 14:13:59 527

原创 Spark知识点总结

Spark有几种部署方式?请分别简要论述1)Local:运行在一台机器上,通常是练手或者测试环境。2)Standalone:构建一个基于Master+Slaves的资源调度集群,Spark任务提交给Master运行。是Spark自身的一个调度系统。3)Yarn: Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。4)Mesos:国内大环境比较少用。4.10.2 Spark任务使用什么

2021-01-29 11:25:47 1024

原创 java 垃圾回收入门

概念由于Stack的内存管理是顺序分配的,而且定长,不存在内存回收问题;而Heap 则是随机分配内存,不定长度,存在内存分配和回收的问题;因此在JVM中另有一个GC进程,定期扫描Heap ,它根据Stack中保存的4字节对象地址扫描Heap ,定位Heap 中这些对象,进行一些优化(例如合并空闲内存块什么的),并且假设Heap 中没有扫描到的区域都是空闲的,统统refresh(实际上是把Stack中丢失了对象地址的无用对象清除了),这就是垃圾收集的过程为什么要进行垃圾回收?没有用的内存需要释放,否则需

2021-01-29 10:30:11 126

原创 JVM stack与Heap的区别

stack用于静态内存分配,Heap用于动态内存分配Stack is used for static memory allocation and Heap for dynamic memory allocation, both stored in the computer’s RAM分配在Stack上的变量直接存储到内存中,对该内存的访问非常快,并且在程序编译时会处理该分配。 当一个函数或方法调用另一个函数,然后又调用另一个函数等时,所有这些函数的执行将保持挂起状态,直到最后一个函数返回其值为止.

2021-01-29 10:04:18 350

原创 JVM XMX与XMS参数

XMS : JVM初始分配的堆内存XMX : JVM最大允许分配的堆内存,按需分配堆内存分配:JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.la

2021-01-29 09:42:50 3542

原创 Flume 知识点总结

Flume组成,Put事务,Take事务Taildir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。File Channel:数据存储在磁盘,宕机数据可以保存。但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业。Memory Channel:数据存储在内存中,宕机数据丢失。传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据。Kafka Channel:减少了Flume的Sink阶段,提高了传输效率。

2021-01-29 09:20:57 342

原创 Bitmap存储入门

BitMap 的基本原理就是用一个bit 位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。案例举例:在Java里面一个int类型占4个字节,假如要对于10亿个int数据进行处理呢?10亿*4/1024/1024/1024=4个G左右,需要4个G的内存。如果能够采用bit存储, 那么占用空间10亿/8/1024/2014=119MB可以看出,使用Bitmap存储可以极大的节约空间.缺点Bitmap 有一个很大的问题就是,就算哪怕我只是存储一个数

2021-01-28 15:33:59 1430

原创 hive数据去重测试

需求对id进行去重create table test100( id int, month string, label int) row format delimited fields terminated by ',' stored as textfile;数据133,201901,1134,201812,1133,201809,1134,201803,1133,201801,1134,201801,1加

2021-01-28 11:31:03 253

原创 Spark StreamingContext创建方式

方式1//get a conf object val conf = new SparkConf().setAppName("SparkStreamWordcount").setMaster("local[2]") val duration: Duration = Seconds.apply(10) //获取StreamingContext val ssc = new StreamingContext(conf, duration) val dstream: ReceiverInput

2021-01-28 10:38:03 519

原创 idea maven丢失

点击菜单栏Help->Find Action(Ctrl+Shift+A),输入Maven projects

2021-01-28 10:23:08 260

原创 Spark Session 与 Spark Context的区别

Spark Session是Spark 2.0中Spark应用程序的统一入口点。 它提供了一种以较少数量的构造与各种spark功能交互的方法。 此时就不需要spark context, hive context, SQL context这些了,都包含在Spark Session中了.创建SparkSessionimport org.apache.spark.sql.SparkSessionval spark = SparkSession.builder.appName("SparkSessionEx

2021-01-28 09:53:01 4842

原创 Kafka日志刷新策略

Kafka的日志实际上是开始是在缓存中的,然后根据策略定期一批一批写入到日志文件中去,以提高吞吐率。属性名 含义 默认值log.flush.interval.messages 消息达到多少条时将数据写入到日志文件 10000log.flush.interval.ms 当达到该时间时,强制执行一次flush nulllog.flush.scheduler.interval.ms 周期性检查,是否需要将信息flush 很大的值...

2021-01-28 09:14:01 500

原创 Kafka日志清除策略

日志清除策略根据消息的保留时间,当消息在 kafka 中保存的时间超过了指定的时间,就会触发清理过程根据 topic 存储的数据大小,当 topic 所占的日志文件大小大于一定的阀值,则可以开始删除最旧的消息。kafka 会启动一个后台线程,定期检查是否存在可以删除的消息,通过 log.retention.bytes 和 log.retention.hours 这两个参数来设置,当其中任意一个达到要求,都会执行删除。日志压缩策略Kafka 还提供了日志压缩(Log Compaction)功能,通

2021-01-28 08:44:28 1094

原创 kafka 消息顺序写入服务器

max.in.flight.requests.per.connection该参数指定了生产者在收到服务器晌应之前可以发送多少个消息。它的值越高,就会占用越多的内存,不过也会提升吞吐量。把它设为1可以保证消息是按照发送的顺序写入服务器的,即使发生了重试。因为如果将两个批次发送到单个分区,并且第一个批次失败并被重试,但是,接着第二个批次写入成功,则第二个批次中的记录可能会首先出现,这样就会发生乱序。如果没有启用幂等功能,但仍然希望按顺序发送消息,则应将此设置配置为1。但是,如果已经启用了幂等,则无需显式

2021-01-28 08:32:08 296 2

原创 kafka retries参数入门

生产者从服务器收到的错误有可能是临时性的错误(比如分区找不到首领)。在这种情况下, retries参数的值决定了生产者可以重发消息的次数,如果达到这个次数,生产者会放弃重试并返回错误。默认情况下,生产者会在每次重试之间等待100ms ,可以通过retry.backoff.ms 参数来配置时间间隔。比如,设置了acks=all和min.insync.replicas=2。由于某种原因,所有follower都挂了,由于min.insync.replicas=2,所以生产者无法收到来自Broker端的ack。

2021-01-27 21:12:29 5313 2

原创 Kafka如何保证不丢数据?

就可靠性而言,基本没有任何东西可以保证做到百分之百的可靠。只能是通过一些策略来最大程度的保证可靠性。1.增大副本数。副本数越多,越能够保证数据的可靠性。但是副本数越多也会引起磁盘,网络带宽的浪费,还有性能的下降。所以,一般设置为3即可满足大多数的场景对可靠性的要求,部分银行之类的可能会设置成5.2.生产端对于一些由于网络故障等造成发送失败的可重试异常,可以通过设置重试次数(retries)来增加可靠性。3.生产者设置ack机制,为-1.但是也可能出现某个分区的数据的follower同步速度太慢都被踢

2021-01-27 20:45:45 846

原创 Log对象什么时候会更新LEO

LEO 全程Log End Offset,就是log最后一条记录下一条的offset值.log对象初始化的时候,需要创建一个新的LEO对象,并对其进行初始化。写入新消息的时候,当不断向Log对象插入消息时,LEO会向指针一样,不断的增加。Log对象发生日志切分的时候,当前日志段对象已满的时候,会关闭当前写入的日志段对象,创建一个全新的日志段对象,一旦日志发生切分,LEO中的起始位移值和段大小数据都要被更新,所以需要更新LEO对象Log截断的时候,日志中的部分消息被删除了,自然可能导致LEO值发生变化

2021-01-27 20:35:45 212

原创 Kafka Producer生产者原理

producer是线程安全的。两个线程生产者客户端由两条线程协调运行,分别是主线程和sender线程(发送线程)。主线程通过KafkaProducer创建消息 (ProducerRecord) ,然后通过拦截器,序列化器,分区器的作用之后将消息缓存到消息累加器中.分区器的作用默认DefaultPartitioner,默认进行hash%分区数求分区,如果key为null,就通过每条数据进行通过计数器累加,最大值是可用分区个数,轮询方式取余数发往可用的分区中RecordAccumulat

2021-01-27 20:16:24 264

原创 Kafka 如何保证消息全局有序

全局顺序就目前的应用范围来讲,可以列举出来的也就限于binlog日志传输,如mysql binlog日志传输要求全局的顺序,不能有任何的乱序。这种的解决办法通常是最为保守的方式:全局使用一个生产者全局使用一个消费者(并严格到一个消费线程)全局使用一个分区(当然不同的表可以使用不同的分区或者topic实现隔离与扩展)...

2021-01-27 19:00:07 2555 5

转载 spark-submit参数入门

./bin/spark-submit \ --master spark://192.168.1.1:7077 \ --num-executors 100 \ --executor-memory 6G \ --executor-cores 4 \ --total-executor-cores 400 \ ##standalone default all cores --driver-memory 1G \ --conf spark.default.parallelism=1000

2021-01-27 16:50:28 181

原创 kafka处理大数据包

与任何技术一样,Kafka 也有其局限性 - 其中之一是 1 MB 的最大封装大小。这只是默认设置,但不应轻易更改。有三种可能性:调整默认设置某些较大的消息 (10 MB) 也会影响群集的性能,因此不建议这样做。将数据集划分为较小的单元这是可能的,但会显著增加复杂性,同时增加使用者对内存的需求。 仅向 Kafka 群集发送对数据的引用,并存储在另一个容器中的数据包这是大多数应用程序的建议方法。它只是稍微增加了应用程序的复杂性,并保留了所有使Kafka如此有趣的功能。在下面,我将详细介绍不同的方法

2021-01-27 16:12:07 644

原创 kafka buffer.memory参数入门

buffer.memoryKafka的客户端发送数据到服务器,不是来一条就发一条,而是经过缓冲的,也就是说,通过KafkaProducer发送出去的消息都是先进入到客户端本地的内存缓冲里,然后把很多消息收集成一个一个的Batch,再发送到Broker上去的,这样性能才可能高。buffer.memory的本质就是用来约束Kafka Producer能够使用的内存缓冲的大小的,默认值32MB。如果buffer.memory设置的太小,可能导致的问题是:消息快速的写入内存缓冲里,但Sender线程来不及把R

2021-01-27 15:48:40 12504 1

原创 Kafka HW&LEO概念入门

HWHW (High Watermark)俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息。LEOLEO (Log End Offset),标识当前日志文件中下一条待写入的消息的offset。上图中offset为9的位置即为当前日志文件的 LEO,LEO 的大小相当于当前日志分区中最后一条消息的offset值加1.分区 ISR 集合中的每个副本都会维护自身的 LEO ,而 ISR 集合中最小的 LEO 即为分区的 HW,对消费者而言只能消费 HW

2021-01-27 15:06:16 780

原创 Kafka follower副本为什么不对外提供服务

在kafka中,实现副本的目的就是冗余备份,且仅仅是冗余备份,所有的读写请求都是由leader副本进行处理的。follower副本仅有一个功能,那就是从leader副本拉取消息,尽量让自己跟leader副本的内容一致。这个问题本质上是对性能和一致性的取舍。试想一下,如果follower副本也对外提供服务那会怎么样呢?首先,性能是肯定会有所提升的。但同时,会出现一系列问题。类似数据库事务中的幻读,脏读。比如你现在写入一条数据到kafka主题a,消费者b从主题a消费数据,却发现消费不到,因为消费者b去读取的

2021-01-27 14:35:46 877 1

原创 Presto为什么快

架构Presto查询引擎是一个Master-Slave的架构,由一个Coordinator节点,一个Discovery Server节点,多个Worker节点组成,Discovery Server通常内嵌于Coordinator节点中。Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。Worker节点负责实际执行查询任务。Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Wo

2021-01-26 19:33:41 1342

原创 kafka 生产者batch.size与linger.ms参数

Kafka需要在吞吐量和延迟之间取得平衡,可以通过下面两个参数控制.batch.size当多个消息发送到相同分区时,生产者会将消息打包到一起,以减少请求交互. 而不是一条条发送批次的大小可以通过batch.size 参数设置.默认是16KB较小的批次大小有可能降低吞吐量(批次大小为0则完全禁用批处理)。一个非常大的批次大小可能会浪费内存。因为我们会预先分配这个资源。例子比如说发送消息的频率就是每秒300条,那么如果比如batch.size调节到了32KB,或者64KB,是否可以提升发送消息

2021-01-26 14:12:53 20168 3

原创 kafka性能优化入门

当我们谈论 Kafka 性能调优时,需要考虑很少的配置参数。因此,为了提高性能,最重要的配置是控制磁盘刷新速率的配置。此外,我们可以根据组件划分这些配置。因此,让我们先谈谈Producer。因此,在生产者方面需要注意的最重要的配置是CompressionBatch sizeSync or Async而且,在消费者方面,重要的配置是Fetch size虽然,当我们考虑批处理大小时,总是会困惑多大batch size是最佳的。我们可以说,大批量大小可能是伟大的高吞吐量,它伴随着延迟问题。这意味

2021-01-26 13:50:00 351

空空如也

空空如也

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

TA关注的人

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