- 博客(37)
- 收藏
- 关注
原创 2、4IDEA开发词频统计项目
单词计数是学习分布式计算的入门程序,有很多种实现方式,例如MapReduce;使用Spark提供的RDD算子可以更加轻松地实现单词计数。在IntelliJ IDEA中新建Maven管理的Spark项目,在该项目中使用Scala语言编写Spark的WordCount程序,可以本地运行Spark项目查看结果,也可以将项目打包提交到Spark集群(Standalone模式)中运行。(一)版本选择问题前面创建了Spark集群(Standalone模式),采用的是Spark3.3.2版本。
2023-06-15 21:16:02
224
原创 2、3Spark 运行架构与原理
(一)Executor(执行器)在集群工作节点上为某个应用启动的工作进程,该进程负责运行计算任务,并为应用程序存储数据。(二)Task(任务)运行main()方法并创建SparkContext的进程。(三)Job(作业)一个并行计算作业,由一组任务组成,并由Spark的行动算子(如:save、collect)触发启动。(四)Stage(阶段)每个Job可划分为更小的Task集合,每组任务被称为Stage。
2023-06-15 21:08:50
264
原创 3、7Spark 任务调度
(一)DAG概念DAG(Directed Acyclic Graph)叫做有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG。DAG是一种非常重要的图论数据结构。如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图就是有向无环图。“4→6→1→2”是一条路径,“4→6→5”也是一条路径,并且图中不存在从顶点经过若干条边后能回到该点。(二)实例讲解根据RDD之间依赖关系的不同可将DAG划分成不同的Stage(调度阶段)。
2023-06-15 20:35:18
352
原创 4.3Spark SQL数据源-Parquet文件
Apache Parquet是Hadoop生态系统中任何项目都可以使用的列式存储格式,不受数据处理框架、数据模型和编程语言的影响。Spark SQL支持对Parquet文件的读写,并且可以自动保存源数据的Schema。当写入Parquet文件时,为了提高兼容性,所有列都会自动转换为“可为空”状态。
2023-06-15 20:33:09
1393
原创 4.2Spark SQL 数据源-基本操作
Spark SQL提供了两个常用的加载数据和写入数据的方法:load()方法和save()方法。load()方法可以加载外部数据源为一个DataFrame,save()方法可以将一个DataFrame写入指定的数据源。
2023-06-15 20:31:17
141
原创 4.1Spark SQL概述、数据帧与数据集
(一)Spark SQL概述Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象结构叫做DataFrame的数据模型(即带有Schema信息的RDD),Spark SQL作为分布式SQL查询引擎,让用户可以通过SQL、DataFrames API和Datasets API三种方式实现对结构化数据的处理。(二)Spark SQL功能Spark SQL可从各种结构化数据源中读取数据,进行数据分析。
2023-06-15 20:27:33
140
原创 3.6RDD容错机制
当Spark集群中的某一个节点由于宕机导致数据丢失,则可以通过Spark中的RDD进行容错恢复已经丢失的数据。RDD提供了两种故障恢复的方式,分别是血统(Lineage)方式和设置检查点(checkpoint)方式。(一)血统方式根据RDD之间依赖关系对丢失数据的RDD进行数据恢复。若丢失数据的子RDD进行窄依赖运算,则只需要把丢失数据的父RDD的对应分区进行重新计算,不依赖其他节点,并且在计算过程中不存在冗余计算;
2023-06-15 20:27:17
122
原创 3.5RDD持久化机制
Spark中的RDD是懒加载的,只有当遇到行动算子时才会从头计算所有RDD,而且当同一个RDD被多次使用时,每次都需要重新计算一遍,这样会严重增加消耗。为了避免重复计算同一个RDD,可以将RDD进行持久化。Spark中重要的功能之一是可以将某个RDD中的数据保存到内存或者磁盘中,每次需要对这个RDD进行算子操作时,可以直接从内存或磁盘中取出该RDD的持久化数据,而不需要从头计算才能得到这个RDD。
2023-06-15 20:26:06
47
原创 3.4理解RDD的依赖
一个父RDD的一个分区不可能对应一个子RDD的多个分区。对一个RDD进行reduceByKey()操作,RDD中相同key的所有记录将进行聚合,而key相同的所有记录可能不在同一个分区中,甚至不在同一个节点上,但是该操作必须将这些记录聚集到一起进行计算才能保证结果准确,因此reduceByKey()操作会产生Shuffle,也会产生宽依赖。在Spark中,对RDD的每一次转化操作都会生成一个新的RDD,由于RDD的懒加载特性,新的RDD会依赖原有RDD,因此RDD之间存在类似流水线的前后依赖关系。
2023-06-09 12:22:51
103
原创 3.3掌握RDD分区
在分布式程序中,网络通信的开销是很大的,因此控制数据分布以获得最少的网络传输可以极大的提升程序的整体性能,Spark程序可以通过控制RDD分区方式来减少通信开销。textFile()方法通常用于读取HDFS中的文本文件,使用该方法创建RDD时,Spark会对文件进行分片操作(类似于MapReduce的分片,实际上调用的是MapReduce的分片接口),分片操作完成后,每个分区将存储一个分片的数据,因此分区的数量等于分片的数量。RDD各个分区中的数据可以并行计算,因此分区的数量决定了并行计算的粒度。
2023-06-09 12:16:56
106
原创 3.2掌握RDD算子
例如,rdd1的元素以(k,v)表示,rdd2的元素以(k, w)表示,进行左外连接时将以rdd1为基准,rdd2中的k与rdd1的k相同的元素将连接到一起,生成的结果形式为(k, (v, Some(w))。rdd1中其余的元素仍然是结果的一部分,元素形式为(k,(v, None)。例如,rdd1的元素以(k, v)表示,rdd2的元素以(k, w)表示,执行rdd1.cogroup(rdd2)生成的结果形式为(k, (Iterable<v>, Iterable<w>))。
2023-06-09 12:15:45
172
原创 3.1掌握RDD创建
将数据集(hello, world, scala, spark, love, spark, happy)存储在三个节点上,节点一存储(hello, world),节点二存储(scala, spark, love),节点三存储(spark, happy),这样对三个节点的数据可以并行计算,并且三个节点的数据共同组成了一个RDD。在编程时,可以把RDD看作是一个数据操作的基本单位,而不必关心数据的分布式特性,Spark会自动将RDD的数据分发到集群的各个节点。不同的是,数据的来源路径不同。
2023-06-09 11:52:43
165
原创 2.2搭建Spark开发环境
由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。安装Spark集群前,需要安装Hadoop环境软件 版本Linux系统 CentOS7.9版本Hadoop 3.3.4版本JDK 1.8版本 (jdk8u231)Spark 3.3.2版本。
2023-06-09 11:51:56
78
原创 初识Spark
一、Spark的概述(一)Spark的组件Spark在2013年加入Apache孵化器项目,之后获得迅猛的发展,并于2014年正式成为Apache软件基金会的顶级项目。Spark生态系统已经发展成为一个可应用于大规模数据处理的统一分析引擎,它是基于内存计算的大数据并行计算框架,适用于各种各样的分布式平台的系统。在Spark生态圈中包含了Spark SQL、Spark Streaming、GraphX、MLlib等组件。
2023-06-09 11:43:12
70
原创 1、7Scala类、对象、抽象类与特质
说明:实例化Dog时,传入的参数是""与0,但是会执行类里的两个给成员变量赋值的语句,于是name成了瑞瑞,age成了5,于是调用对象的speak()方法,会输出我叫瑞瑞,今年5岁了~。类被称为该对象的伴生类。def speak(): Unit = println("我叫" + name + "," + gender + ",今年" + age + "岁了~")println("我叫" + name + ",今年" + age + "岁,家住" + address + ",擅长讲课与翻译~" )
2023-06-09 11:41:01
41
原创 1、6scala数据结构
定义三个变长数组arr1、arr2与arr3,arr1采用++=合并arr2得到result,其实result与合并后的arr1是相等的,然后arr1再利用appendAll方法合并arr3,结果是三个数组的9个元素全部合并进数组arr1里。不可变列表也可以增加元素,但实际上生成了一个新列表,原列表不变,列表元素类型可以相同,也可以不一致。定义一个整型数组,输入一个整数,判断该整数是否在数组里,如果在数组里,给出其位置,否则提示用户该整数不在数组里。
2023-06-09 11:39:29
31
原创 1.4 掌握Scala运算符
Scala中运算符即方法、方法即运算符。Scala中运算符其实是普通方法调用的另一种表现形式,运算符的使用其实就是隐含的调用对应的方法。
2023-04-09 16:54:46
55
原创 1.3Scala集成开发环境
安装插件的方式有两种:在线与离线现在学习在线方式启动IDEA 【IDEA版本--- 】进入界面,搜索框中搜索Scala关键字点击【Install】按钮,进行安装,再次点击【Reatart IDE】按钮由于IDEA版本不同,有些版本没有Scalafmt,只需要安装Scala插件就行-例如:2022.1.4版本欢迎界面进入是全局配置,单个界面配置,是只配置这一个界面的,
2023-03-29 20:27:27
81
原创 1.2Scala变量与数据类型
1、变量必须初始化定义变量需要初始化,否则会报错注:JAVA中可以先声明变量,然后再赋值2、定义变量可以不指定数据类型定义变量时可以不指定数据类型,系统会根据初始化值自动推断变量的类型注:JAVA声明变量必须要指定类型3、鼓励优先使用Val(常量)scala中鼓励优先使用Val(变量),除非确实需要对其修改,才使用var(变量)4、语句不需要写结束符Scala语句不需要写结束符,除非同一行代码使用多条语句时才需要使用分号隔开。
2023-03-25 15:51:38
44
原创 Shell定时采集数据和使用JAVA API操作HDFS创建HDFS文件
Shell定时采集数据和使用JAVA API操作HDFS创建HDFS文件
2022-11-24 18:48:21
663
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人