
bigdata
文章平均质量分 66
白枭
专注、极致、口碑、快
展开
-
简单搞定数仓搭建:数仓分层
我们建议将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层(ADS,Application Data Service)。数据仓库的分层和各层级用途如下图所示。数据引入层ODS(Operation Data Store):存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。主要完成基础数据引入到MaxCompute的职责,同时记录基础数据的历史变化。转载 2021-07-23 19:39:32 · 638 阅读 · 0 评论 -
简单搞定Spark性能优化:常见异常解决(三)
第一部分内容链接:https://blog.youkuaiyun.com/github_36444580/article/details/117037685die原创 2021-05-31 14:17:46 · 5295 阅读 · 0 评论 -
简单搞定Spark性能优化:常见异常解决(二)
第一部分内容链接:https://blog.youkuaiyun.com/github_36444580/article/details/11703768511.ERROR shuffle.RetryingBlockFetcher: Failed to fetch block shuffle_7_18444_7412, and will not retry原因:Executor被kill,无法拉取该block。可能是开启AE特性时数据倾斜造成的,其他executor都已完成工作被回收,只有倾斜的exec..原创 2021-05-24 11:13:07 · 2632 阅读 · 4 评论 -
简单搞定Spark性能优化:常见异常解决(一)
spark日志查看方法分享一个博客:https://blog.youkuaiyun.com/qq_33588730/article/details/109353336异常集1.org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow原因:kryo序列化缓存空间不足。解决方法:增加参数,--confspark.kryoserializer.buffer.max=2047m。2.o...原创 2021-05-19 17:34:13 · 1437 阅读 · 2 评论 -
简单搞定Kafka: 工作流程分析
Kafka生产过程分析写入方式producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)。分区(Partition)消息发送时都被发送到一个topic,其本质就是一个目录,而topic是由一些PartitionLogs(分区日志)组成,其组织结构如下图所示:我们可以看到,每个Partition中的消息都是有序的,生产的消息被不断...原创 2021-04-26 17:02:50 · 171 阅读 · 0 评论 -
简单搞定Kafka:消费过程分析
高级API1)高级API优点高级API 写起来简单不需要去自行去管理offset,系统通过zookeeper自行管理不需要管理分区,副本等情况,系统自动管理消费者断线会自动根据上一次记录在zookeeper中的offset去接着获取数据(默认设置1分钟更新一下zookeeper中存的的offset)可以使用group来区分对同一个topic 的不同程序访问分离开来(不同的group记录不同的offset,这样不同程序读取同一个topic才不会因为offset互相影响)2)高级AP转载 2021-04-19 15:14:45 · 171 阅读 · 0 评论 -
简单搞定Kafka:分布式集群部署
环境准备集群规划 hadoop102 hadoop103 hadoop104 zk zk zk kafka kafka kafka jar包下载下载地址:http://kafka.apache.org/downloads.html虚拟机准备1)准备3台虚拟机2)配置ip地址3)配置主机名称4)3台主机分别关闭防火墙安装jdk...原创 2021-04-12 14:22:55 · 181 阅读 · 0 评论 -
简单搞定Kafka:Consumer均衡算法
kafka的Consumer均衡算法有一个topic:test,然后这个topic的partition和他们所在的broker的图如下:1.其中 broker有两个,也就是服务器有两台。2.partition有6个,分布按照如图所示,按照哈希取模的算法分配。3.消费者有8个,他们属于同一个消费组。如果按照如图所示,那么这一个消费组中的消费者会怎么取kafka的数据呢?其实kafka的消费端有一个均衡算法,算法如下:1.A=(partition数量/同分组消费者总个数)..原创 2021-04-06 15:38:21 · 386 阅读 · 0 评论 -
简单搞定Spark性能优化:数据倾斜调优(二)
shuffle调优调优概述大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作 业的性能更上一层楼,就有必要对shuffle过程进行调优。但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以 及数据倾斜,shuffle调优只能在整个Spark的性能调优中占到一小部分而已。因此大家务必把握住调优的基本原则,千万不要舍本逐末。下面我们就给 大家详细讲解shuffle的原理,以及相关参数转载 2021-04-06 14:50:37 · 155 阅读 · 0 评论 -
简单搞定Spark性能优化:数据倾斜调优(一)
数据倾斜调优一、调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。二、数据倾斜发生时的现象绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。这种情况很常见。 原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出原创 2021-03-30 16:30:52 · 175 阅读 · 1 评论 -
Spark核心编程:Spark运行原理
一、spark重要角色1、Driver2、Master3、Worker4、Executor5、Task二、图解运行原理原创 2021-03-23 15:35:30 · 149 阅读 · 0 评论 -
Spark核心编程:wordcount程序原理深度剖析
一、wordcount编码val conf = new SparkConf().setAppName("WordCount")val sc = new JavaSparkContext(conf)val lines = sc.textFile("hdfs://spark1:9000/spark.txt")val words = lines.flatMap(line => line.split(" "))val pairs = words.map(word => (word,原创 2021-03-15 11:01:04 · 273 阅读 · 0 评论 -
Spark核心编程:Spark基本工作原理与RDD
一、spark工作原理1、分布式2、主要基于内存(少数情况基于磁盘)3、迭代式计算二、RDD以及其特点1、RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。2、RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。(分布式数据集)3、RDD通常通过Hadoop上的文件,即HDFS文件或者Hive表,来进行创建;.原创 2021-03-09 11:59:05 · 291 阅读 · 0 评论 -
简单搞定Spark性能优化:性能优化概览
一、spark性能优化概览由于Spark的计算本质是基于内存的,所以Spark性能程序的性能可能因为集群中的任何因素出现瓶颈:CPU、网络带宽、或者是内存。如果内存能够容纳得下所有的数据,那么网络传输和通信就会导致性能出现瓶颈。但是如果内存比较紧张,不足以放下所有的数据(比如在针对10亿以上的数据量进行计算时),还是需要对内存的使用进行性能优化的,比如说使用一些手段来减少内存的消耗。Spark性能优化,其实主要就是在于对内存的使用进行调优。因为通常情况下来说,如果你的Spark应用程序计算的数据..原创 2021-03-01 14:55:30 · 235 阅读 · 0 评论 -
简单搞定Spark性能优化:诊断内存的消耗
一、内存都花哪了?1、每个Java对象,都有一个对象头,会占用16个字节,主要是包括了一些对象的元信息,比如指向它的类的指针。如果一个对象本身很小,比如就包括了一个int类型的field,那么它的对象头实际上比对象自己还要大。2、Java的String对象,会比它内部的原始数据,要多出40个字节。因为它内部使用char数组来保存内部的字符序列的,并且还得保存诸如数组长度之类的信息。而且因为String使用的是UTF-16编码,所以每个字符会占用2个字节。比如,包含10个字符的String,会占用60原创 2021-02-22 10:55:56 · 344 阅读 · 0 评论 -
简单搞定Spark性能优化:优化数据结构
一、优化数据结构背景要减少内存的消耗,除了使用高效的序列化类库以外,还有一个很重要的事情,就是优化数据结构。从而避免Java语法特性中所导致的额外内存的开销,比如基于指针的Java数据结构,以及包装类型。有一个关键的问题,就是优化什么数据结构?其实主要就是优化你的算子函数,内部使用到的局部数据,或者是算子函数外部的数据。都可以进行数据结构的优化。优化之后,都会减少其对内存的消耗和占用。二、如何优化数据结构1、优先使用数组以及字符串,而不是集合类。也就是说,优先用array,而不是Arr.原创 2021-02-02 15:03:11 · 140 阅读 · 0 评论 -
简单搞定Spark性能优化:持久化级别
一、使用序列化的持久化级别除了对多次使用的RDD进行持久化操作之外,还可以进一步优化其性能。因为很有可能,RDD的数据是持久化到内存,或者磁盘中的。那么,此时,如果内存大小不是特别充足,完全可以使用序列化的持久化级别,比如MEMORY_ONLY_SER、MEMORY_AND_DISK_SER等。使用RDD.persist(StorageLevel.MEMORY_ONLY_SER)这样的语法即可。这样的话,将数据序列化之后,再持久化,可以大大减小对内存的消耗。此外,数据量小了之后,如果要写入磁盘,那么磁盘原创 2021-01-25 17:02:54 · 196 阅读 · 0 评论 -
简单搞定Spark性能优化:Java虚拟机垃圾回收调优
一、java虚拟机垃圾回收调优背景如果在持久化RDD的时候,持久化了大量的数据,那么Java虚拟机的垃圾回收就可能成为一个性能瓶颈。因为Java虚拟机会定期进行垃圾回收,此时就会追踪所有的java对象,并且在垃圾回收时,找到那些已经不在使用的对象,然后清理旧的对象,来给新的对象腾出内存空间。垃圾回收的性能开销,是跟内存中的对象的数量,成正比的。所以,对于垃圾回收的性能问题,首先要做的就是,使用更高效的数据结构,比如array和string;其次就是在持久化rdd时,使用序列化的持久化级别,而且用Kr原创 2021-01-18 14:56:54 · 253 阅读 · 0 评论 -
简单搞定Spark性能优化:并行度设置
一、并行度设置的必要性实际上Spark集群的资源并不一定会被充分利用到,所以要尽量设置合理的并行度,来充分地利用集群的资源。才能充分提高Spark应用程序的性能。Spark会自动设置以文件作为输入源的RDD的并行度,依据其大小,比如HDFS,就会给每一个block创建一个partition,也依据这个设置并行度。对于reduceByKey等会发生shuffle的操作,就使用并行度最大的父RDD的并行度即可。可以手动使用textFile()、parallelize()等方法的第二个参数来设置并行度原创 2021-01-12 18:07:42 · 1511 阅读 · 0 评论 -
简单搞定Spark性能优化:广播共享数据
一、广播共享数据如果你的算子函数中,使用到了特别大的数据,那么,这个时候,推荐将该数据进行广播。这样的话,就不至于将一个大数据拷贝到每一个task上去。而是给每个节点拷贝一份,然后节点上的task共享该数据。这样的话,就可以减少大数据在节点上的内存消耗。并且可以减少数据到节点的网络传输消耗。二、广播变量的原理广播变量,初始的时候,就在Drvier上有一份副本。task在运行的时候,想要使用广播变量中的数据,此时首先会在自己本地的Executor对应的BlockManager中,尝试获取.原创 2021-01-05 11:43:27 · 179 阅读 · 0 评论 -
简单搞定Spark性能优化:数据本地化
一、数据本地化背景数据本地化对于Spark Job性能有着巨大的影响。如果数据以及要计算它的代码是在一起的,那么性能当然会非常高。但是,如果数据和计算它的代码是分开的,那么其中之一必须到另外一方的机器上。通常来说,移动代码到其他节点,会比移动数据到代码所在的节点上去,速度要快得多,因为代码比较小。Spark也正是基于这个数据本地化的原则来构建task调度算法的。数据本地化,指的是,数据离计算它的代码有多近。基于数据距离代码的距离,有几种数据本地化级别:1、PROCESS_LOCAL:数据和计算它原创 2020-12-28 14:32:49 · 258 阅读 · 0 评论 -
简单搞定spark shuffle算子性能优化
一、reduceByKey和groupByKey对比val counts = pairs.reduceByKey(_ + _)val counts = pairs.groupByKey().map(wordCounts => (wordCounts._1, wordCounts._2.sum))如果能用reduceByKey,那就用reduceByKey,因为它会在map端,先进行本地combine,可以大大减少要传输到reduce端的数据量,减小网络传输的开销。只有在reduceBy原创 2020-12-23 12:35:40 · 152 阅读 · 0 评论 -
简单搞定 Spark RDD常用算子
一、transformation和action 介绍Spark支持两种RDD操作:transformation和action。transformation操作会针对已有的RDD创建一个新的RDD;而action则主要是对RDD进行最后的操作,比如遍历、reduce、保存到文件等,并可以返回结果给Driver程序。例如,map就是一种transformation操作,它用于将已有RDD的每个元素传入一个自定义的函数,并获取一个新的元素,然后将所有的新元素组成一个新的RDD。而reduce就是一种act原创 2020-12-14 14:17:55 · 143 阅读 · 0 评论 -
简单搞定Spark RDD持久化
一、RDD持久化原理:Spark非常重要的一个功能特性就是可以将RDD持久化在内存中。当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition持久化到内存中,并且在之后对该RDD的反复使用中,直接使用内存缓存的partition。这样的话,对于针对一个RDD反复执行多个操作的场景,就只要对RDD计算一次即可,后面直接使用该RDD,而不需要反复计算多次该RDD。巧妙使用RDD持久化,甚至在某些场景下,可以将spark应用程序的性能提升10倍。对于迭代式算法和快速交互式应用来说,R原创 2020-12-07 17:56:56 · 301 阅读 · 0 评论 -
简单搞定 Executor 原理剖析与源码分析
一、图解 Executor 原理剖析与源码分析1、CoarseGrainedExecutorBackendExecutor 的守护进程:Executor对象的创建及维护是由CoarseGrainedExecutorBackend负责的,CoarseGrainedExecutorBackend在spark运行期是一个单独的进程。2、Executor注册机制3、task运行机制...原创 2020-12-02 18:22:05 · 139 阅读 · 0 评论 -
简单搞定Spark Master主备切换机制原理剖析与源码分析
一、Master 原理剖析与源码分析1、主备切换机制原理剖析与源码分析2、注册机制原理剖析与源码分析原创 2020-11-23 17:50:52 · 171 阅读 · 1 评论 -
简单搞定spark shuffle性能优化
一、shuffle性能优化,配置项new SparkConf().set("spark.shuffle.consolidateFiles", "true")spark.shuffle.consolidateFiles:是否开启shuffle block file的合并,默认为falsespark.reducer.maxSizeInFlight:reduce task的拉取缓存,默认48mspark.shuffle.file.buffer:map task的写磁盘缓存,默认32kspark原创 2020-11-16 12:06:50 · 321 阅读 · 0 评论 -
Spark内核源码深度剖析:BlockManager原理剖析与源码分析
Spark内核源码深度剖析:BlockManager原理剖析与源码分析原创 2020-11-10 12:03:23 · 145 阅读 · 0 评论