- 博客(66)
- 收藏
- 关注
原创 ETL介绍
它是指对采集到的原始数据进行预处理,以去除错误、重复、不完整或不一致的数据,使数据符合分析要求的过程。对于reduce函数来说,它的输入参数是:<刷选后的每一行的内容,[null,null,...]>,对于我们的需求来说,并不需要这个阶段: 没有汇总的需求,直接使用Map的结果。map阶段:按行读入内容,对内容进行检查,如果字段的个数少于等于11,就删除这条日志(不保留)去除日志中字段个数小于等于11的日志内容。<偏移量,每一行的内容> → <刷选后的没一行的内容,null>// 5 设置输入和输出路径。
2025-05-14 09:23:27
293
原创 persist和cache方法
MEMORY_ONLY_SER:将 RDD 以序列化的 Java 对象形式存储在内存中,相较于 MEMORY_ONLY,序列化后占用的内存空间更小,但读取时需要进行反序列化操作,会带来一定的性能开销。MEMORY_ONLY:将 RDD 以 Java 对象的形式存储在 JVM 的内存中。MEMORY_AND_DISK:优先把 RDD 以 Java 对象的形式存储在 JVM 的内存中。MEMORY_AND_DISK_SER:优先将 RDD 以序列化的 Java 对象形式存储在内存中,内存不足时存储到磁盘上。
2025-05-14 09:21:31
169
原创 mapreduce打包运行
在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。流式计算的输入数据是动态的,会一条一条的过来,是动态产生的,而MapReduce的输入数据集是静态的,不能动态变化。我们集群上安装的java环境是1.8的,那么我们生成的代码也必须是这个版本的,否则,就会无法运行。我们集群上安装的java环境是1.8的,那么我们生成的代码也必须是这个版本的,否则,就会无法运行。修改driver类的代码,更新输入和输入路径。
2025-05-14 09:19:39
544
原创 大数据的特点
数据多了之级),这个时候就出现了Spark技术,spark经常和hadoop来对比,更准确是和mapReduce进行对比,因为spark本身也是一个计算框架。spark是基于内存的计算,mapReduce是基于磁盘的计算。阶段2:大数据时代-分布式处理(把计算中的中间数据保存在磁盘-hadoop)接下来我们来粗略看整个大数据技术的发展脉络,这里我们分成三个阶段来介绍。例如:11.11期间,京东在1秒内的交易额就超过了10亿。给你家人推荐的内容,也会推荐给你。视频推荐:推荐你喜欢的内容给你。
2025-05-14 09:17:39
316
原创 SparkSQL-数据提取和保存
【老师讲授案例的需求】 从给定的user.csv文件中,读入用户数据,过滤掉年龄<18岁的信息,然后把剩余的数据写入mysql数据库中。// 连接hadoop100上的mysql数据库,读出spark数据库中的person表中的内容。// 读入data/user.csv文件的数据,插入到mysql数据库中。.write.mode("append") // 写入到数据库中。在前面我们学习了SparkSQL的基本使用,下面我们完成一个大一点的案例。// 读入data/user.csv文件的数据。
2025-05-14 09:13:19
351
原创 SparkSQL操作Mysql
前面的课程我们学习了如何从csv文件中读入数据,这相当于是对csv这种类型的数据的操作。若已安装,需要先做卸载MySQL的操作命令是:rpm -e --nodeps mariadb-libs。(1)scala-library 是 Scala 语言的基础库,是编写 Scala 程序的必要条件。上一节课,我们配置了mysql环境,接下来,我们就来编写spark代码,来连接mysql数据库。注意,在输入密码的过程中,密码并不可见。使用的命令是: mysqld --initialize --user=mysql。
2025-05-14 09:09:20
707
原创 SparkSQL-基本使用
agg(sum($"quantity").as("total_quantity"), sum($"quantity" * $"price").as("total_sales")):对每个分组进行聚合操作,计算销售总量和销售总额,并分别命名为 total_quantity 和 total_sales。在我们前面的课程中,处理的数据基本都是文本文件,它们的内容没有基本的格式,而在实际的开发中,我们要处理的数据有很多都是结构化的,例如订单数据、商品数据、用户数据等。
2025-05-14 09:03:21
772
原创 RDD的自定义分区器-案例
在代码中,通过编写一个自定义的分区函数,根据用户 ID 的范围返回对应的分区编号。如在之前的示例代码中,custom_partitioner 函数根据不同的 ID 范围返回 0、1、2 三个分区编号,从而实现按照地区进行分区的目的。具体来说,将用户 ID 在 0 - 1000 的订单数据分到一个分区,1001 - 2000 的分到另一个分区,2001 及以上的分到第三个分区。对电商订单数据进行处理,订单数据包含用户 ID 和订单金额,不同地区的用户有不同的 ID 范围。
2025-05-14 09:00:38
615
原创 自定义分区器-基础
数据倾斜:当数据分布不均匀,某些分区数据量过大,导致计算负载不均衡时,可自定义分区器,按照特定规则重新分配数据,避免数据倾斜影响计算性能。具体来说,它会对键的哈希值取模,模的结果就是分区的编号。在 Spark 中,分区是指将数据集按照一定的规则划分成多个较小的子集,每个子集可以独立地在不同的计算节点上进行处理,这样可以实现数据的并行处理,提高计算效率。在 Spark 中,RDD 是数据的集合,它会被划分成多个分区,这些分区可以分布在不同的计算节点上,就像图书馆的书架分布在不同的房间一样。
2025-05-14 08:57:41
811
原创 Spark缓存
这使得后续的动作变得更加迅速。MEMORY_ONLY_SER:将 RDD 以序列化的 Java 对象形式存储在内存中,相较于 MEMORY_ONLY,序列化后占用的内存空间更小,但读取时需要进行反序列化操作,会带来一定的性能开销。缓存逻辑:把高频查阅的信息(“数据”)提前存储在“快速访问载体”(笔记本)中,需要时直接看笔记(“命中缓存”),省去翻书时间(“从低速存储读取”)。缓存逻辑:预判你可能重复使用的内容(“数据”),提前存放在“本地高速存储”(手机内存),减少网络加载(“低速远程获取”)的等待时间。
2025-05-14 08:53:35
1117
原创 HDFS的概述
HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,1. 不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
2025-05-07 09:26:04
449
原创 数据清洗-案例
它是指对采集到的原始数据进行预处理,以去除错误、重复、不完整或不一致的数据,使数据符合分析要求的过程。对于reduce函数来说,它的输入参数是:<刷选后的每一行的内容,[null,null,...]>,对于我们的需求来说,并不需要这个阶段: 没有汇总的需求,直接使用Map的结果。map阶段:按行读入内容,对内容进行检查,如果字段的个数少于等于11,就删除这条日志(不保留)<偏移量,每一行的内容> → <刷选后的没一行的内容,null>对于map函数来说,它的输入参数是:<偏移量,第一行的内容>
2025-05-07 09:22:45
455
原创 分区器的基本介绍
说明:这里的setNumReduceTasks的值最好与setPartitioner返回的分区器的个数一致。在MapReduce框架中,分区器(Partitioner)是一个关键组件,其主要作用是决定由一个maptask生成的键值,最终是生成在哪个文件中的。回顾我们的需求,我们在做词频统计的时候,把a-m开头的保存在一个文件中,n-z开头的保存在另一个文件中。自定义分区器:如果使用自定义分区器,可以根据特定的逻辑(如键的首字母、键的范围等)将数据分配到不同的Reducer中。// 省略其他....
2025-05-07 09:20:25
370
原创 序列化的概念
序列化的时候,它会自动被调用,将一个内存中的对象,序列化成为一个字节序列。如果序列化的属性不是Hadoop的序列化类型,就要调用相应的方法把它进行序列化。反序列化时调用的方法,将一个字节序列,转成内存中的对象。下面我们来看一个例子:通过代码来定义一个类,并创建它的一个对象,把这个对象保存到文件中(序列化),然后再写代码读取这个文件并还原回来。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。
2025-05-07 09:17:48
529
原创 数据压缩的概念
数据压缩可以分为有损压缩和无损压缩两类。即使你的MapReduce的输入输出文件都是未压缩的文件,你仍然可以对Map任务的中间结果输出做压缩,因为它要写在硬盘并且通过网络传输到Reduce节点,对其压缩可以提高很多性能,这些工作只要设置两个属性即可,我们来看下代码怎么设置。数据压缩是指在不丢失或尽可能少丢失数据信息的前提下,通过特定的算法和技术,对原始数据进行重新编码和处理,以减少数据存储空间或传输带宽的过程。,只需要在dirvier类的代码中,去设置在reduce端输出压缩开启,并设置压缩的方式即可。
2025-05-07 09:15:28
515
原创 Spark的基本介绍
为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,包括Hadoop YARN、Apache Mesos,以及Spark自带的一个简易调度器,叫作独立调度器。Spark:Spark Streaming 提供了强大的实时数据处理能力,它可以将实时数据流分割成小的批次进行处理,实现准实时的数据分析。这里的 \ 是换行输入的意思,整体的代码就只有一句,只不过太长了,我们把它拆开成几个部分来输入,其中\ 的意思就是这里写不下,写在下一行。
2025-05-07 09:12:01
1234
原创 什么是SparkONYarn模式?
NodeManager:部署在集群中的每个节点上,负责管理该节点上的资源使用情况,监控容器的运行状态,并且与 ResourceManager 保持通信,汇报节点的资源使用信息。它会接收来自各个应用程序的资源请求,并根据集群资源的使用情况进行合理分配。Spark Driver:负责执行用户编写的 Spark 应用程序代码,将其转化为一系列的任务,并调度这些任务到各个 Executor 上执行。--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
2025-05-07 09:05:51
815
原创 RDD的概念
Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。- Distributed: 分布式存储的,表示数据是存放在不同的机器上的。类比理解scala中的不可变集合或者是使用val修饰的变量。spark的计算功能是通过RDD来实现的,那么如何去创建RDD呢?:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。// 创建一个本地集合。例如,读入外部的文件。
2025-05-07 08:34:16
436
原创 Spark集群搭建-Standalone
9.启动SPARK集群。进入到hadoop100机器,切换目录到/opt/module/spark-standalone/sbin下,运行命令 ./start-all.sh。进入/opt/module/把解压的内容重命名一下,mv spark-3.1.1-bin-hadoop3.2/ spark-standalone。注意,这里不要省略./,它表示的是当前目录下的start-all命令,如果省略了./,它就会先去环境变量PATH中指定的目录来找这个命令。
2025-05-07 08:17:36
239
原创 finalshell的配置
我们在从本机开始去连接虚拟机时,都是通过ip地址来连接的,不方便。我们可以通过hostname的方式来访问。ping hadoop100或者是ping 192.168.10.100都应该可以通。5. 找到刚才建立的连接,点击连接。主机:192.168.10.100,或者是配置hosts之后的主机名。1. 点击开始安装,安装到D盘。安装目录没有中文,没有空格。输入对应主机的用户名密码。2. 启动finalshell,新建。2. 使用ping 命令来检查。1. 修改hosts文件。来,我们一起操作一下。
2025-05-07 08:14:57
188
原创 如何在idea中写spark程序
(1)访问Scala官方网站(https://www.scala-lang.org/download/)下载适合操 作系统的Scala安装包。安装Scala的操 作,也是一路默认安装即可。(2) 打开命令提示符(CMD),输入以下命令:scala -version 如果显示Scala 的版本信息,说明安装成功。Spark是基于scala的,当然它也可以支持java和scala还有python语言,我们这里会使用scala。它的功能是wordcount的功能:从指定的文件夹中去读取文件,并做词频统计。
2025-04-28 20:12:33
322
原创 如何搭建spark yarn模式的集群
1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。对应的命令是:tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module。使用xsync /opt/module/hadoop-3.1.3/etc/hadoop/同步一下。
2025-04-28 20:11:48
318
原创 spark和Hadoop之间的对比和联系
同时,YARN的资源管理机制也使得Spark任务的调度更加灵活,能够根据任务的优先级和资源需求进行合理的分配。例如,HBase可以作为数据存储和索引工具,与Spark和Hadoop一起使用,实现对大规模数据的高效存储和快速查询;当某个节点的数据丢失时,Spark可以根据RDD的血统信息重新计算丢失的数据。在这种场景下,数据的处理速度不是最关键的,而Hadoop的稳定性和可扩展性能够很好地满足需求。HDFS可以作为大规模数据的存储仓库,能够存储PB级的数据,并且具有高可靠性和高容错性。
2025-04-23 11:21:53
722
原创 yarn基本介绍
NodeManager(NM):YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。根据RM命令,启动Container容器,监视容器的资源使用情况。ResourceManager(RM): YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。接收用户的作业提交,并通过NM分配,管理各个机器上的计算资源。应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。1.hadoop的三大结构及各自的作用?3.yarn的三大组件及各自的作用?
2025-04-18 15:08:02
138
原创 MapReduce工作原理详解
**分区(Partitioning)**:根据 key 的哈希值决定数据发送到哪个 Reduce 任务。- **Combiner(可选)**:本地 reduce,减少网络传输量。- **排序(Sorting)**:每个分区内的数据按键排序。- **数据本地性优化**:优先在存储数据的节点上执行任务。- **Map 阶段**:处理输入数据并生成中间键值对。- **Reduce 阶段**:对中间结果进行汇总处理。- **数据从 Map 端拷贝到 Reduce 端**
2025-03-31 20:03:38
317
原创 Hadoop集群常用命令
启动所有Hadoop服务。# 停止所有Hadoop服务。# 列出所有运行中的应用程序。# 查看MapReduce作业状态。## MapReduce作业命令。# 检查YARN节点状态。2. **文件权限和所有权**# 查看集群资源使用情况。# 提交MapReduce作业。1. **平衡HDFS数据**1. **启动/停止集群**# 检查HDFS一致性。2. **检查集群状态**# 检查HDFS状态。# 检查集群健康状态。1. **基本文件操作**# 查看应用程序日志。2. **检查文件系统**
2025-03-31 20:02:02
305
原创 如何配置虚拟机的IP上网
具体操作:选择控制面板->网络连接->VMware network Adapter Vmnet8->点击右键,选择属性,TCP/IPv4协议,改成:IP4地址:192.168.10.1 IPV4网关:192.168.10.2。linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。将这个虚拟机的网络设置重启,让它生效。
2025-03-01 22:41:17
672
原创 虚拟机中的指示命令
14. 在命令模式下:shift+zz:实现快速保存退出 G:可以调到文件的最后一行 gg:跳到文件的第一行 Home:快速定位到行首 End:可以快速定位到行尾 yy:复制光标所在行的内容 (n)yy:ex:3yy:复制当前行往下3行内容 p:当前行的下一行粘贴 P:当前行的上一行粘贴 dd:删除光标所在当前行内容 (n)dd:ex:3dd 删除当前行往下的3行 u:撤销上一步的操作 ctrl+r:反撤销(重做上一步的操作)会把111写入a.txt这个文件中,把之前的内容删除掉。
2025-03-01 18:36:03
295
原创 Linux中的查看命令
a:显示所有文件和目录,包括以 . 开头的隐藏文件和目录。-t:按修改时间排序,最新修改的文件或目录排在最前面。-S:按文件大小排序,最大的文件或目录排在最前面。-R:递归地列出指定目录及其子目录下的所有文件和目录。选项一起使用,以人类可读的格式显示文件大小(例如,使用。
2025-02-22 23:01:00
436
原创 如何安装配置虚拟机
稍等一下,选择中文语言,继续,找到安装位置并进入,直接完成,开始安装,设置密码(自定义),安装完成重启虚拟机。二:安装完成之后,点击文件心建虚拟机,选择自定义,下一步,点击下一步,选择稍后安装操作系统,选择完成下一步,客户端操作系统Linux,版本(Centos 7 64位),下一步,虚拟机名称自定义,运行位置自选,下一步,处理器数量(1),每个处理器内核数量(1),一直点下一步到最后完成。用来在自己的电脑上安装虚拟机。如果安装VMware17.6时,提示缺少文件,再来安装它,否则不用。
2025-02-19 17:38:32
224
原创 Scala的泛型
需求:定义一个名为getMiddleEle的方法 用它来获取当前的列表的中间位置上的值 中间位置的下标=长度/2。目标: getMiddleEle(List(1,2,3,4,5)) ==> 下标为2的元素是:3。getMiddleEle(List(1,2,3,4)) ==> 下标为2地元素是:3。List[Int]: List是列表, [Int]是说列表中的每一个元素都是int!def 函数名 (参数名:类型):返回值的类型={ 函数体 }(2)名称合法就行,没有固定的。类型参数:泛型(数据类型是变化的)
2024-12-11 23:36:56
422
原创 Scala的隐式类,隐式参数和值,隐式对象
隐式类中参数只能定义一个,参数中的源类型与目标类型一一对应,只能从一种类型转换成另一种类型,不可以一对多或多对。1.Scala的隐式类定义语法:implicit class 类名(参数){ }2.Scala的隐式参数定义语法:def 函数 (implicit){ }3.Scala的隐式值定义方式:implicit val/var 变量名。4.Scala的隐式对象格式:implicit object。作用:给函数的默认参数提供隐式值。
2024-12-11 23:29:41
412
原创 Scala的隐式转换
2.scala的隐式转换函数:implicit def 函数名。②:函数名字不重要,重要的是。转换失败:原因是Double类型不能转换为Int类型。1.隐式转换:自动的,偷偷的把数据A->B。隐式转换:implicit修饰的函数。3.隐式值:implicit 修饰变量。有可能会成功,也有可能失败。特点:①:被自动调用。
2024-12-08 22:44:05
177
原创 正则表达式
11.\w:[a-zA-Z0-9_]63个字符中任意一个,“一个字”6.脱字符^如果在正则的最前面,表示要匹配的内容必须在字符串的开头。7.脱字符$如果在正则的最后面,表示要匹配的内容必须在字符串的结尾。2.[a-z]:表示从a到z中的26个字母中的任意一个。3.[A-Z]:表示从A到Z中的26个字母中的任意一个。4.1[^ab]:表示匹配一个字符,除a,b之外的。8.英文的.:表示除了换行之外的其他的任意一个字符。4.[0-9]:表示从0到10中的任意一个。14.\S:表示 除 \s之外的字符。
2024-12-03 17:44:21
726
原创 scala的匹配语言
作业:从Map中打印所有年龄为1971的创业者的信息。1.匹配类型:Any任意的,匹配的类型无所谓。3.匹配case class。
2024-11-30 21:47:48
277
原创 scala的名次排名
(1).如果当前的分数不等于预设分数,则名次+1,更新预设分数。(2).如果当前的分数等于预设分数,则名次不变。对有序的列表,从前开始向后一一比较。1.准备一个空的List。2.读取文件—按行读取。3.添加学生到List。
2024-11-27 22:07:14
424
原创 Scala的数组和字符串
数组:Array:二维数组创建方式:val arr=Array.ofDim[Int](grouped():将几个元素分为一组。1.substring(起点下标,终点下标-不包含终点)2. .toInt为转化为int类型的数。
2024-11-20 18:31:36
262
原创 Scala的集合
Queue:队列,先进先出,入队enquque(),出队dequeue()两者均为可变集合需导入scala.collection.mutable。Stack:栈,后进后出,入栈push(),出栈pop()
2024-11-20 18:02:33
166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