自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spark知识学习目录

0、前言该文章为Spark知识文章目录,便于查看,持续更新中。。。。。1、Spark基础Spark基础01-RDD和宽窄依赖Spark基础02-RDD数据集操作Spark基础03-关联外部数据源操作2、Spark源码-资源层启动Spark源码解析01-Master启动流程...

2021-05-14 16:48:03 189

原创 浅谈大数据-Hbase读写流程

一、Hbase架构Client:包含访问HBase的接口并维护cache来加快对HBase的访问与HRegionServer进行数据读写操作Zookeeper:用于存储Hbase集群的元数据信息(HBase的schema和table元数据)存储所有Region的寻址入口负责Master的HA机制,保障Master正常运行监控RegionServer的健康监控,并通知MasterMaster:为RegionServer分配Region负责维护RegionServe

2022-05-28 08:00:00 475

原创 Spark源码解析03-Submit提交流程及Driver启动流程

1、前言由前面的文章Spark基础06-Spark client和cluster提交流程我们已经知道了Spark client和cluster提交模式流程启动Driver进程,并向集群管理器注册应用程序集群资源管理器根据任务配置文件分配并启动ExecutorExecutor启动之后反向到Driver注册,Driver已经获取足够资源可以运行Driver开始执行main函数,Spark查询为懒执行,当执行到action算子时开始反向推算,根据宽依赖进行stage的划分,随后每一个stage对应一个

2021-06-02 08:28:57 1037

原创 Spark基础06-Spark client和cluster提交流程

