- 博客(54)
- 收藏
- 关注
原创 如何让实现流量统计
需求统计每一个手机号耗费的总上行流量、总下行流量、总流量。有输出的结果,并且流量统计计算是正确的。写一个Bean对象,保存流量信息。实现Writable接口。编写Driver驱动类。编写Reducer类。运行程序,查看效果。
2025-05-14 10:04:41
410
原创 数据的压缩
如果数据量小于块大小(128M),则不需要考虑切点问题,重点考虑压缩和解压缩速度比较快的LZO/Snappy。有损压缩则会在一定程度上牺牲数据的精度来换取更高的压缩比,适用于对数据质量损失有一定容忍度的场景,如图像、音频、视频等多媒体数据。数据压缩是指在不丢失或尽可能少丢失数据信息的前提下,通过特定的算法和技术,对原始数据进行重新编码和处理,以减少数据存储空间或传输带宽的过程。压缩方式选择时重点考虑:压缩/解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片。压缩的缺点:增加CPU开销。
2025-05-14 10:03:59
139
原创 数据压缩实现案例
基于WordCount案例,只需要在dirvier类的代码中,去设置在reduce端输出压缩开启,并设置压缩的方式即可。运行之后,发现输出的结果格式没有变化,因为它是中间过程。其他的Mapper和Reducer代码保持不变。其他的Mapper和Reducer代码保持不变。运行代码之后,是否在输出结果中看到了压缩的格式。对应的代码有如下两行,其他的代码不动。// 设置reduce端输出压缩开启。// 设置map端输出压缩方式。// 开启map端输出压缩。// 省略其他.....// 设置压缩的方式。
2025-05-14 10:03:03
268
原创 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-14 09:40:03
267
原创 Spark缓存--cache方法
简化的 persist():cache() 是 persist(StorageLevel.MEMORY_ONLY) 的快捷方式,将数据以反序列化对象的形式存储在内存中。惰性操作:调用 cache() 后,数据不会立即缓存,只有在首次触发行动操作(如 count(), show(), collect())时才会执行缓存。存储级别:默认使用 MEMORY_ONLY,若内存不足,未缓存的分区会在后续需要时重新计算。首次计算:当首次触发行动操作时,Spark 根据血缘执行计算,并将结果按分区缓存在内存中。
2025-05-14 09:39:30
264
原创 spark缓存
通过对比两次计算的耗时,可以明显发现第二次计算耗时会远小于第一次(在数据量较大或计算复杂时效果更显著),这就体现了cache方法缓存计算结果、避免重复计算、提升后续操作速度的作用。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的行动算子时,该RDD将会被缓存在计算节点的内存中,并供以后重用。这就是没有缓存的效果。
2025-05-14 09:38:56
399
原创 Spark处理过程-案例数据清洗
val cleanedLines = lines.filter(line => { // 使用filter算子。准备十条符合包含用户信息的文本文件,每行格式为 姓名,年龄,性别,需要清洗掉年龄为空或者非数字的行。// 创建 SparkContext 对象。// 创建 SparkConf 对象。// 停止 SparkContext。拓展:如何把清洗之后的数据保存到一个文件中。// 停止 SparkContext。// 读取文本文件,创建 RDD。// 保存清洗后的数据到文件。// 输出清洗后的数据。
2025-05-14 09:38:08
216
原创 Spark处理过程-行动算子
行动算子是触发 Spark 计算的“触发点”,因为 Spark 的 RDD 是懒惰计算的,只有在执行行动算子时,才会真正开始计算。它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。
2025-05-14 09:37:25
366
原创 Spark处理过程-转换算子
它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。作用:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。作用:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。作用:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。
2025-05-14 09:36:46
257
原创 RDD的处理过程
RDD中所有的转换都是延迟的,它们并不会直接计算结果。相反,他们只是记住这些应用到基础数据集上的转换动作。只有当发生要求返回结果给driver的动作时,这些转换才会真正运行。RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使用,直到最后一个RDD经过“行动”操作才会真正被计算处理。一个RDD运算之后,会产生新的RDD。
2025-05-14 09:36:00
290
原创 vm和centos
选择 “Linux” 操作系统,版本根据你下载的 CentOS 版本进行选择,如 “CentOS 7 64 位”,点击 “下一步”。选择 “安装程序光盘映像文件(ISO)”,点击 “浏览” 按钮,找到之前下载好的 CentOS 镜像文件,选择后点击 “下一步”。可以选择默认的安装位置,也可以点击 “更改” 按钮,指定其他磁盘路径进行安装,设置完成后点击 “下一步”。在弹出的 “新建虚拟机向导” 中,选择 “典型(推荐)”,然后点击 “下一步”。选择安装语言,一般选择 “中文(简体)”,点击 “继续”。
2025-05-07 08:30:57
262
原创 如何搭建spark yarn模式的集群
软件:确保所有节点安装了相同版本的 Java(建议 Java 8 或更高版本)和 Hadoop(包含 YARN)。网络问题:确保所有节点之间网络连通,防火墙允许 Hadoop 和 Spark 相关端口通信。权限问题:确保运行 Hadoop 和 Spark 的用户有足够的权限访问相关目录和文件。从 Apache 官网下载 Hadoop 压缩包,然后解压到指定目录。从 Apache 官网下载 Spark 压缩包,然后解压到指定目录。通过以上步骤,你就可以成功搭建一个 Spark YARN 模式的集群。
2025-05-07 08:29:15
865
原创 如何在idea中写spark程序
打开 IntelliJ IDEA,选择File -> New -> Project,接着在左侧菜单中选取Maven或者Gradle(此处以 Maven 为例),然后点击Next。在Maven Projects面板中,双击package目标进行打包,生成的 JAR 文件会存于target目录下。在编写好代码后,你可以点击 IDE 中的运行按钮或者使用快捷键Shift + F10来运行程序。通过以上步骤,你就能在 IntelliJ IDEA 中编写、运行和提交 Spark 程序了。// 收集结果并打印。
2025-05-07 08:28:36
509
原创 Spark中Maven的用法
在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。流式计算的输入数据是动态的,会一条一条的过来,是动态产生的,而MapReduce的输入数据集是静态的,不能动态变化。注:我们集群上安装的java环境是1.8的,那么我们生成的代码也必须是这个版本的,否则,就会无法运行。我们集群上安装的java环境是1.8的,那么我们生成的代码也必须是这个版本的,否则,就会无法运行。它的任务会跑好几个小时,好几天。
2025-05-07 08:27:53
268
原创 Hadoop中的序列化和反序列化
序列化的时候,它会自动被调用,将一个内存中的对象,序列化成为一个字节序列。如果序列化的属性不是Hadoop的序列化类型,就要调用相应的方法把它进行序列化。通过序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。// 2. 使用ObjectInputStream对象中的readObject方法,读取文件中的对象。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。常用的Java的数据类型与Hadoop的序列化的类型对比。// hadoop 反序列化。
2025-05-07 08:26:24
579
原创 配置Hadoop集群-配置历史和日志服务
echo " =================== 启动 hadoop集群 ==================="echo " =================== 关闭 hadoop集群 ==================="echo " --------------- 启动 historyserver ---------------"我们基本上完成了hadoop集群的所有配置了,涉及到的服务也非常多。echo " --------------- 启动 yarn ---------------"
2025-05-07 08:25:51
807
原创 教你快速配置host
hosts 文件是一个本地的文本文件,它的作用是将主机名(www.douyin.com)映射到对应的 IP 地址,在 DNS(域名系统)解析之前,系统会先查询 hosts 文件来确定目标主机的 IP 地址。在记事本中选择 “文件” -> “打开”,在 “文件类型” 中选择 “所有文件”,定位到 C:\Windows\System32\drivers\etc 目录,选择 hosts 文件并打开。在系统窗口中,点击 “更改设置”,在弹出的 “系统属性” 窗口中,切换到 “计算机名” 选项卡。
2025-05-07 08:24:38
407
原创 一分钟教你学会数据清洗
利用工具的去重功能,Excel 中可通过 “删除重复项” 按钮,pandas 中使用drop_duplicates()函数,一键就能删除这些重复数据,保证数据的唯一性。数据格式不一致也很麻烦。如员工薪资,有的以 “元” 为单位,有的以 “万元” 为单位。在数据的世界里,原始数据就如同未经雕琢的璞玉,往往夹杂着杂质,而数据清洗便是去除这些杂质,让数据闪耀光芒的关键步骤。别担心,接下来,只需一分钟,就能初步掌握数据清洗的奥秘。经过这几步,原本杂乱的数据就会变得整洁有序,为后续的数据分析和挖掘工作打下坚实基础。
2025-05-07 08:23:41
192
原创 泛型特质的应用
val rs3 = getMax(li) // 应该输出Pat("cat", 14)// 为Pat提供一个基于age的Ordered实例。//定义一个函数,用来求List元素中的最大值。//泛型特质的应用场景。//作比较找出最大值。
2025-05-07 08:22:20
193
原创 编辑器的使用
在 vim 中,默认启用语法高亮。- /pattern:查找 `pattern`(按 `n` 查找下一个,`N` 查找上一个)。- vim 支持丰富的插件,可以通过插件管理器(如 Vundle、Pathogen)扩展功能。3. 输入 :%s/hello/world/g,将文件中所有的 hello 替换为 world。- :%s/old/new/g:全局替换 `old` 为 `new`。:%s/old/new/g | 全局替换 old 为 new。- 在此模式下可以执行复制、粘贴、删除、保存等操作。
2025-05-07 08:21:46
325
原创 虚拟机IP设置
打开虚拟机mv编辑选项,打开虚拟网络编辑器,点击vmnet8,修改子网为192.168.10.0,再nat设置修改网关为192.168.10.2。打开控制面板网络连接右击vmnet8属性找到ipv4修改地址和网关地址为192.168.10.1,默认网关为192.168.10.2。进入虚拟机修改对应ip,修改配置文件vi /etc/sysconfig/network-scripts/ifcfg-ens33。检查ping能否通网 ping www.baidu.com。
2025-05-07 08:20:11
176
原创 mapreduce的工作原理
**Reduce 阶段**:Reduce 任务接收每个分区的数据,将相同单词的出现次数累加,得到最终的 `<单词, 总出现次数>` 结果,如 `<Hello, 2>`、`<World, 1>`。- **分区**:Shuffle 阶段会对 Map 任务输出的中间键值对进行分区操作,默认情况下,根据键的哈希值将键值对分配到不同的分区中,每个分区对应一个 Reduce 任务。- **Shuffle 和排序**:根据单词的哈希值将键值对分区,同一单词的键值对会被分配到同一个分区,并在分区内按单词排序。
2025-05-07 08:15:56
332
原创 配置spark
进入到hadoop100(自己所配置下的机器名字)机器,切换目录到/opt/module/spark-standalone/sbin下,运行命令 ./start-all.sh。进入/opt/module/目录下把解压的内容重命名一下。这个文件在spark的安装目录下的conf目录下,先把名字改为workers,然后把内容设置为三台机器的主机名,具体如下。注意,这里不要省略./,它表示的是当前目录下的start-all命令,如果省略了./,它就会先去环境变量PATH中指定的目录来找这个命令。
2025-05-07 08:13:01
139
原创 spark和hadoop之间的对比和联系
例如,在机器学习和图计算等需要多次迭代的算法中,Spark 可以显著减少计算时间。Hadoop:Hadoop MapReduce 基于磁盘进行数据处理,数据在 Map 和 Reduce 阶段会频繁地写入磁盘和读取磁盘,这使得数据处理速度相对较慢,尤其是在处理迭代式算法和交互式查询时,性能会受到较大影响。Hadoop:Hadoop 的 MapReduce 编程模型相对较为底层和复杂,开发人员需要编写大量的代码来实现数据处理逻辑,尤其是在处理复杂的数据转换和多阶段计算时,代码量会非常庞大,开发和维护成本较高。
2025-05-07 08:12:18
148
原创 yarn的定义,yarn的三大组件及各自作用,yarn的三个资源调度策略
它会记录每个应用程序的资源使用情况,优先为资源使用较少的应用程序分配资源,以保证每个应用程序都能公平地获取资源。核心原理:将集群资源划分为多个独立的队列,每个队列都有一定的资源容量,并且可以设置资源的最大和最小使用量。支持多计算框架:它为不同的计算框架提供了一个通用的资源管理平台,使得多种计算框架可以在同一个集群上共存和运行,提高了集群的利用率和灵活性。核心原理:按照应用程序提交的先后顺序依次调度,先提交的应用程序先获得资源并执行,直到该应用程序完成后,才会为下一个应用程序分配资源。
2025-04-18 15:31:36
288
原创 hadoop的三大结构及各自的作用
任务管理:通过 ResourceManager(RM) 分配资源,NodeManager(NM) 管理节点,ApplicationMaster(AM) 协调应用程序运行,提高资源利用率和任务并行度。集群资源调度:统一管理 Hadoop 集群的计算资源(CPU、内存等),支持多计算框架(如 MapReduce、Spark、Flink)共享集群。批量处理优化:适合离线批处理场景(如日志分析、数据清洗),但对实时计算和交互式查询支持较弱(后续衍生出 Spark 等框架)。
2025-04-18 15:07:17
129
原创 标题:Linux 常见操作命令大全:
[Linux 官方文档](https://www.kernel.org/doc/)- [Linux 进阶教程](https://linuxjourney.com/)- 检查命令是否安装,或使用 `which command` 查找命令路径。- [Linux 命令大全](https://man.linuxde.net/)- 使用 `df -h` 查看磁盘使用情况,并清理不必要的文件。- 使用 `sudo` 提升权限,或切换到 root 用户。- `-h`:以易读格式显示文件大小。
2025-03-03 19:58:58
405
原创 标题:vi 编辑器常见操作命令:从入门到熟练
在命令模式下按 `i`、`a` 或 `o` 等键可以进入插入模式,按 `Esc` 键可以返回命令模式。- 使用 `h`、`j`、`k`、`l` 进行精确移动,或使用 `gg` 和 `G` 快速跳转。- `:n`:跳转到第 `n` 行(例如 `:10` 跳转到第 10 行)。- 输入 `:x` 或 `ZZ` 保存并退出(仅当文件有修改时保存)。- 按 `n` 跳转到下一个匹配项,按 `N` 跳转到上一个匹配项。- `:w filename`:另存为 `filename`。如果文件不存在,则创建新文件。
2025-03-03 19:50:13
394
原创 标题:虚拟机中 CentOS 的 IP 配置指南:静态 IP 与动态 IP 设置详解
本文将详细介绍如何在 CentOS 虚拟机中配置静态 IP 和动态 IP(DHCP),并解决常见的网络问题。通过本文的指南,你应该已经掌握了在 CentOS 虚拟机中配置静态 IP 和动态 IP 的方法。如果虚拟机所在的网络支持 DHCP(动态主机配置协议),CentOS 会自动获取 IP 地址。(注意:`eth0` 是默认的网络接口名称,如果你的接口名称不同,请替换为实际的名称。使用 `ip addr` 查看实际的网络接口名称,并替换配置文件中的 `eth0`。希望这篇博客对你有所帮助!
2025-03-03 19:45:50
420
原创 在VM虚拟机中安装和配置 CentOS:指南
CentOS ISO 镜像:从 [CentOS 官方网站](https://www.centos.org/download/) 下载最新的 CentOS ISO 文件。在虚拟机设置中,选择 "存储",然后在 "控制器: IDE" 下点击光盘图标,选择 "选择虚拟光盘文件",并加载你下载的 CentOS ISO 文件。3. 输入虚拟机的名称(例如 "CentOS 7"),选择类型为 "Linux",版本为 "Red Hat (64-bit)"。在 "安装位置" 中,选择你的虚拟硬盘并点击 "完成"。
2025-03-03 19:39:54
367
原创 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:38:47
250
原创 windows用户安装虚拟机教程
1. 下载并安装VMware Workstation2. 创建虚拟机3. 安装操作系统4. 安装VMware Tools
2025-02-19 11:36:26
210
原创 隐式转换函数
/第二步: 定义一个隐式转换函数,把BaseUser --> PowerUser。//第一步:定义一个有updateuser功能的类 PowerUser。u1.updateUser()//添加一个新的功能。
2024-12-12 09:11:09
184
原创 scala中的泛型
/getMiddleEle(List(1,2,3,4,5)) ==> 5/2 = ==>下表为2的元素是:3。//getMiddleEle(List(1,2,3,4)) ==> 4/2 = ==>下表为2的元素是:3。//List[Int]:List是列表. [Int]是说列表中的每一个元素都是int!//def 函数名(参数名:类型):返回值类型 ={// 用它来获取当前的列表的中间位置上的值。// 中间位置的下标 = 长度/2。//类型参数---泛型(数据类行是变化的)
2024-12-12 09:09:14
126
原创 Scala中List
/ l1.insert(2,150)//在指定位置添加。// val rs = l1.contains(2)// 判断元素2是否在l1中。// l1.remove(0) // 删除指定位置上的元素。// l1 -= 150//删除指定的元素。// l1 += 4 //在尾部添加。//6.判断元素是否存下。// //6.判断元素是否存在。//5.删除 --不行。// //2.输出第一个元素。// //5. 删除 -=// //4.添加 +=// // 8.遍历输出。
2024-12-12 09:08:41
427
原创 Scala中Map集合的应用
val books = mutable.Map("001" ->("三国演义","罗贯中",23),"002"->("彷徨","鲁迅",12))println(s"编号:${k},书籍名称,作者,库存数量:${v}")books += ("003"->("水浒传","施耐庵",43))books += ("004"->("西游记","吴承恩",49))books("002") = ("彷徨","鲁迅",100)
2024-12-12 09:07:55
178
原创 用Scala中的Set集合解决图书馆书籍管理系统相关的练习
val books1= mutable.Set("彷徨","三国演义","水浒传")val books = mutable.Set("彷徨","钢铁是怎样炼成的")val rs = books.contains("水浒传")books -= "钢铁是怎样炼成的"books += "十宗罪"books += "水浒传"
2024-12-12 09:06:37
131
原创 Scala中Set集合的定义
Scala的Set集合是没有重复的对象集合,所有元素都是唯一的。Scala的集合分为可变和不可变两种。默认情况下,Scala使用的是不可变集合,如果想使用可变集合,需引用scala.collection.mutable.Set包,默认使用scala.collection.immutable.Set包。
2024-12-12 09:05:37
205
原创 设计一个point类,其x和y坐标可以通过构造器提供。提供一个字类LablePoint,其构造器接收一个标签值和x,y坐标
class Point(var x:Double,var y:Double){ override def toString: String = { s"x=${x},y=${y}" }}class LabelPoint(var label:String,x:Double,y:Double)extends Point(x,y){ override def toString:String={ s"label${label},x=${x},y=${y}" }}object
2024-12-12 09:03:58
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人