- 博客(63)
- 收藏
- 关注
原创 为啥你的SQL慢?为啥你建的索引常失效?
怎么知道该sql是全表扫描呢?通过explain命令可以清楚MySQL是如何处理sql语句的。id : 查询序列号为1select_type : 查询类型是简单查询,简单的select语句没有union和子查询table :表是 itdragon_order_list。partitions :没有分区type : 连接类型,all表示采用全表扫描的方式。possible_keys...
2019-10-15 18:06:18
433
1
原创 Spark:spark-evn.sh参数详解
SPARK_MASTER_IP指定master进程所在的机器的ip地址SPARK_MASTER_PORT指定master监听的端口号(默认是7077)SPARK_MASTER_WEBUI_PORT指定master web ui的端口号(默认是8080)SPARK_MASTER_OPTS设置master的额外参数,使用"-Dx=y"设置各个参数。例:export SPARK_MAST...
2019-06-17 10:42:52
703
原创 Scala:高级特性
跳出循环语句使用boolean控制变量var flag = truevar res = 0for (i <- 0 until 10 if flag) { res += i if (i == 4) flag = false}在嵌套函数中使用returndef add_outer() = { var res = 0 def add_inner() { ...
2019-06-05 10:16:20
252
原创 Spark Streaming:工作原理
Spark Streaming简介Spark Streaming是Spark Core API的一种扩展,它可以用于进行大规模、高吞吐量、容错的实时数据流的处理。它支持从很多种数据源中读取数据,比如Kafka、Flume、Twitter、ZeroMQ、Kinesis或者是TCP Socket。并且能够使用类似高阶函数的复杂算法来进行数据处理,比如map、reduce、join和window。处理...
2019-02-26 11:26:35
2493
原创 Spark Streaming:DStream的transformationy及output操作
updateStateByKeyupdateStateByKey操作允许您在使用新的信息持续更新时保持任意状态public class UpdateStateByKeyWordCount { public static void main(String[] args) throws InterruptedException { SparkConf conf = new SparkCo...
2019-02-19 11:39:50
359
原创 Spark Streaming:输入DStream之Kafka数据源
基于Receiver的方式这种方式使用Receiver来获取数据。Receiver是使用Kafka的高层次Consumer API来实现的。receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming启动的job会去处理那些数据在默认的配置下,这种方式可能会因为底层的失败而丢失数据。如果要启用高可靠机制,让数据零丢失,就必须启用S...
2019-02-15 16:05:04
443
原创 Spark SQL:运行原理
Spark SQL的运行过程SQL在Spark执行要经历以下几步:用户提交SQL文本解析器将SQL文本解析成逻辑计划分析器结合Catalog对逻辑计划做进一步分析,验证表是否存在,操作是否支持等优化器对分析器分析的逻辑计划做进一步优化,如将过滤逻辑下推到子查询,查询改写,子查询共用等Planner再将优化后的逻辑计划根据预先设定的映射逻辑转换为物理执行计划物理执行计划做RDD计算...
2019-02-13 16:36:44
1957
原创 Spark SQL:UDF和UDAF
UDF用户定义函数(User-defined functions, UDFs)是大多数 SQL 环境的关键特性,用于扩展系统的内置功能。 UDF允许开发人员通过抽象其低级语言实现来在更高级语言(如SQL)中启用新功能。 Apache Spark 也不例外,并且提供了用于将 UDF 与 Spark SQL工作流集成的各种选项。object UDF { def main(args: Arra...
2019-01-23 18:03:26
593
原创 Spark:shuffle数据倾斜
数据倾斜Shuffle的时候,将各个节点上相同的key拉取到某个节点的一个task进行处理,比如按照key进行聚合或join等操作,如果某个key对应的数据量特别大的话,就会发生数据倾斜现象。数据倾斜就成为了整个task运行时间的短板。因此出现数据倾斜的时候,Spark作业看起来会运行得非常缓慢,甚至可能因为某个task处理的数据量过大导致内存溢出。数据倾斜的解决方案方案一:使用Hive...
2019-01-21 15:01:58
1164
原创 Spark:性能优化
诊断内存的消耗判断spark程序消耗了多少内存首先,自己设置RDD的并行度,有两种方式:要不然,在parallelize()、textFile()等方法中,传入第二个参数,设置RDD的task / partition的数量;要不然,用SparkConf.set()方法,设置一个参数,spark.default.parallelism,可以统一设置这个application所有RDD的part...
2019-01-21 10:49:51
358
原创 Spark:内存分析与优化
概述执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各个 Executor 进程间协调任务的调度,后者负责在工作节点上执行具体的计算任务,并将结果返回给 Driver,同时为需要持久化的 RDD 提供存储功能。由于 ...
2019-01-18 15:54:12
1168
原创 Spark:Checkpoint原理剖析与源码分析
一、概述Checkpoint是什么?Spark在生产环境下经常会面临Tranformations的RDD非常多(例如一个Job中包含1万个RDD)或者具体Tranformation产生的RDD本身计算特别复杂和耗时(例如计算时常超过1~5个小时),此时我们必须考虑对计算结果数据的持久化。如果采用persist把数据放在内存中的话,虽然是最快速的但是也是最不可靠的;如果放在磁盘上也不是完全可靠的...
2019-01-11 17:15:23
1019
原创 Spark:BlockManager原理剖析与源码分析
BlockManager是Spark的分布式存储系统,与我们平常说的分布式存储系统是有区别的,区别就是这个分布式存储系统只会管理Block块数据,它运行在所有节点上。BlockManager的结构是Maser-Slave架构,Master就是Driver上的BlockManagerMaster,Slave就是每个Executor上的BlockManager。BlockManagerMaster负责...
2019-01-10 15:39:48
3499
1
原创 Spark:Shuffle原理剖析与源码分析
spark中的Shuffle是非常重要的,shuffle不管在Hadoop中还是Spark中都是重重之重,特别是在Spark shuffle优化的时间。更是非常的重要。普通shuffle操作的原理剖析(spark 2.x弃用)每一个Job提交后都会生成一个ResultStage和若干个ShuffleMapStage,其中ResultStage表示生成作业的最终结果所在的Stage;Result...
2019-01-08 10:12:40
1531
原创 Spark:Task原理剖析与源码分析
在Spark中,一个应用程序要想被执行,肯定要经过以下的步骤:从这个路线得知,最终一个job是依赖于分布在集群不同节点中的task,通过并行或者并发的运行来完成真正的工作。由此可见,一个个的分布式的task才是Spark的真正执行者。下面先来张task运行框架整体的对Spark的task运行有个大概的了解。task运行之前的工作是Worker启动Executor,接着Executor准备好...
2018-12-29 17:19:30
602
1
原创 Spark:Executor原理剖析与源码分析
Executor原理示意图Executor进程的启动worker中为application启动的executor,实际上是启动的这个CoarseGrainedExecutorBackend进程.源码分析:第一步:CoarseGrainedExecutorBackend源码源码地址:org.apache.spark.executor.CoarseGrainedExecutorBack...
2018-12-29 11:09:32
290
原创 Spark:TaskScheduler原理剖析与源码分析
TaskScheduler是一个接口,DAGScheduler在提交TaskSet给底层调度器的时候是面向接口TaskScheduler。TaskSchduler的核心任务是提交Taskset到集群运算并汇报结果源码分析第一步:TaskScheduler 提交tasks的入口 submitTasks源码地址:org.apache.spark.scheduler.TaskSchedulerIm...
2018-12-28 18:15:35
609
原创 Spark:DAGScheduler原理剖析与源码分析
Job触发流程原理与源码解析wordcount案例解析,来分析Spark Job的触发流程代码:var linesRDD= sc.textFile('hdfs://')SparkContext中textFile方法 /** * hadoopFile方法调用会创建一个HadoopRDD,其中的元素pair是(key,value) * key是hdfs或者文本文件的每一行的of...
2018-12-27 16:04:19
713
原创 Spark:Worker原理剖析与源码分析
解释:Master要求Worker启动Driver和ExecutorWorker启动Driver的一个基本的原理,Worker会启动一个线程DriverRunner,然后DriverRunner会去负责启动Driver进程,然后在之后对Driver进程进行管理Worker启动Executor的一个基本的原理,Worker会启动一个线程ExecutorRunner,然后ExecutorRu...
2018-12-24 17:50:18
291
原创 Spark:Master原理剖析与源码分析
Master主备切换Spark原生的standalone模式是支持主备切换的,也就是说master可以配置两个,当Action Master因故障挂了的时候,系统会自动将Standby Master 切换成 Active Master。Master的准备切换分为两种:一种是基于文件系统的,spark提供目录保存spark Application和worker的注册信息,并将他们的恢复状态写...
2018-12-20 17:42:37
1043
原创 Spark:SparkContext原理剖析与源码分析
在Spark中,SparkContext是Spark所有功能的一个入口,你无论是用java、scala,甚至是python编写都必须要有一个SparkContext,它的主要作用,包括初始化Spark应用程序所需的一些核心组件,包括 调度器(DAGSchedule、TaskScheduler),还会去到Spark Master节点上进行注册,等等首先通过SparkContext方法,进行Ta...
2018-12-19 15:37:48
491
原创 Spark:基于Yarn的两种提交模式深度剖析
Spark的三种提交模式Spark内核架构,其实就是第一种模式,standalone模式,基于Spark自己的Master-Worker集群第二种,是基于YARN的yarn-cluster模式第三种,是基于YARN的yarn-client模式。如果,你要切换到第二种和第三种模式,很简单,将我们之前用于提交spark应用程序的spark-submit脚本,加上–master参数,设置为y...
2018-12-18 18:24:27
340
原创 Spark:宽依赖与窄依赖深度剖析
窄依赖窄依赖就是指父RDD的每个分区只被一个子RDD分区使用,子RDD分区通常只对应常数个父RDD分区,如下图所示:窄依赖有分为两种:一种是一对一的依赖,即OneToOneDependency还有一个是范围的依赖,即RangeDependency,它仅仅被org.apache.spark.rdd.UnionRDD使用。UnionRDD是把多个RDD合成一个RDD,这些RDD是被拼接而成...
2018-12-18 16:14:03
367
1
原创 Spark:内核架构深度剖析
1、 术语定义1、Application:Spark应用程序指的是用户编写的Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。Spark应用程序,由一个或多个作业JOB组成,如下图所示:2、Driver:驱动程序Spark中的Driver即运行上述Application的Main()函数并且创建SparkContext,其中创建Spark...
2018-12-18 15:32:28
314
原创 Spark:排序机制
排序wordcount的单词统计例子,关键是,如何对统计的单词按照单词个数来进行排序?JavaRDD&amp;amp;amp;amp;amp;lt;String&amp;amp;amp;amp;amp;gt; lines = sc.textFile(&amp;amp;amp;amp;quot;spark.txt&amp;amp;amp;amp;quot;);JavaRDD&amp;amp;amp;amp;amp;
2018-12-17 18:04:34
786
原创 Spark:广播变量和累加器
Spark为此提供了两种共享变量,一种是Broadcast Variable(广播变量),另一种是Accumulator(累加变量)。Broadcast Variable会将使用到的变量,仅仅为每个节点拷贝一份,更大的用处是优化性能,减少网络传输以及内存消耗。Accumulator则可以让多个task共同操作一份变量,主要可以进行累加操作。Broadcast VariableSpark提供的...
2018-12-13 16:57:54
265
原创 Spark:RDD操作和持久化
创建RDD进行Spark核心编程时,首先要做的第一件事,就是创建一个初始的RDD。该RDD中,通常就代表和包含了Spark应用程序的输入源数据。然后在创建了初始的RDD之后,才可以通过Spark Core提供的transformation算子,对该RDD进行转换,来获取其他的RDDSpark Core提供了三种创建RDD的方式使用程序中的集合创建RDD使用本地文件创建RDD使用HDFS...
2018-12-12 17:31:02
864
原创 Spark:基本工作原理与RDD
Spark的基本工作原理我们从宏观讲解Spark的基本工作原理,帮助你全面了解布局1、客户端:客户端也就是专业们常说的Client端,这里的是表示我们在本地编写Spark程序,然后必须找一个能够连接Spark集群,并提交程序进行运行的机器2、读取数据:在准备运行Spark程序的同时,是不是也要有数据来源进行处理的呢,这里我们介绍几种常见的读取数据来源,是Hadoop集群中的HDFS、H...
2018-12-06 17:27:12
226
原创 CentOS 6.5 :配置
网络配置先临时性设置虚拟机ip地址:ifconfig eth0 192.168.1.110,在/etc/hosts文件中配置本地ip(192.168.1.110)到host的映射配置windows主机上的hosts文件:C:\Windows\System32\drivers\etc\hosts,192.168.1.110 名称永久性配置CentOS网络 vi /etc/sysc...
2018-12-05 17:09:43
204
原创 Scala:隐式转换与隐式参数
Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicit conversion function。定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用。Scala会根据隐式转换函数的签名,在程序中使用到隐式转换函数接收的参数类型定义的对象时,会自动将其传入隐式转换函数,转换为另外一种类型的对象并返回。这就是“隐式转换”。隐式转换要实现隐式转换,只要程序可见的范...
2018-12-04 14:24:09
154
原创 Scala:模式匹配
模式匹配Scala是没有Java中的switch case语法的,相对应的,Scala提供了更加强大的match case语法,即模式匹配,类替代switch case,match case也被称为模式匹配。match case的语法如下:变量 match { case 值 => 代码 }。此外,match case中,只要一个case分支满足并处理了,就不会继续判断下一个case分支了...
2018-12-03 15:44:08
145
原创 Scala:函数式编程
将函数赋值给变量Scala中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量def sayHello(name:String){println(&amp;quot;Hello,&amp;quot; + name)}def sayHelloFunc = sayHello _ sayHelloFunc(&amp;quot;LO&amp;quot;)Scala的语法规定,将函数赋值给变量时,必须
2018-11-30 15:24:05
172
原创 Scala:Trait
将trait作为接口使用类可以使用extends关键字继承trait,注意,这里不是implement,而是extends,在scala中没有implement的概念,无论继承类还是trait,统一都是extends。类继承trait后,必须实现其中的抽象方法,实现时不需要使用override关键字trait SayHello { def sayHello(name:String)}...
2018-11-23 18:12:45
270
原创 Scala:面向对象
类类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。class Point(xc: Int, yc: Int) { var x: Int = xc var y: Int = yc def move(dx: Int, dy: Int) { x...
2018-11-22 18:07:55
156
原创 Scala:基础语法
声明变量1. 声明val变量:可以声明val变量来存放表达式的计算结果val result = 1 + 1但是常量声明后,是无法改变它的值的,例如,result = 1,会返回error: reassignment to val的错误信息2. 声明var变量:如果要声明值可以改变的引用,可以使用var变量。var myresult = 1,myresult = 2在scala程序...
2018-11-21 14:17:06
257
原创 ES:写入原理详解
(1)数据写入buffer(2)commit point(3)buffer中的数据写入新的index segment(4)等待在os cache中的index segment被fsync强制刷到磁盘上(5)新的index sgement被打开,供search使用(6)buffer被清空每次commit point时,会有一个.del文件,标记了哪些segment中的哪些document...
2018-11-05 17:27:53
16966
11
原创 ES:倒排索引、分词详解
一,倒排索引(Inverted Index)ElasticSearch引擎把文档数据写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表示例:对以下三个文档去除停用词后构造...
2018-11-05 17:09:28
24254
2
原创 ES:基于scoll+bulk+索引别名实现零停机重建索引
1、重建索引一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scoll就查询指定日期的一段数据,交给一个线程即可(1)一开始,依靠dynamic mapping,插入...
2018-11-05 11:41:25
678
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人