- 博客(67)
- 收藏
- 关注
原创 RDD的自定义分区器-案例
具体来说,将用户 ID 在 0 - 1000 的订单数据分到一个分区,1001 - 2000 的分到另一个分区,2001 及以上的分到第三个分区。对电商订单数据进行处理,订单数据包含用户 ID 和订单金额,不同地区的用户有不同的 ID 范围。我们会按照地区对订单数据进行分区,这样做能让相同地区的订单数据处于同一分区,便于后续按地区进行统计金额分析。使用自定义分区器对 RDD 进行分区操作,确保相同地区(用户 ID 范围相同)的订单数据处于同一分区。// 模拟电商订单数据,键为用户 ID,值为订单金额。
2025-05-09 14:46:41
662
原创 自定义分区器
数据倾斜问题:当数据分布不均匀时,可以通过自定义分区器将数据均匀分布到各个分区。特定业务需求:根据业务逻辑将特定数据分配到同一分区,以便在后续计算中更高效地处理自定义分区器需要:继承Partitioner抽象类 + 实现其中的两个方法。numPartitions :返回分区的数量,即整个 RDD 将被划分成多少个分区。
2025-05-09 14:41:55
437
原创 Hadoop集群的使用
前面我们学习了文件相关的操作,接下来我们看看如何去执行程序,是不是有分布式的效果。上传文件的时候,我们传一个大一点的(>128M),再传一个小一点的。对于大一点的文件,我们要去看看它是否会按128M为单位去拆分这个大文件,而拆分成大文件之后,我们又怎么才能去还原?上传完成之后,我们去查看,很明显大文件被分块了,128M一块,一共有两个块。在我们上一节的hadoop配置中,我们设置了保持文件的目录是/data,所以,我们进入hadoop的按照目录下的data中去看一看。
2025-05-08 17:39:19
920
原创 Hadoop集群的配置
(1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等。刚才我们是在hadoop100这台机器上进行了正确的设置,但是,其他的2台机器也要做相同的配置。Yet Another Resource Negotiator,简称YARN,另一种资源协调者,是Hadoop的资源管理器。但是,我们要把它搭建起起来,就必须要了解它的基本组成,知道它的内部分工。-- 指定ResourceManager的地址-->
2025-05-08 17:37:19
840
原创 配置Hadoop集群环境-使用脚本命令实现集群文件同步
在一台机器上模拟出 Hadoop 分布式系统的各个组件,各个组件在逻辑上是分离的,但是都运行在同一台物理机器上,以此来模拟分布式环境。在hadoop102上,将hadoop101中/opt/module/hadoop-3.1.3目录拷贝到hadoop102上。把hadoop100上的环境变量配置和安装的两个软件都同步到hadoop101和hadoop102上去。,假设名为xsync,给它指定一个参数,它的作用就是把这个位置的内容同步给其他的设备。重新查看它的颜色,它现在已经变成执行的脚本了(如上右图)。
2025-05-08 17:35:31
723
原创 VI编辑器
(2)按下o:进入到编辑输入模式后,在当前行的后面添加一行空行(当前行的下一行)当我们通过VI命令第一次打开文件的时候,进入的就是命令模式。2. 如果文件已经存在,此时就打开这个文件,进入命令模式。从命令模式切换到底线命令模式,输入: 进入底线命令模式。由于没有鼠标,我们的操作都是用键盘来控制光标的。它是linux的内置命令,所以还是以命令的方式来运行。(1)按下i: 进入编辑模式,定位到当前光标前面。来,我们实操一下,如何从命令模式进入输入模式?(3)在输入模式下,按下ESC退回到命令模式。
2025-05-08 17:26:33
405
原创 Spark缓存--persist方法
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-08 17:23:17
566
原创 Spark缓存--cache方法
在Spark 中,cache()是用于优化计算性能的核心方法之一,但它有许多细节需要深入理解。以下是关于cache()cache()persist()cache()是的快捷方式,将数据以的形式存储在内存中。:调用cache()后,数据不会立即缓存,只有在首次触发(如count()show()collect())时才会执行缓存。:默认使用,若内存不足,未缓存的分区会在后续需要时重新计算。:Spark 记录 RDD/DataFrame 的血缘关系(即生成该数据的操作步骤)。
2025-05-08 17:18:39
986
原创 Spark缓存
第二次调用collect时,因为之前已经调用了cache方法,并且结果已被缓存,所以不需要再次执行计算,直接从缓存中读取数据。通过对比两次计算的耗时,可以明显发现第二次计算耗时会远小于第一次(在数据量较大或计算复杂时效果更显著),这就体现了cache方法缓存计算结果、避免重复计算、提升后续操作速度的作用。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。这就是没有缓存的效果。时,该RDD将会被缓存在计算节点的内存中,并供以后重用。
2025-05-08 17:13:16
952
原创 Spark处理过程-案例数据清洗
coalesce(1)这个方法可以让结果全部保存在一个文件中。包含用户信息的文本文件,每行格式为 姓名,年龄,性别,需要。// 创建 SparkContext 对象。// 创建 SparkConf 对象。// 停止 SparkContext。// 停止 SparkContext。// 读取文本文件,创建 RDD。如果它不是数字或者缺失,则忽略这条数据。如何把清洗之后的数据保存到一个文件中。// 保存清洗后的数据到文件。字段拆分,拆分出年龄这个字段。// 使用filter算子。// 输出清洗后的数据。
2025-05-08 17:01:53
560
原创 Spark处理过程-行动算子
行动算子是触发 Spark 计算的“触发点”,因为 Spark 的 RDD 是懒惰计算的,只有在执行行动算子时,才会真正开始计算。它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。
2025-05-08 16:51:10
283
原创 Spark处理过程-转换算子
它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。2.filter 算子。
2025-05-08 16:47:43
418
原创 RDD的处理过程
RDD中所有的转换都是延迟的,它们并不会直接计算结果。相反,他们只是记住这些应用到基础数据集上的转换动作。只有当发生要求返回结果给driver的动作时,这些转换才会真正运行。RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使用,直到最后一个RDD经过“行动”操作才会真正被计算处理。Spark使用Scala语言实现了RDD的API,程序开发者可以通过调用API对RDD进行操作处理。一个RDD运算之后,会产生新的RDD。
2025-05-08 16:43:46
338
原创 数据压缩实现案例
只需要在dirvier类的代码中,去设置在reduce端输出压缩开启,并设置压缩的方式即可。运行之后,发现输出的结果格式没有变化,因为它是中间过程。对应的代码有如下两行,其他的代码不动。/ 设置reduce端输出压缩开启。是否在输出结果中看到了压缩的格式。// 设置map端输出压缩方式。Mapper和Reducer。// 开启map端输出压缩。// 省略其他.....和Reducer代码。// 设置压缩的方式。
2025-05-07 09:10:55
600
原创 数据的压缩
如果需要切片,重点考虑支持切片的Bzip2和LZO。有损压缩则会在一定程度上牺牲数据的精度来换取更高的压缩比,适用于对数据质量损失有一定容忍度的场景,如图像、音频、视频等多媒体数据。数据压缩是指在不丢失或尽可能少丢失数据信息的前提下,通过特定的算法和技术,对原始数据进行重新编码和处理,以减少数据存储空间或传输带宽的过程。其目的是提高数据存储、传输和处理的效率,同时保证数据的可用性和一定的质量要求。压缩方式选择时重点考虑:压缩/解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片。
2025-05-07 09:09:59
192
原创 如何让实现流量统计
创建一个目录data下保持了一些日志文件,文件的内容格式如下。需求统计每一个手机号耗费的总上行流量、总下行流量、总流量。有输出的结果,并且流量统计计算是正确的。写一个Bean对象,保存流量信息。实现Writable接口。运行程序,查看效果。
2025-05-07 09:07:49
114
原创 分区器的应用
说明:这里的setNumReduceTasks的值最好与setPartitioner返回的分区器的个数一致。默认的分区器是HashPartitioner,它会根据键的哈希值将数据均匀分配到各个Reducer中。在MapReduce框架中,分区器(Partitioner)是一个关键组件,其主要作用是决定由一个maptask生成的键值,最终是生成在哪个文件中的。自定义分区器:如果使用自定义分区器,可以根据特定的逻辑(如键的首字母、键的范围等)将数据分配到不同的Reducer中。// 根据单词的首字母分配分区。
2025-05-07 09:01:54
272
原创 数据清洗ETL
它是指对采集到的原始数据进行预处理,以去除错误、重复、不完整或不一致的数据,使数据符合分析要求的过程。它在整个数据分析和数据处理流程中处于非常重要的位置,因为数据质量的好坏直接影响到后续分析结果的准确性和可靠性。代码说明:NullWritable就等价于null,context.write(value,NullWritable.get())就表示只有key,没有value。在之前的项目的基础之上,重写去写一个包,并创建两个类:WebLogMapper和WebLogDriver类。// 1 获取job信息。
2025-05-07 08:57:31
336
原创 集群免密登录
hadoop101上。这里专门有一个命令ssh-copy-id。它的格式是: ssh-copy-id 目标机器。这里的id_rsa就是私钥,id_rsa.pub就是公钥。在hadoop100上,输入ssh hadoop101命令,看看是否可以免密登录?这个命令就会生成一对公钥和私钥,那它们具体在哪,长得什么样子呢?在hadoop100上登录hadoop101,验证效果。把hadoop100的公钥发到hadoop101上。在hadoop100上 生成密钥对。在hadoop100上,
2025-05-07 08:41:53
395
原创 RDD简介
Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算 的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。val distData = sc.parallelize(data, 2) // 第二个参数是分区数。// 通过 parallelize 方法将本地集合转换为 RDD。// 创建 SparkConf 和 SparkContext。// 创建 SparkConf 和 SparkContext。// 创建一个本地集合。
2025-05-07 08:35:32
569
原创 如何在sheel中运行Spark
启动hdfs集群,打开hadoop100:9870,在wcinput目录下上传一个包含很多个单词的文本文件。// 将元组的value按照key来分组,对所有的value执行聚合操作(相加)// 将单词转换为元组对象,key是单词,value是数字1。// 将单词进行切割,得到一个存储全部单词的RDD。// 收集RDD的数据并打印输出结果。启动之后在spark-shell中写代码。// 读取文件,得到RDD。
2025-05-07 08:31:39
384
原创 如何让将代码打包在集群上运行
复制之前的文件,重命名为WordCount_online,并修改两个地方:输入目录改成args(0), 输出的目录改成args(1)-- 添加必要的插件以打包scala程序-->完成修改之后,要刷新maven,以下载相关的插件。打包上线之后,我们的代码也要提前改下。
2025-05-07 08:22:46
518
原创 如何在Idea中编写Spark程序并运行
最后准备待统计的词频文件。在项目根目录下建立文件夹input,并创建两个文本文件:word1.txt, word2.txt并运行就可以了。它的功能是wordcount的功能:从指定的文件夹中去读取文件,并做词频统计。下载好关于所需要的空间,配置好相应的环境,例如Scala,jdk。// 提取文本内容并执行 WordCount 操作。// 创建 SparkContext 对象。// 将所有分区的数据合并成一个分区。// 停止 SparkContext。// 读取目录下的所有文本文件。// 保存结果到文件。
2025-05-07 08:16:56
636
原创 Spark集群搭建之Yarn模式
对应的命令是:tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module。3.修改hadoop的配置。进入/opt/module/spark-yarn/sbin,运行: ./start-all.sh 和 ./start-history-server.sh。使用xsync /opt/module/hadoop-3.1.3/etc/hadoop/同步一下。
2025-05-07 08:12:09
912
原创 如何在idea中写spark程序
File > New > Project > Maven,选择 JDK 版本,点击 Create。-- 版本需与集群一致 -->.master("local[*]") // 本地模式,[*] 使用所有核心。安装 JDK:确保已安装 JDK ,并配置 JAVA_HOME。-- Spark SQL 依赖(可选) -->-- Spark Core 依赖 -->// 创建 SparkSession。// 停止 SparkSession。
2025-04-28 19:47:04
356
原创 如何配置Spark
这个文件在spark的安装目录下的conf目录下,先把名字改为workers,然后把内容设置为三台机器的主机名,具体如下。把第一步上传的安装包解压到/opt/module下(也可以自己决定解压到哪里)。,然后修改内容,添加JAVA_HOME环境变量和集群对应的master节点以及通信端口,具体如下。进入到hadoop100(自己所配置下的机器名字)机器,切换目录到。1.上传spark安装包到某一台机器(自己在finaShell上的机器)。命令去每台机器上查看运行的进程。把解压的内容重命名一下。
2025-04-25 14:37:59
581
原创 Spark论述及其作用
包含Spark SQL(结构化数据)、MLlib(机器学习)、Spark Streaming(流处理)、GraphX(图计算)等组件,无缝集成Hadoop、Hive、Kafka等工具。提供Scala、Java、Python、R等多语言API,以及高阶DataFrame/Dataset接口,简化代码编写,支持SQL、流式SQL等高级操作。它处理速快,提供了更加简洁、高层的编程模型,提供了强大的实时数据处理能力,它可以将实时数据流分割成小的批次进行处理,实现准实时的数据分析。集群大体上分为两种模式:单机模式。
2025-04-23 11:17:38
243
原创 mapreduce的工作原理
输入数据 → 切片 → Map处理 → 排序分组 → Reduce汇总 → 输出结果。- 简单编程模型(只需写map和reduce两个函数)"分而治之":把大数据拆成小块→分别处理→合并结果。- 适合处理超大数据(因为拆成很多小块并行处理)2. Shuffle:整理归类(课代表整理)- 第1组报:(第1组, 120岁)- 第2组报:(第2组, 115岁)- 不怕机器故障(自动重新计算丢失的部分)3. Reduce:汇总结果(班长计算)1. Map:分散处理(人人干活)MapReduce原理。
2025-03-31 19:27:17
201
原创 hadoop集群常用命令
hadoop fs -chown <owner>:<group> <path>: 修改文件所有者。- hadoop fs -chgrp <group> <path>: 修改文件所属组。- hadoop fs -chmod <mode> <path>: 修改文件权限。- hadoop fs -du -h <path>: 显示目录/文件大小。- hadoop fs -rm -r <path>: 递归删除目录。- hadoop fs -cp <src> <dst>: 复制文件。
2025-03-31 19:24:45
352
原创 Linux常见命令
tar -cvf archive.tar /path/to/directory:打包。- cd /path/to/directory:进入指定目录。- tail -n 10 file.txt:查看最后10行。- head -n 10 file.txt:查看前10行。- rm -r directory:递归删除目录及其内容。- tar -xvf archive.tar:解包。- cp -r dir1 dir2:递归复制目录。- ls -l:以长格式列出。- ls -a:显示隐藏文件。
2025-03-03 19:27:46
303
原创 虚拟机ip配置
linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。配置Windows本地虚拟网卡,让本机也可以访问虚拟机。具体设置为:进入虚拟机,修改对应的IP。(3)设置虚拟机的IP。
2025-02-28 15:58:25
408
原创 windows用户安装mysql教程
2. 在“Type and Networking”界面,选择“Config Type”为“Development Computer”,点击“Next”。2. 在“Choosing a Setup Type”界面,确认选择“Developer Default”,点击“Next”。5. 在“Apply Configuration”界面,点击“Execute”应用配置,完成后点击“Finish”。1. 配置完成后,点击“Next”进入“Product Configuration”界面,点击“Finish”。
2025-02-19 11:05:43
348
原创 windows用户安装虚拟机教程
在VMware Workstation菜单中,选择“虚拟机” -> “安装VMware Tools”。选择“安装程序光盘映像文件(ISO)”,并浏览选择你要安装的操作系统ISO文件,点击“下一步”。输入操作系统的产品密钥(如果有,如果没有,则选择个人),设置用户名和密码,点击“下一步”。打开VMware Workstation,点击“创建新的虚拟机”。设置虚拟机的磁盘大小,默认20GB,点击“下一步”。设置虚拟机的名称和存储位置,点击“下一步”。选择“典型”配置,点击“下一步”。点击“完成”以创建虚拟机。
2025-02-19 11:01:59
326
原创 scala泛型的特质:Trait
在定义泛型特质的子类或者子单例对象时, 明确具体的数据类型.2)trait 类名[S,T...]泛型特质,x是泛型名称,可以更改。1)trait 类名[T]
2024-12-12 09:10:46
606
原创 scala的泛型类
val p3=new Pair[String]("黄冈","蕲春")class 类名[泛型名](成员名:泛型名). 在创建对象时, 明确具体的数据类型.class 类名(成员名:数据类型)
2024-12-12 08:38:00
366
原创 Scala映射
映射就是Map,它是由键值对(Key,value)组成的集合。特点是:键具有唯一性,但是值可以重复。val/var map=Map((键,值),(键,值),(键,值)....)注意:如果添加重复元素:两组元素的建相同,则会用新值覆盖旧值。val/var map=Map(键->值,键->值...)Map也分不可变和可变scala默认映射不可变Map。方式一:通过箭头的方式实现。方式二:通过小括号方式实现。
2024-12-11 21:53:48
305
原创 Scala元组
元组也是可以理解为一个容器,可以存放各种相同或不同类型的数据。说的简单点,就是将多个无关的数据封装为一个整体,称为元组。(3)Map 中的键值对其实就是元组,只不过元组的元素个数为 2,称之为对偶。(1)声明元组的方式:(元素 1,元素 2,元素 3)注意:元组中最大只能有 22 个元素。
2024-12-11 21:49:51
175
原创 scala列表
(5)集合间合并:将一个整体拆成一个一个的个体,称为扁平化。(2)创建一个 List(数据有顺序,可重复)(1)创建一个可变集合 ListBuffer。(1)List 默认为不可变集合。(4)List 增加数据。(2)向集合中添加数据。(3)遍历 List。(7)空集合 Nil。
2024-12-11 21:47:53
379
原创 scala数组
第一种定义:val arr1 = new ArrayInt方式定义数组(1)new 是关键字(2)[Int]是指定可以存放的数据类型,如果希望存放任意数据类型,则指定 Any(3)(10),表示数组的大小,确定后就不可以变化 第二种定义:val arr1 = Array(1, 2)(1)在定义数组时,直接赋初始值(2)使用 apply 方法创建数组对象 定义变长数组:val arr01 = ArrayBuffer[Any](3, 2, 5)(1)[Any]存放任意数据类型(2)(3, 2, 5)初始化
2024-12-11 21:45:29
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人