自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Hive报错:stage24 contains a task of very large size;the maximum recommended task size is 100kb

在一个SparkSQL任务中,由于每隔5分钟就要调度一次,偶尔在任务中会出现这个错误:stage24 contains a task of very large size;the maximum recommended task size is 100kb奇怪的是:这个错误有时候并不会干扰程序的正常运行,但是有时候又会导致程序的异常中断,所以在查阅了大量的相关资料之后,采用下面三个方法的组合:(1)调整shuffle partition的数:之前为了避免产生大量的小文件,只使用了10分区,后来调整

2022-03-01 15:13:42 3012

原创 Flink的时间语义总结

在实际的工作中慢慢摸索和使用Flink也有将近一年的时间了,这段时间打算好好总结和整理一下,有兴趣想要了解Flink流处理技术的,看我的这个博客合集就可以了。如果有什么问题可以多多讨论交流。以下进入正文。文章目录1. Flink支持的时间语义2. Watermark机制2.1 背景2.2 作用2.3 种类3.生成时间戳和水位线3.1 方式一:在Source算子中生成3.2 assignTimestampsAndWatermarks4.Watermark分类4.1 Periodic Watermark4.2

2021-09-28 23:02:35 271

原创 算法的时空复杂度的比较

算法的时空复杂度的比较1. 算法的时间复杂度在不耗费过多资源的前提下,或者说在相同资源的前提下,通过调整代码的执行逻辑,来降低程序的时间复杂度即程序的执行时间,可以极大地提升程序的执行效率。主要的算法的时间复杂度效率如下:2. 算法的空间复杂度(1)如果在程序中只是使用了变量,而没有借助其他的容器,则空间复杂度为O(1) 。(2)如果使用了数组,则空间复杂度与数组的长度成线性关系,为 O(n)(3)如果使用了递归,则空间复杂度为递归的最大深度。...

2021-08-01 11:36:26 1020

原创 Python常用的文本处理代码整理

最近在新入职的公司中,组里有很多人都在使用Python进行开发,自己也试着学习和整理了一下平时经常会使用到的工具类,其中有很多也是借鉴了网上的很多帖子,供大家参考。需要注意的是:在文件处理的各种问题中,别忘记的一点就是对字符集的指定,否则会1. txt转换成csvtarget = open(r"test.csv","a") #最终写入的csv文件的绝对路径with open(r"test.txt",'r') as lines : #读取的txt文件的绝对路径 for line in lin

2021-05-16 19:37:55 967

原创 Scala如何在for循环中实现continue和break效果

与Java不同,在Scala中是不能够直接使用continue和break两个关键字来实现跳过本次循环以及跳出当前循环体的,其替代方式主要如下:(1)continue效果:主要是通过循环守卫的方式来实现的,可参照如下代码:for(i <- 1 until 5 if i % 2 == 0){ println(i)} 2 4保护式为true则进入循环体内部,为false则跳过,类似于continue。(2)break效果:import scala.util.control.Break

2020-06-16 23:10:37 2289

原创 关于Scala中表达式的值

在Scala中,任何表达式都是有值的,这是其语言特性中比较特殊的地方,主要体现在一下三个方面:(1)if else条件表达式的值是每个分支的最后一行代码的结果:print(if(1 > 2) 1 else 2) --2print(if(true) println(1) else print(2)) --()(2)一般情况下,for循环和while循环表达式的值是Unit:var t = for(i <- 1 to 5){print(i)}print(t)var i = 1va

2020-06-16 22:41:43 226

原创 Scala字符串中==和eq的区别

在Scala中处理两个字符串时,==更加类似于Java中的equals,比较的是两个字符串的内容是不是相同的;而eq方法比较的是两个字符串的首地址的地址值是否相同。可以看下面这段代码:def main(args: Array[String]): Unit = { val s1 = "abc" val s2 = new String("abc") println(s1 == s2) println(s1.eq(s2))} 输出结果:truefalse...

2020-06-16 22:14:44 677

原创 Scala中Unit、Nothing和Null之间的区别概述

在Scala中,Unit、Nothing和Null是三个比较特殊的数据类型,三者之间的区别如下:Unit类似于Java中的void,表示没有返回值,用于不返回任何结果的方法的结果类型。只有一个实例值,就是()。Null表示返回值为空,是任意AnyRef类型的子类型;只有一个实例值,就是null。Nothing密封的抽象类,没有任何的实现的子类;主要作用是辅助类型的推导。在实际的开发中,主要是在方法抛出异常的时候会采用Nothing作为返回值,这样有一个好处,就是我们可以把返回的值(异常)

2020-06-16 21:53:42 1936

原创 Scala数据类型概述