0、前言我们先来看一下,spark提交任务的脚本,这里的deploy-mode就是本篇文章的重点,表示着提交模式,分别只有client客户端模式和cluster集群模式spark-submit --master yarn \--deploy-mode cluster \--driver-memory 1g \--executor-memory 1g \--executor-cores 1 \--class org.apache.spark.examples.SparkPi \${SPARK

2021-05-20 08:22:43 595

原创 Spark基础05-map和mapValue

0、前言真实面试题:使用了reduceByKey()和groupByKey()等xxxByKey()算子一定会产生shuffle吗?Spark 如何优化或者减少shuffle?1、map1.1、官方的解释输入函数针对源RDD所有元素进行操作,并且返回一个新的RDD1.2、代码示例val dataKv: RDD[String] = sc.parallelize(List( "hello world", "hello spark", "hello world", "he

2021-05-19 08:19:53 1986

原创 Spark基础04-RDD重分区操作repartition与coalesce

1、repartition1.1、官方解释返回一个新的RDD具有 (numPartitions) 指定的分区数,可以通过该方法进行RDD并行度(分区数)的修改如果要减少RDD分区数的话,建议使用使用coalesce方法,可以避免shuffle从上可看出,repartition 底层其实是调用了coalesce 方法,且shuffle参数指定为 true1.2、代码示例val data: RDD[Int] = sc.parallelize(1 to 10, 5) // 指定5个分区//

2021-05-18 12:43:59 1218

原创 Spark源码解析02-Worker启动流程以及与Master心跳通信

1、前言上一章我们已经跟踪完了Master的启动过程以及相应的一些RpcEnv环境准备工作,我们知道Master是RpcEndpoint,其它角色想要跟Master进行通信,就必须有Master的引用,既RpcEndpointRef类,同时RpcEndpointRef必须有发送消息的方法,而RpcEndpoint则必须有接收消息并且返回的方法,下面我们回到这两个类的源代码RpcEndpoint可以清晰的看到两个方法:// 接收消息不用返回def receive: PartialFunction[An

2021-05-17 08:38:14 222

原创 Spark源码解析01-Master启动流程

1、前言Master是spark中核心角色,涉及到集群通信以及资源调用申请,不仅要接收Driver,Worker的注册调用,还需要根据调度情况知道其他角色的状态,例如:Executor、Driver的状态等。通过以上的推断,Master需要有个传输层(TransportServer)专门用来发送或者接受服务,如下图由上图可见,如果使用传输的实例过多,势必会存在问题,如:这个实例消息A传给谁,实例消息B由哪个实例接收等,为此,我们可以在传输层上添加一个分发器(Dispatcher),如下图引入分发

2021-05-12 08:41:53 960 2

原创 Spark基础03-关联外部数据源操作

1、通过map关联外部数据源val data: RDD[Int] = sc.parallelize(1 to 10, 2)// 1、外关联、SQL查询// 问题:每一条数据都要建立一个数据连接,执行SQL,然后关闭连接val res01: RDD[String] = data.map( (value: Int) => { println("-----连接数据库-----") println(s"-----select $value-----") println("

2021-04-30 17:06:38 411 2

原创 Spark基础02-RDD数据集操作

0、拓展spark数据移动的两种方式:IO移动:指数据不需要区分每一条数据归属于哪个分区,既不需要通过partitionershuffle:指数据需要经过洗牌,计算其分区号,好确认数据区到哪个特定的分区如果有的行为不需要区分记录,直接本地IO去拉取数据,那么这种本地IO一定比先partitioner,再计算,shuffle落文件,最后IO去拉取速度快的多spark的人性化:spark提供很多封装的方法,都是经过尝试、经验推算出实现方式的,不需要人为干预遇到不懂的方法,点进去源码看

2021-04-30 17:01:08 308 1

原创 Spark基础01-RDD和宽窄依赖

1、RDD官方解释是:A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,partitioned collection of elements that can be operated on in parallel译文:弹性分布式数据集(rdd)是Spark中的基本抽象。表示可以并行操作的、不可变的、分区的元素集合从上截图可看出,RDD除了提供基础的m

2021-04-28 09:29:02 220

转载 spark性能优化指南--高级篇

spark性能优化指南–高级篇导读本文非原创,是由阅读美团技术团队于2016年05月12日 作者: 李雪蕤 发表的文章《Spark性能优化指南——高级篇》,收获甚多,以本文作为学习笔记。一、数据倾斜数据倾斜发生时的现象绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。这种情况很常见原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常栈,是我们写的业务

2021-03-25 11:01:37 315

转载 spark性能优化指南--基础篇

spark性能优化指南–基础篇导读本文非原创,是由阅读美团技术团队于2016年04月29日 作者: 李雪蕤 发表的文章《Spark性能优化指南——基础篇》,收获甚多,以本文作为学习笔记。一、开发过程中的调优1、避免创建重复使用的RDDRDD 的特性是:分区,不可变,并行操作不可变行可理解为RDD从创建开始就不会被改变,为此同一份数据,有且只创建一个RDD就足够使用,不需要创建多个// 错误的做法:对于同一份数据执行多次算子操作时,创建多个RDD。// 这里执行了两次textFile方法,

2021-03-25 10:59:53 272

原创 浅谈大数据-yarn执行流程(无图)

一、什么是yarn1、基本概念YARN (Yet Another Resource Negotiator,另一种资源协调者)从 Hadoop 2.0开始抽象出来的资源管理器,其引入的目的有两个:为了解决1.x中资源管理和任务调度的耦合问题为了方便其他程序扩展接入yarn2、拓展计算向数据移动:大数据系统下,数据的大小往往比编码的jar包大的多,将jar移动到数据所在的节点运行可以节省很多带宽跟时间资源管理:资源管理的通性往往需要有一个Master负责接收各个子节点汇报的资源信息常服务:

2021-02-20 20:49:42 275 2

原创 浅谈大数据-Shuffle流程(无图)

一、什么是shuffle在map输出之后,再到reduce接收之前的流程shuffle会频繁的IO操作(磁盘IO等),为此了解shuffle是有必要的shuffle可以分为map端和reduce端的操作二、shuffle之map端1、map端的操作分区写入环形缓冲区溢写到磁盘(排序-合并-写文件)归并spill文件形成大文件2、map端的流程< k, v > 数据在进入缓冲区前要分区,通过Partitioner.getPartition():< k, v,

2021-02-14 11:46:27 661 2

原创 浅谈大数据-HDFS的读写流程(无图)

一、block、packet、chunk(存储)block,最大的一个单元,hdfs上的块数据,文件上传前需要分块,因为块太小寻址时间占比过高,块太大map任务太少,作业执行时间速度变慢(传输)packet,第二大单元,它是client端向DN(DataNode),或者DN的PipeLine之间传数据的基本单元,默认64 kb(校验)chunk,最小单元,它是client端向DN,或者DN的PipeLine之间进行数据校验的基本单位,默认512 byte,因为作为校验,故每个chunk需要带有4 b

2021-02-12 15:38:04 229

原创 kafka_2.10-0.10.1.X 以及之后的版本

1 适用于 kafka_2.10-0.10.1.X 以及之后的版本该版本代码本人试验通过,kafka版本为:kafka_2.10-0.10.1.12 使用依赖注意:kafka版本必须是 0.10.1.1及以上版本,否则客户端和服务端都会报错客户端报错 Connection with /xx.xx.x.xx disconnected服务端报错 Caused by: java.lang.IllegalArgumentException: Invalid version for API key 3: 2

2021-02-09 11:05:42 513

原创 kafka_2.10-0.9.X 至 kafka_2.10-0.10.0.X 之间偏移量监控

1 适用于 kafka_2.10-0.9.X 至 kafka_2.10-0.10.0.X 之间的版本该版本代码本人试验通过,kafka版本为:kafka_2.10-0.10.0.1、虽然kafka_2.11-1.0.1也通过试验,但是不建议使用该版本代码,建议使用 0.10.1.X 之后的版本代码2 使用依赖注意:kafka版本不可使用 0.10.1.1,否则客户端和服务端都会报错客户端报错 Connection with /xx.xx.x.xx disconnected服务端报错 Caused

2021-02-09 11:05:19 274

原创 kafka_2.10-0.8.X 以及之前的版本

1 适用于 kafka_2.10-0.8.X 以及之前的版本该版本代码本人试验通过,kafka版本为:kafka_2.10-0.8.2.12 使用依赖<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.10</artifactId> <version>0.10.0.1</version> <

2021-02-09 11:04:43 562

原创 kafka各版本偏移量监控总结

1 前言因工作需要对kafka的偏移量进行监控,但是相信很多人跟我一样百度一番后却未必能找到适合自己所需的kafka监控代码,这里笔者总结了自己已经在项目中使用的代码,以及解决思路,希望为此对大家有所帮助2 代码思路整体代码思路如下:获取 topic 的分区信息,包括:broker,partitionId(主要就是这两个信息)等信息获取 partition 的 logSize获取 partition 已经被消费组 committed的 offset计算 lag = logSize - off

2021-01-24 15:08:19 465

原创 从一道String面试题到Java反射的学习

1 面试原题“String 可不可变?”若回答不可变则需要根据不可变性(后续文章进行分析)进行回答若回答可变则需要进入本文引入的话题通过反射改变 String 对象的内容2 代码解释 String str = new String("Hello the World !"); System.out.println("改变前的值:" + str);//改变前的值:Hello the World ! System.out.println("改变前的hashCode:" + str.

2020-10-05 21:31:12 149

空空如也

空空如也

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

TA关注的人

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