- 博客(65)
- 收藏
- 关注
原创 Zookeepe
分布式系统是一种由多个独立的计算机(节点)组成的系统,这些节点通过网络通信来协同完成任务,对外表现为一个整体的系统。一般是产品人员提需求 → 数据部门搭建数据平台,分析数据指标 → 数据可视化(报表展示,邮件发送,大屏幕展示等等)一共有四个组成部分:MapReduce计算,Yarn资源调度,HDFS数据存储,Common辅助工具。进入到我们安装yarn的主机,通过命令来关闭掉yarn和historyServer,然后再重启。大数据不止有数量大这个显著的特点,还有其他的特点,我们总结为4V。
2025-05-13 11:26:49
141
原创 SparkSQL-数据提取和保存
下面来做一个综合案例:读入csv文件中的数据,并做简单的数据筛选,然后 写入数据到数据库。准备工作:建立一个.csv文件,然后添加基本数据。从给定的csv文件中,读入数据。
2025-05-13 11:18:40
98
原创 SparkSQL操作Mysql
接下来,我们去创建一个新的数据库,数据表,并插入一条数据。参考代码如下-- 创建数据库-- 使用数据库USE spark;-- 创建表-- 插入示例数据-- 查看所有数据-- 退出quit提醒:use spark;的作用是使用当前数据库;新建项目,或者使用之前的项目也可以。修改pom.xml文件。补充三个依赖:(1)scala-library 是 Scala 语言的基础库,是编写 Scala 程序的必要条件。
2025-05-13 11:16:04
273
原创 SparkSQL操作Mysql-准备mysql环境
查看是否已安装MySQL。命令是: rpm -qa|grep mariadb若已安装,需要先做卸载MySQL的操作命令是:rpm -e --nodeps mariadb-libs。rpm -ivh 是 Linux 中用于安装 RPM(Red Hat Package Manager)软件包的命令。使用的命令是: mysqld --initialize --user=mysql。-v:表示显示详细(verbose)信息,提供更多安装过程中的输出信息。-h:表示在安装过程中显示进度条,以 # 符号表示安装进度。
2025-05-13 11:12:06
714
原创 结构化数据处理
agg(sum($"quantity").as("total_quantity"), sum($"quantity" * $"price").as("total_sales")):对每个分组进行聚合操作,计算销售总量和销售总额,并分别命名为 total_quantity 和 total_sales。使用sql风格操作的前提是将DataFrame注册成一个临时表,在程序中直接使用spark.sql()方式执行SQL查询,结果将作为一个DataFrame返回。每一行代表一条记录,每一列代表一个属性。
2025-05-13 10:59:58
794
原创 RDD的自定义分区器-案例
在代码中,通过编写一个自定义的分区函数,根据用户 ID 的范围返回对应的分区编号。由于默认的分区器无法满足按照用户 ID 范围分区的需求,所以要自定义一个分区器。具体来说,将用户 ID 在 0 - 1000 的订单数据分到一个分区,1001 - 2000 的分到另一个分区,2001 及以上的分到第三个分区。对电商订单数据进行处理,订单数据包含用户 ID 和订单金额,不同地区的用户有不同的 ID 范围。问题描述:需要根据特定的用户 ID 范围来定义分区规则,确保相同地区的订单数据被分配到相同的分区。
2025-05-13 10:51:35
477
原创 分区器和默认分区器
MyPartitioner类继承自Partitioner,实现了numPartitions方法指定分区数量为 3 ,实现getPartition方法,根据球队名称判断分区索引,湖人对应分区 0,火箭对应分区 1,其他球队对应分区 2。假设分区数为 n,键为 key,则分区编号的计算公式为 hash(key) % n。2.在main方法中,创建包含球队信息的 RDD,然后调用partitionBy方法并传入自定义分区器MyPartitioner,对 RDD 进行分区,最后将分区后的数据保存到指定路径。
2025-05-13 10:33:33
237
原创 自定义分区器-基础
这就类似于 Spark 中的分区,每个分区的数据可以在不同的计算节点上同时进行处理,从而加快整个数据处理的速度。:Spark 能够同时对多个分区的数据进行处理,充分利用集群的计算资源,进而加快作业的执行速度。在 Spark 中,分区是指将数据集按照一定的规则划分成多个较小的子集,每个子集可以独立地在不同的计算节点上进行处理,这样可以实现数据的并行处理,提高计算效率。在 Spark 中,RDD 是数据的集合,它会被划分成多个分区,这些分区可以分布在不同的计算节点上,就像图书馆的书架分布在不同的房间一样。
2025-05-13 10:24:47
251
原创 Spark缓存中的persist和cache方法
在 Spark 中,persist 和 cache 方法都用于将 RDD(弹性分布式数据集)或 DataFrame 持久化,以避免重复计算从而提升性能,但二者存在一些区别。1. 功能本质persist:这是一个通用的方法,能够指定多种不同的存储级别。存储级别决定了数据的存储位置(如内存、磁盘)以及存储形式(如是否序列化)。
2025-05-13 10:15:55
181
原创 Spark缓存
专门存高频使用的内容,让计算机 / 程序能“就近取材”,避免重复从低速设备读取。就像把常用东西放在手边,提升效率。核心思想——将高频使用的内容存放在“方便取用的地方”,减少重复获取的时间前面介绍的是一般意义上的缓存,具体来介绍RDD缓存。Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或缓存多个数据集。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。这使得后续的动作变得更加迅速。
2025-05-13 10:11:24
304
原创 Spark处理过程-案例数据清洗
以下是 10 条符合上述示例中数据格式(姓名,年龄,性别)的测试数据,包含了一些可能需要清洗掉的无效数据,你可以将其保存为一个文本文件,用于测试上面的数据清洗程序。过滤算子中,函数返回为false,就会被过滤掉,函数返回为true,就会被保留下来。这里面:“赵六”的年龄不是有效的数字,在执行数据清洗程序时,这些行应该会被过滤掉。// ①如果它不是数字或者缺失,则忽略这条数据。// 2.开始过滤,对每一行数据进行分析。// (1)字段拆分,拆分出年龄这个字段。// 3.保存过滤之后的文件。
2025-05-13 09:40:39
376
原创 Spark处理过程-行动算子
行动算子是触发 Spark 计算的“触发点”,因为 Spark 的 RDD 是懒惰计算的,只有在执行行动算子时,才会真正开始计算。它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。
2025-05-07 15:59:15
786
原创 Spark处理过程-转换算子
它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。
2025-05-07 15:51:40
622
原创 在sheel中运行Spark
在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。RDD的分区是RDD数据存储的最小单位。举个生活中的例子:高考的时候,每个班的同学都打散到不同的考场,此时的高3(8)班就是一个抽象的概念,在实际中,这个班级的学生可能分布在5个不同的考场。
2025-05-06 09:42:21
1019
原创 如何在 IntelliJ IDEA 中编写 Speak 程序
通过本文的介绍,你已经了解了如何在 IntelliJ IDEA 中编写一个简单的 Speak 程序,包括语音转文本和文本转语音的功能。借助 Google Cloud 提供的强大语音处理 API,我们可以轻松实现语音交互功能。当然,这只是语音交互开发的入门示例,你可以根据实际需求进一步扩展功能,例如添加语音识别的实时交互、多语言支持等。希望本文能为你的开发之旅提供一些帮助!
2025-04-28 20:16:52
856
原创 搭建speak yarn集群:从零开始的详细指南
通过本文的步骤,您已经成功搭建了一个 Spark on YARN 集群。在实际使用中,您还可以根据需求进一步优化配置,例如调整资源分配策略或优化任务调度参数。希望本文能帮助您更好地理解和使用这一强大的大数据处理平台。如果您在搭建过程中遇到任何问题,欢迎留言交流。
2025-04-28 20:04:09
1150
原创 配置历史服
大家可以通过./stop-all.sh 来停止spark集群,然后再通过start-all来重新启动集群。2.修改/opt/module/spark-standalone/conf/spark-default.conf.temple。代码说明:这里指定了历史任务相关的信息要保存在集群的/directory文件夹下,所以要确保我们有这个目录,并且hdfs服务时是开启的状态。进入/opt/module/spark-standalone/sbin, 运行命令 ./stop-all.sh。此时应该是没有任务的。
2025-04-23 14:50:00
204
原创 Spark集群搭建-Standalone
Spark 的 Standalone 模式是一种独立的集群部署模式,自带完整服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。一句话理解是:它自带yarn功能。
2025-04-23 14:49:41
944
原创 Spark集群搭建-spark-local
在安装Spark时,它就提供了一些示例程序,我们可以直接来调用。进入到spark-local,运行命令spark-submit命令。这里的 \ 是换行输入的意思,整体的代码就只有一句,只不过太长了,我们把它拆开成几个部分来输入,其中\ 的意思就是这里写不下,写在下一行。接下来的操作,我们把它上传到集群中的节点,并解压运行。1.打开etc/profile.d/my_env.sh文件中,补充设置spark的环境变量。的值,具体运行效果如下。请注意,它并不会产生新的文件,而是直接在控制台输出结果。
2025-04-22 10:02:44
435
原创 Spark和Hadoop之间的对比和联系
Spark和Hadoop在大数据处理领域都具有重要的地位。Hadoop以其高容错性、高可靠性和可扩展性,适合处理大规模的离线数据处理任务;Spark则以其内存计算能力、高性能和多计算模式支持,适合处理对实时性要求较高的数据处理任务。两者在数据存储、生态系统和计算模型等方面存在着紧密的联系,可以相互配合,共同满足大数据处理的多种需求。在实际应用中,企业可以根据自身的需求和场景,选择合适的框架或将其组合使用,以实现高效、可靠的大数据处理。
2025-04-22 08:36:11
1167
原创 案例-流量统计
但是,这里有一个问题:map和reduce这两个函数都是通过key,value的方式来进行数据交互的,这里的key可以设置为手机号,而value值就比较复杂,它有两个信息:上行流量和下行流量要统计。而这就必然引出一个新的问题:因为key,value是需要进行磁盘的读写的,所以它们必须要能序列化,如果我们创建一个新的类来描述流量数据,就必须也实现序列化。在map阶段,我们读入每一行数据,通过空格分割,切分字段,抽取手机号,上行流量和下行流量。在reduce阶段,我们把相同手机号的数据进行求和汇总。
2025-04-15 08:15:47
230
原创 一分钟学会数据清洗
它是指对采集到的原始数据进行预处理,以去除错误、重复、不完整或不一致的数据,使数据符合分析要求的过程。对于reduce函数来说,它的输入参数是:<刷选后的每一行的内容,[null,null,...]>,对于我们的需求来说,并不需要这个阶段。在之前的项目的基础之上,重写去写一个包,并创建两个类:WebLogMapper和WebLogDriver类。map阶段:按行读入内容,对内容进行检查,如果字段的个数少于等于11,就删除这条日志(不保留)<偏移量,每一行的内容> → <刷选后的没一行的内容,null>
2025-04-02 15:43:53
253
原创 mapreduce的工作原理
虽然新框架(如 Spark)在性能上更优,但 MapReduce 仍是 Hadoop 生态的核心组件,理解其原理对学习大数据技术至关重要。的思想,将大数据任务分解为多个小任务,并行处理后再合并结果。如果某个 Task 执行过慢,集群会启动相同任务的备份,取最先完成的结果。:在 Reduce 阶段前,数据按键排序,便于归约处理。在 Map 阶段后,先对本地数据进行聚合,减少网络传输。:处理输入数据,生成键值对(Key-Value)。:合并 Map 阶段的输出,生成最终结果。读取输入分片,逐行处理数据,生成。
2025-03-31 20:08:12
967
原创 Hadoop集群的常见命令
本文介绍了Hadoop集群中最常用的HDFS、YARN和集群管理命令,涵盖文件操作、资源调度和集群维护等方面。熟练掌握这些命令,可以更高效地管理和优化Hadoop集群。希望这篇指南对您有所帮助!如果有任何问题或补充,欢迎在评论区留言讨论。
2025-03-31 19:58:20
797
原创 【Linux】配置hosts
把虚拟机上的软件yum想象成你自己开的一家商场,那么yum的源就是你的供货商。hosts 文件是一个本地的文本文件,它的作用是将主机名映射到对应的 IP 地址,在 DNS(域名系统)解析之前,系统会先查询 hosts 文件来确定目标主机的 IP 地址。2.浏览器打开了host文件,发现了我们加入的这一行代码,然后,去访问127.0.0.1这个ip地址。网络上的免费而稳定的源有很多,这里我们选择阿里云的源。现在我们可以通过finalshell这个工具来连接我们的远程服务器,不过我们连接主机的时候,需要。
2025-03-04 09:59:17
1557
原创 VMware虚拟机IP配置
linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。具体操作是:点击编辑→虚拟网络编辑器。注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。具体设置为:进入虚拟机,修改对应的IP。检查是否能Ping通外网。(3)设置虚拟机的IP。
2025-02-26 15:28:18
840
原创 Linux 的基本命令
路径中的特殊字符 :1 .开头是隐藏文件 2 ..当前目录的上一级目录 3 ~波浪线,当前用户的home目录,比如root用户home目录是/root。cd / 根目录 pwd 当前路径 相对路径 绝对路径。
2025-02-19 16:04:08
280
原创 手把手教你使用VMware创建虚拟机
创建完虚拟机后,点击编辑虚拟机设置。选择稍后安装操作系统,点击下一步。点击确定后,就可以开启虚拟机了。选择Linux,点击下一步。设置虚拟机名称,点击下一步。点击创建新的虚拟机图标。选择自定义,点击下一步。
2025-02-18 20:37:53
229
原创 Scala 的迭代器
迭代器需要通过集合对应的迭代器调用迭代器的方法来访问。支持函数式编程风格,便于链式操作。//任务:输出每一个元素//任务:跳过前两个,从第3个开始输出//迭代器//1.创建一个迭代器(iterator)//依次访问每个元素运行结果如下:drop:从当前位置开始,跳过指定数量的元素,得到新的迭代器take:从当前位置开始,取几个元素,得到新的迭代器toList的作用:把迭代器中剩余的元素保存到一个List中zip方法(拉链):把两个迭代器合成一下,得到新的迭代器,长度以短的为准。
2024-12-18 15:37:29
536
原创 Scala 的隐式转换
隐式对象是一个带有implicit关键字的单例对象,它可以用于提供某种类型的实例以供隐式转换使用。思路:把BaseUser 通过隐式转换,改成一个新类型,而是这个新类型中有这新的方法。困难:函数有一个默认数值,在不传入具体的实参时,就会自动使用这个默认值。任务:给之前是BaseUser添加新的功能,但是,不要直接去改代码。隐式对象和前面讲的隐式参数比较类似,都是用来设置初始数据的。它有失败的时候(Double --> Int),有成功的时候。它的作用:拓展已有类的功能,而不需要去修改之前的类的代码。
2024-12-11 16:53:18
602
原创 正则表达式
简单来说,它就像是一种文本模式的“配方”,可以让计真机根据这个“配方” 在文本中找到符合要求的内容。前面我们学习了文件匹配相关的内容,其中在做单词调频统计的时侠,用到了IW+这个内容,当时没有展开来介绍。\\d{9}:\\d代表数字字符(等同于[0-9]),[9]量词修饰,表明需紧接着匹配连续9个数字,对应手机号陈去前两位固定格式外的后续数字部分。[3-9]:字符类设定,限定手机号第二位数字取值在“3”至“9”这个区间内,筛除不符合运营商号段分配起始数字规律的值。1.正则表达式的定义。
2024-12-09 16:12:11
341
原创 Scala 的匹配模式
模式匹配是Scala中非常有特色、非常强大的一种功能,类似于Java中的switch case语法,即对一个值进行条件判断,然后针对不同的条件进行不同的处理。模式匹配属于Scala中的高级特性,在Scala中占有非常重要的地位,Scala程序的源代码中存在大量的模式匹配。其中,value是要进行匹配的值,pattern是匹配模式,guardCondition是守卫条件(一个布尔表达式),result是当该case 分支匹配成功时返回的结果。模式匹配还可以根据元素的个数,元素的特征来匹配。
2024-12-02 16:54:45
1042
原创 Scala 的Array 和 ArrayBuffer 集合
通过Array(Array1,Array2,..,Arrayn)方式可以静态地把数组中的元素定义为数组,例如Array(Array(0,2),Array(3,4))。Scala的Array与Java中的不同点为Scala中的Array可以作为序列使用,通过隐式转换的方式把Scala中的数组转换成序列。下面主要对Array和ArrayBuffer这两种相对应的集合进行介绍,通过可变数组与多维数组的理论知识结合相关案例深入分析Array和ArrayBuffer的应用。第三种方式:利用数组中的方法。
2024-11-20 16:16:18
928
原创 Scala 的List
在集合中添加多个集合元素使用..方式,例如 List(1,2)=11,List(3,4)=12,结合这两个集合可以使用1:12=(1,2,3,4)。Scala中的List 与Java中的完全不同,它是基于链表实现的并且是一个不可变的集合,无论大小还是元素都是不可变的。首先,列表是不可变的,值一旦被定义了就不能改变,其次,列表具有递归的结构(也就是链表结构), 而数组不是。定义List的类型方式为List[T],T表示数据类型,指定List集合中只能存放T类型的元素。2.Scala的List的类型。
2024-11-13 16:10:48
681
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人