Scala是完全面向对象的语言,这从其数据类型中就可以看出来。本文将对Scala中的数据类型进行简单的总结:(1)Scala中一切数据都是对象,都是Any的子类(2)Scala中的数据类型默认分为两大类:数值类型(AnyVal)和引用类型(AnyRef),不管是什么类型的数据都是对象(3)Scala中的数据类型仍然遵守低精度类型向高精度类型进行自动类型转换(4)在书写上,基本数据类型开头的字母都是大写的,类似于Java中的包装类关于Unit,Nothing和Null三者之间的区别将在另外一篇文章

2020-06-16 21:41:56 265

原创 Scala中的多种print输出方式

相较于Java的输出方式,Scala显得更加灵活和多样,首先需要了解的是,在Scala中,print方式的调用主要是调用预定义对象Predef的print方法,这个对象不用import就可以直接使用。以下是自己整理的几种常用的输出方式:(1)普通输出方式:object HelloWorld { def main(args: Array[String]): Unit = { var i:Int = 10 val j:Int = 20 println("Hello World"

2020-06-15 23:22:14 7842 1

原创 Scala中标识符命名的注意事项

Scala中的标识符与Java还是存在一些区别的,主要表现在以下几个方面:(1)组成:Scala中标识符只包括数字、大小写字母、操作符等,$是不可以出现在标识符中的(2)不能以数字开头,这一点与Java是一致的(3)如果以操作符开头的话,标识符中只能包含操作符(+ - * / # !等)(4)Scala中的关键字可以使用``进行区分:...

2020-06-15 22:58:07 255

原创 Scala中变量声明的注意事项

Scala的变量声明与Java既有相似之处也有其独特的语法,需要注意一下几点:(1)声明变量的时候,类型可以省略,编译器自动推导,即类型推导。(2)类型一旦确定之后是不可以进行修改的,说明Scala是强类型语言。(3)Scala中声明的变量必须显示赋初始值,这与Java是不一样的。(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改(在实际开发中能够使用val的地方尽可能不要使用var)...

2020-06-15 22:44:31 470

原创 Scala-class与object的区别

class、object和trait是Scala语言中非常重要的组成部分,是完全面向对象和函数式编程特性的重要载体,在此对其中比较常见的class和oject使用比较简洁的语言进行一下比较:classclass就是一个普通的类,编译后只会生成一个文件;可以和object同名(此时class被称为伴生类,object被称为伴生对象)object在编译之后会生成两个.class文件,主要目的是为了模拟java的静态方法:(1)当前类名.class(2)当前类名$.class:内部使用单利模式创建单一

2020-06-15 22:29:01 959

原创 Hive-map类型数据的声明、存储和读取

在Hive中,map是及其重要的数据类型之一,尤其是在处理生产环境中的事件埋点数据时会有举足轻重的地位,所以我们有必要了解和掌握其是如何存储和使用的。1.map类型数据的声明DROP TABLE IF EXISTS tmp.tmp_str_to_map;CREATE TABLE IF NOT EXISTS tmp.tmp_str_to_map(ocolumn string comment '原始字段',rcolumn map<string,string> comment 'map字段

2020-05-25 15:35:19 4766

原创 Spark的Shuffle机制

文章目录1. 相关概念2. HashShuffle2.1 未优化的HashShuffle2.2 优化后的HashShuffle3. SortShuffle3.1 普通的SortShuffle3.2 BypassSortShuffle1. 相关概念在Spark程序中,Stage按照阶段的不同划分为ShuffleMapStage&ResultStage;按照Stage的不同,里面的Tas...

2020-02-09 20:03:54 327

原创 图解Spark的任务调度机制

文章目录1. 相关概念2. 任务调度2.1 Stage级别任务调度:2.2 Task级别的调度2.2.1 Task的调度策略:2.2.1.1 FIFO调度策略:2.2.1.2 Fair调度策略:2.2.2 本地化调度2.2.3 失败重试和黑名单由于在实际开发中都是使用yarn-cluster模式,所以本文也以该模式为分析的前提。1. 相关概念首先明确几个在任务调度方面的常用概念:(1)Jo...

2020-02-09 19:08:04 287

原创 图解Spark的Standalone运行模式

从实际开发的角度来看的话,standalone部署模式并不多。一般都是使用yarn运行模式,在开发测试的过程中使用local模式。和yarn运行模式一样,standalone也分为client和cluster两种部署模式:(1)standalone-cluster模式:(2)standalone-client模式:两者的主要区别就在于Driver的运行模式不同。...

2020-02-09 14:30:01 256

原创 图解Spark的yarn-client运行模式

在Spark的yarn-client运行模式下,程序在提交之后会先后创建三个进程,分别为:SparkSubmit,ExecutorLauncher和CoarseGrainedExecutorBackend。下面以图解的方式分析其具体的执行流程:下面是基于对源码的分析对上面的执行流程的具体解释:需要注意的是:ExecutorLauncher进程和ApplicationMaster进程虽然进程...

2020-02-09 14:17:01 823

原创 完全图解Spark的yarn-cluster运行模式

在yarn-cluster部署模式下,程序在提交运行之后会先后创建三个进程,分别为:SparkSubmit,ApplicationMaster和CoarseGrainedExecutorBackend。整体运行流程如下:接下来依照对源码的分析,图解各个进程的具体执行流程:(1)SparkSubmit:(2)ApplicationMaster:(3)CoarseGrainedExec...

2020-02-08 21:53:48 453

原创 图解Spark中CoarseGrainedExecutorBackend的执行流程

Spark在Yarn-Cluster部署模式下,程序在提交之后会依次创建三个进程:SparkSubmit,ApplicationMaster和CoarseGrainedExecutorBackend。本文主要在对源码进行分析之后以图解的方式展示CoarseGrainedExecutorBackend的执行流程。由上图的执行流程可以看出,CoarseGrainedExecutorBackend进...

2020-02-08 21:44:25 842

原创 图解Spark中ApplicationMaster的执行流程

在Yarn-Cluster部署模式下,程序在提交之后会依次启动三个进程:SparkSubmit,Application和CoarseGrainedExecutorBackend。在本文中主要分析ApplicationMaster的执行流程:从ApplicationMaster源码执行示意图中可得知,ApplicationMaster与Hadoop的YARN中的ApplicationMaster...

2020-02-08 20:23:19 1917

原创 图解Spark程序运行时SparkSubmit的执行流程

在Spark的yarn-cluster运行模式下,当使用spark-submit脚本提交程序之后,会依次创建三个进程,它们分别是:SparkSubmit,ApplicationMaster和CoarseGrainedExecutorBackend,在本文中我们先分析一下SparkSubmit的生命周期:需要注意的是,Client并不是一个进程;另外虽然调用了其run方法,但是并没有创建子线程,...

2020-02-07 23:18:09 543 1

原创 图解Spark中Worker的启动过程

main方法:(1)创建RpcEnv(2)获取masterAddress(3)创建Worker的EndpointonStart方法:(1)在启动之后,向Master以ask的方式进行注册(2)在接收到Master的响应信息之后,进行处理(3)每15秒以send的方式向Master发送心跳需要注意的是:在start-all.sh脚本执行的时候,也有可能是Worker先启动而Mast...

2020-02-07 21:24:49 420

原创 Spark源码分析-Master的onStart()方法是什么时候调用的?

一般我们都知道,Master的生命周期方法为:constructor->onstart->receive*->onStop;但是在Master的main方法中并没有对onStart的直接调用,那么onStart方法是什么时候被调用的呢?这其实与Spark的底层的Netty通信架构有关。在Master的main方法中: val rpcEnv: RpcEnv = RpcEnv....

2020-02-07 20:51:19 414 1

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

文章目录1.main方法1.1 startRpcEnvAndEndpoint()1.1.1 create1.1.2 setupEndpoint()1.2 Constructor2. onStart()方法大致的整体启动流程如下:1.main方法在StandAlone模式下,Spark集群中存在两种重要的节点,分别是Master和Worker。那么作为集群管理器的Master到底是怎样启动的...

2020-02-07 20:03:43 326

原创 Scala中样例类和普通类的区别

Scala中样例类的设计主要是为了代替Java语言中的JavaBean和RPC通信使用,普通类和样例类之间的区别总结如下:首先创建一个样例类:object CaseClassDemo { def main(args: Array[String]): Unit = { val user:User = User("zhangsan",26) }}case class ...

2020-02-06 15:52:28 2636

原创 Scala中Ordering和Ordered的区别

一般学习Scala语言的人,都是有Java语言基础的。我们知道在Java语言中对象的比较有两个接口,分别是Comparable和Comparator。那么它们之间的区别是什么呢?实现Comparable接口的类,重写compareTo()方法后,其对象自身就具有了可比较性;实现comparator接口的类,重写了compare()方法后,则提供一个第三方比较器,用于比较两个对象。由于S...

2020-02-06 15:30:05 436

原创 Scala集合中运算符操作的区别总结

在Scala的集合操作中,会经常见到诸如:::,+:,:+等运算符的操作,掌握彼此之间的区别很重要:下面是详细的示例:(1):: 符号:作用是向集合的头部添加元素list.::(10)和10::list的作用是等价的。object OperatorTest { def main(args: Array[String]): Unit = { val list = List(...

2020-02-06 15:10:34 269

原创 Scala中下划线的作用总结

在Scala语言中,下划线的使用可谓是无处不在,在此将其用法暂时总结如下:(1)可以作为变量的名称,但是不可以print(2)变量的初始值(3)导入包中的所有类(作为包引入的通配符)(4)在导入某个包中的类时屏蔽某个类//例如在java.util包下将Date屏蔽,import java.util.{Date =>_,_}(5)将函数作为一个整体返回(6)在集合操作中,如果...

2020-02-06 13:49:33 494

原创 The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH

The specified datastore driver (“com.mysql.jdbc.Driver”) was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver已解决要执行的代码如下:object HiveRead { def mai...

2020-01-13 19:25:00 3773

空空如也

空空如也

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

TA关注的人

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