
Spark入坑
ZFH__ZJ
JAVA大数据菜鸟一枚,QQ群:970045528,欢迎加入交流学习
展开
-
1、Scala之基础语法
Scala与Java的关系Scala与Java的关系是非常紧密的因为Scala是基于Java虚拟机,也就是JVM的一门编程语言。所有Scala的代码,都需要经过编译为字节码,然后交由Java虚拟机来运行。所以Scala和Java是可以无缝互操作的。Scala可以任意调用Java的代码。所以Scala与Java的关系是非常非常紧密的。安装Scala从Scala官方网站下载,http:...原创 2018-11-25 14:46:00 · 1308 阅读 · 0 评论 -
2、Scala基础之条件控制与循环
if表达式if表达式的定义在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值。例如,val age = 30; if (age > 18) 1 else 0可以将if表达式赋予一个变量,例如,val isAdult = if (age > 18) 1 else 0另外一种写法,var isAdult = -1; if(age > 18) ...原创 2018-11-25 20:51:00 · 1293 阅读 · 0 评论 -
3、Scala基础之函数
函数的定义与调用在Scala中定义函数时,需要定义函数的函数名、参数、函数体。我们的第一个函数如下所示:def sayHello(name:String, age:Int) = { if(age > 18) { printf("Hello %s, your age is %d, you are a adult\n", name, age) }else ...原创 2018-11-26 11:34:00 · 1264 阅读 · 0 评论 -
4、Scala基础之数组
Array在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组。此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java数组。例如字符串数组在底层就是Java的String[],整数数组在底层就是Java的Int[]数组初始化后,长度就固定下来了,而且元素全部根据其类型初始化 // 数组初始化后,长度就固...原创 2018-11-26 15:50:00 · 1258 阅读 · 0 评论 -
5、Scala基础之Map与Tuple
创建Map创建一个不可变的Map,import scala.collection.mutable.Map val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20) stringToInt("Zhao") = 19上述代码如果会报错,Error:(12, 5) value update...原创 2018-11-26 17:06:00 · 1258 阅读 · 0 评论 -
6、Scala基础之面向对象编程之类
定义一个简单的类// 定义类,包含field以及方法class HelloWorld { private var name:String = "Zhao" def sayHello() = "Hello " + name def getName = name} // 创建类的对象,并调用其方法 val helloWorld = new HelloWorld...原创 2018-11-27 16:48:00 · 1347 阅读 · 0 评论 -
7、Scala基础之面向对象编程之对象
objectobject,相当于class的单个实例,通常在里面放一些静态的field或者method第一次调用object的方法时,就会执行object的constructor,也就是object内部不在method中的代码;但是object不能定义接受参数的constructor注意,object的constructor只会在其第一次被调用时执行一次,以后再次调用就不会再次执行cons...原创 2018-11-28 11:40:00 · 1267 阅读 · 0 评论 -
8、Scala基础之面向对象编程之继承
extendsScala中,让子类继承父类,与Java一样,也是使用extends关键字继承就代表,子类可以从父类继承父类的field和method;然后子类可以在自己内部放入父类所没有,子类特有的field和method;使用继承可以有效复用代码子类可以覆盖父类的field和method;但是如果父类用final修饰,field和method用final修饰,则该类是无法被继承的,fie...原创 2018-11-29 17:00:00 · 1270 阅读 · 0 评论 -
9、Scala基础之面向对象之Trait
将trait作为接口使用Scala中的Triat是一种特殊的概念首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似在triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可类可以使用extends关键字继承trait,注意,这里不是implement,而是extends,在scala中没有implement的概念,无论继承类...原创 2018-11-30 22:56:00 · 1355 阅读 · 0 评论 -
10、Scala基础之函数式编程
引言Scala中的函数是Java中完全没有的概念。因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只有方法的概念,即寄存和依赖于类和对象中的方法。Java中的方法是绝对不可能脱离类和对象独立存在的。而Scala是一门既面向对象,又面向过程的语言。因此在Scala中有非常好的面向对象的特性,可以使用Scala来基于面向对象的思想开发...原创 2018-12-03 12:47:00 · 1251 阅读 · 0 评论 -
11、Scala基础之函数式编程之集合操作
Scala的集合体系结构Scala中的集合体系主要包括:Iterable、Seq、Set、Map。其中Iterable是所有集合trait的根trai。这个结构与Java的集合体系非常相似。Scala中的集合是分成可变和不可变两类集合的,其中可变集合就是说,集合的元素可以动态修改,而不可变集合的元素在初始化之后,就无法修改了。分别对应scala.collection.mutable和scal...原创 2018-12-03 14:27:00 · 1271 阅读 · 0 评论 -
12、Scala基础之模式匹配
引言模式匹配是Scala中非常有特色,非常强大的一种功能。模式匹配,其实类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理。但是Scala的模式匹配的功能比Java的swich case语法的功能要强大地多,Java的swich case语法只能对值进行匹配。但是Scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对Arra...原创 2018-12-03 17:52:00 · 1284 阅读 · 0 评论 -
13、Scala基础之类型参数
引言类型参数是什么?类型参数其实就类似于Java中的泛型。先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题,a.add("2"),然后我们a.get(1) == 2,对不对?肯定不对了,a.get(1)获取的其实是个String——"2",String——"2"怎么可能与一个Integer类型的2相等呢?所以Java中提出...原创 2018-12-04 14:41:00 · 1260 阅读 · 0 评论 -
14、Scala基础之隐式转换与隐式参数
引言Scala提供的隐式转换和隐式参数功能,是非常有特色的功能。是Java等编程语言所没有的功能。它可以允许你手动指定,将某种类型的对象转换成其他类型的对象。通过这些功能,可以实现非常强大,而且特殊的功能。Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicit conversion function。定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用。S...原创 2018-12-04 15:22:00 · 1300 阅读 · 0 评论 -
15、Scala基础之Actor入门
引言Scala的Actor类似于Java中的多线程编程。但是不同的是,Scala的Actor提供的模型与多线程有所不同。Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争用的情况,进而提升多线程编程的性能。此外,Scala Actor的这种模型还可以避免死锁等一系列传统多线程编程的问题。Spark中使用的分布式多线程框架,是Akka。Akka也实现了类似Scala...原创 2018-12-04 17:17:00 · 1300 阅读 · 0 评论 -
16、Spark核心编程之Spark 1.3.0集群搭建
安装Scala将scala-2.11.8.tgz 上传到/opt/software目录下 解压缩 tar -zxvf scala-2.11.8.tgz -C /opt/module/ 更改目录名字 mv scala-2.11.8/ scala 设置环境变量,编辑/etc/profile文件# SCALA_HOMEexport SCALA_HOME=/opt/module/scala...原创 2018-12-05 12:45:00 · 1298 阅读 · 0 评论 -
17、Spark核心编程之Spark基本工作原理与RDD
Spark基本工作原理分布式 主要基于内存(少数情况基于磁盘) 迭代式计算 Spark基本工作原理.png RDD以及其特点RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。 RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让...原创 2018-12-05 16:20:00 · 1357 阅读 · 0 评论 -
18、Spark核心编程之使用Java、Scala开发wordcount程序
使用Java开发Spark程序配置Maven环境使用Java开发WordCount1.png 使用Java开发WordCount2.png 使用Java开发WordCount3.png 使用Java开发WordCount4.png 配置pom.xml文件<dependencies> <dependenc...原创 2018-12-08 19:39:00 · 1381 阅读 · 0 评论 -
19、Spark核心编程之wordcount程序原理深度剖析
wordcount程序原理深度剖析.png原创 2018-12-08 21:04:00 · 1365 阅读 · 0 评论 -
20、Spark核心编程之Spark架构原理
Driver Driver(进程),我们编写的Spark程序就在Driver上,由Driver进程执行 Master Master是个进程,主要是负责资源的调度和分配,还有集群的监控等等职责 Worker Worker是个进程,主要负责有两个,一个是用自己的内存,存储RDD的某个或某些partition,另一个是启动其他进程和线程,对RDD上的partition进行并行的处理和计算 E...原创 2018-12-08 21:55:00 · 1406 阅读 · 0 评论 -
21、Spark核心编程之创建RDD(集合、本地文件、HDFS文件)
创建RDD进行Spark核心编程时,首先要做的第一件事,就是创建一个初始的RDD。该RDD中,通常就代表和包含了Spark应用程序的输入源数据。然后在创建了初始的RDD之后,才可以通过Spark Core提供的transformation算子,对该RDD进行转换,来获取其他的RDD。Spark Core提供了三种创建RDD的方式,包括:使用程序中的集合创建RDD;使用本地文件创建RDD;使用...原创 2018-12-09 13:25:00 · 1791 阅读 · 0 评论 -
22、Spark核心编程之操作RDD(transformation和action案例实战)
transformation和action介绍Spark支持两种RDD操作:transformation和action。transformation操作会针对已有的RDD创建一个新的RDD;而action则主要是对RDD进行最后的操作,比如遍历、reduce、保存到文件等,并可以返回结果给Driver程序。例如,map就是一种transformation操作,它用于将已有RDD的每个元素传入...原创 2018-12-09 18:26:00 · 1453 阅读 · 0 评论 -
23、Spark核心编程之transformation操作开发实战
将集合中每个元素乘以2map:将集合中每个元素乘以2使用map算子,将集合中的每个元素都乘以2map算子,是对任何类型的RDD,都可以调用的,在Java中,map算子接收的参数是Function对象创建的Function对象,一定会让你设置第二个泛型参数,这个泛型类型,就是返回的新元素的类型同时call()方法的返回类型,也必须与第二个泛型类型同步在call()方法内部,就可以对原始...原创 2018-12-09 23:01:00 · 1363 阅读 · 0 评论 -
24、Spark核心编程之action操作开发实战
reduce案例:有一个集合,里面有1到10,10个数字,现在要对10个数字进行累加reduce操作的原理首先将第一个和第二个元素,传入call()方法,进行计算,会获取一个结果,比如1 + 2 = 3接着将该结果与下一个元素传入call()方法,进行计算,比如3 + 3 = 6以此类推所以reduce操作的本质,就是聚合,将多个元素聚合成一个元素Java版本public s...原创 2018-12-10 10:55:00 · 1305 阅读 · 0 评论 -
25、Spark核心编程之RDD持久化详解
不使用RDD持久化的问题首先看一段代码JavaRDD<String> linesRDD = javaSparkContext.textFile("hdfs://hadoop-100:9000/testdate/1.txt");// 这里面数据非常大,上亿Long linesCount = linesRDD.count();// 执行一些其他操作Long newLines...原创 2018-12-10 16:21:00 · 1408 阅读 · 0 评论 -
26、Spark核心编程之共享变量(Broadcast Variable和Accumulator)
共享变量工作原理Spark一个非常重要的特性就是共享变量。默认情况下,如果在一个算子的函数中使用到了某个外部的变量,那么这个变量的值会被拷贝到每个task中。此时每个task只能操作自己的那份变量副本。如果多个task想要共享某个变量,那么这种方式是做不到的。Spark为此提供了两种共享变量,一种是Broadcast Variable(广播变量),另一种是Accumulator(累加变量)...原创 2018-12-10 17:49:00 · 1318 阅读 · 0 评论 -
27、Spark核心编程之高级编程之基于排序机制的wordcount程序
需求对文本文件内的每个单词都统计出其出现的次数。 按照每个单词出现次数的数量,降序排序。Java实现/** * 排序的wordcount程序 */public class SortWordCount { public static void main(String[] args) { SparkConf sparkConf = new SparkConf...原创 2018-12-10 21:58:00 · 1374 阅读 · 0 评论 -
28、Spark核心编程之高级编程之二次排序
需求按照文件中的第一列排序。 如果第一列相同,则按照第二列排序。文件内容2 53 62 41 31 5Java实现自定义的二次排序key/** * 自定义的二次排序key */public class SecondarySortKey implements Ordered<SecondarySortKey>,Serializable { ...原创 2018-12-11 11:45:00 · 1317 阅读 · 0 评论 -
29、Spark核心编程之高级编程之topn
需求1对文本文件内的数字,取最大的前3个Java实现/** * 取最大的前3个数字 * */public class Top3 { public static void main(String[] args) { SparkConf sparkConf = new SparkConf().setAppName("Top3Java").setMaster...原创 2018-12-11 18:06:00 · 1286 阅读 · 0 评论 -
30、Spark内核源码深度剖析之Spark内核架构深度剖析
Spark内核架构深度剖析.png 就上面这幅图,详细解释一下自己编写的Application,就是我们自己写的程序,拷贝到用来提交spark应用的机器,使用spark-submit提交这个Application,提交之后,spark-submit在Standalone模式下,会通过反射的方式,创建和构造一个DriverActor进程。启动DriverActor进程后,开始执行Ap...原创 2018-12-12 11:10:00 · 1422 阅读 · 0 评论 -
31、Spark内核源码深度剖析之宽依赖与窄依赖深度剖析
就wordcount例子来讲解下宽依赖和窄依赖 宽依赖和窄依赖深度剖析.png 宽依赖(Shuffle Dependency),就是Shuffle,每一个父RDD的partition中的数据,都可能会传输一部分到下一个RDD的每个partition中,此时就会出现,父RDD和子RDD的partition之间,具有交互错综复杂的关系,那么,这种情况,就叫做两个RDD之间是宽依赖,...原创 2018-12-12 11:42:00 · 1329 阅读 · 0 评论 -
32、Spark内核源码深度剖析之基于Yarn的两种提交模式深度剖析
Spark的三种提交模式Spark内核架构,其实就是第一种模式,standalone模式,基于Spark自己的Master-Worker集群。 第二种,是基于YARN的yarn-cluster模式。 第三种,是基于YARN的yarn-client模式。 如果,你要切换到第二种和第三种模式,很简单,将我们之前用于提交spark应用程序的spark-submit脚本,加上--master参数...原创 2018-12-13 14:32:00 · 1306 阅读 · 0 评论 -
33、Spark内核源码深度剖析之SparkContext原理剖析与源码分析
原理剖析SparkContext原理剖析.png源码解读本系列文章spark版本为1.3.0入口org.apache.spark.SparkContextSparkContext要点TaskScheduler如何注册application,executor如何反向注册 DAGScheduler SparkUI本文主要分析1TaskScheduler的相关代码 ...原创 2018-12-13 22:04:00 · 1366 阅读 · 0 评论 -
34、Spark内核源码深度剖析之Master主备切换机制原理剖析与源码分析
Master实际上可以配置两个,Spark原生的standalone模式支持Master主备切换,也就是说,当Active Master节点挂掉的时候,我们可以将Stand Master切换为Active MasterSpark Master主备切换可以基于两种机制,一种是基于文件系统的,一种是基于Zookeeper的,基于文件系统的主备切换机制,需要再Active Master挂掉之后,由我们...原创 2018-12-14 21:53:00 · 1323 阅读 · 0 评论 -
35、Spark内核源码深度剖析之Master注册机制原理剖析与源码分析
Worker在启动之后,就会主动向Master进行注册用Spark-submit提交spark Application的时候,首先就会注册DriverDriver启动好了,执行我们编写的Application代码,执行SparkContext初始化,底层的SparkDeploySchedulerBackend,会通过AppClient内部的线程,ClientActor发送RegisterApp...原创 2018-12-14 22:52:00 · 1293 阅读 · 0 评论 -
36、Spark内核源码深度剖析之Master状态改变处理机制原理剖析与源码分析
Driver信息改变 case DriverStateChanged(driverId, state, exception) => { state match { // 如果Driver的状态是错误、完成、杀死、失败,就移除Driver case DriverState.ERROR | DriverState.FINISHED | Drive...原创 2018-12-14 23:18:00 · 1412 阅读 · 0 评论 -
37、Spark内核源码深度剖析之Master资源调度算法原理剖析与源码分析
首先判断,master状态不是ALIVE的话,直接返回也就是说,standby master是不会进行Application等资源调度的首先调度Driver只有用yarn-cluster模式提交的时候,才会注册driver,因为standalone和yarn-client模式,都会在本地直接启动driver,而不会来注册driver,就更不可能让master来调度driver了Appli...原创 2018-12-15 16:55:00 · 1460 阅读 · 0 评论 -
38、Spark内核源码深度剖析之Worker原理剖析与源码分析
Worker启动Driver的一个基本原理,就是Worker内部会启动一个线程,这个线程可以理解为,就是DriverRunner,然后DriverRunner就会去负责启动Driver进程,并在之后对Driver进程进行管理Worker启动Executor,其实和Driver的原理是一致的,都是通过一个Worker内部的本地线程,也就是ExecutorRunner,去启动Executor进程,然...原创 2018-12-15 18:51:00 · 1302 阅读 · 0 评论 -
39、Spark内核源码深度剖析之job触发流程原理剖析与源码分析
还是看wordcount案例val lines = sc.textFile()val words = lines.flatMap(line => line.split(" "))val pairs = words.map(word => (word, 1))val counts = pairs.reduceByKey(_ + _)counts.foreach(count =&...原创 2018-12-15 19:40:00 · 1296 阅读 · 0 评论 -
40、Spark内核源码深度剖析之DAGScheduler原理剖析与源码分析
流程图stage划分算法原理剖析.png源码入口// 调用SparkContext,之前初始化时创建的dagScheduler的runJob()方法 dagScheduler.runJob(rdd, cleanedFunc, partitions, callSite, allowLocal, resultHandler, localProperties.g...原创 2018-12-15 23:46:00 · 1341 阅读 · 0 评论