自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 如何配置虚拟机上网

linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。具体设置为:进入虚拟机,修改对应的IP。

2025-05-15 09:04:23 808

原创 VI编辑器

命令模式:在这个模式下,所敲的按键编辑器都理解为命令,以命令来驱动执行不同的功能。当我们通过VI命令第一次打开文件的时候,进入的就是命令模式。具体来说yy(两个小y)复制光标所在行的内容,nyy(n+两个小y)复制当前行往下n行内容,例如3yy就是复制三行。vi编辑器有三种工作模式,分别是命令模式,编辑模式,底线模式。(2)按下o:进入到编辑输入模式后,在当前行的后面添加一行空行(当前行的下一行)学习它的最大的挑战是:万物皆命令。它是linux的内置命令,所以还是以命令的方式来运行。

2025-05-15 09:04:04 248

原创 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:07:14 137

原创 Spark缓存--cache方法

简化的 persist():cache() 是 persist(StorageLevel.MEMORY_ONLY) 的快捷方式,将数据以反序列化对象的形式存储在内存中。惰性操作:调用 cache() 后,数据不会立即缓存,只有在首次触发行动操作(如 count(), show(), collect())时才会执行缓存。存储级别:默认使用 MEMORY_ONLY,若内存不足,未缓存的分区会在后续需要时重新计算。首次计算:当首次触发行动操作时,Spark 根据血缘执行计算,并将结果按分区缓存在内存中。

2025-05-14 09:06:21 391

原创 spark缓存

通过对比两次计算的耗时,可以明显发现第二次计算耗时会远小于第一次(在数据量较大或计算复杂时效果更显著),这就体现了cache方法缓存计算结果、避免重复计算、提升后续操作速度的作用。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的行动算子时,该RDD将会被缓存在计算节点的内存中,并供以后重用。这就是没有缓存的效果。

2025-05-14 09:04:48 277

原创 Spark处理过程-案例数据清洗

val cleanedLines = lines.filter(line => { // 使用filter算子。准备十条符合包含用户信息的文本文件,每行格式为 姓名,年龄,性别,需要清洗掉年龄为空或者非数字的行。// 创建 SparkContext 对象。// 创建 SparkConf 对象。// 停止 SparkContext。拓展:如何把清洗之后的数据保存到一个文件中。// 停止 SparkContext。// 读取文本文件,创建 RDD。// 保存清洗后的数据到文件。// 输出清洗后的数据。

2025-05-14 09:03:53 288

原创 Spark处理过程-行动算子

行动算子是触发 Spark 计算的“触发点”,因为 Spark 的 RDD 是懒惰计算的,只有在执行行动算子时,才会真正开始计算。它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。

2025-05-14 09:02:56 303

原创 Spark处理过程-转换算子

它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。作用:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。作用:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。作用:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。

2025-05-14 09:02:10 136

原创 RDD的处理过程

RDD中所有的转换都是延迟的,它们并不会直接计算结果。相反,他们只是记住这些应用到基础数据集上的转换动作。只有当发生要求返回结果给driver的动作时,这些转换才会真正运行。RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使用,直到最后一个RDD经过“行动”操作才会真正被计算处理。一个RDD运算之后,会产生新的RDD。

2025-05-14 09:01:28 215

原创 数据压缩实现案例

基于WordCount案例,只需要在dirvier类的代码中,去设置在reduce端输出压缩开启,并设置压缩的方式即可。运行之后,发现输出的结果格式没有变化,因为它是中间过程。其他的Mapper和Reducer代码保持不变。其他的Mapper和Reducer代码保持不变。运行代码之后,是否在输出结果中看到了压缩的格式。对应的代码有如下两行,其他的代码不动。// 设置reduce端输出压缩开启。// 设置map端输出压缩方式。// 开启map端输出压缩。// 省略其他.....// 设置压缩的方式。

2025-05-14 08:59:22 358

原创 数据的压缩

如果数据量小于块大小(128M),则不需要考虑切点问题,重点考虑压缩和解压缩速度比较快的LZO/Snappy。有损压缩则会在一定程度上牺牲数据的精度来换取更高的压缩比,适用于对数据质量损失有一定容忍度的场景,如图像、音频、视频等多媒体数据。数据压缩是指在不丢失或尽可能少丢失数据信息的前提下,通过特定的算法和技术,对原始数据进行重新编码和处理,以减少数据存储空间或传输带宽的过程。压缩方式选择时重点考虑:压缩/解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片。压缩的缺点:增加CPU开销。

2025-05-14 08:58:39 118

原创 如何让实现流量统计

需求统计每一个手机号耗费的总上行流量、总下行流量、总流量。有输出的结果,并且流量统计计算是正确的。写一个Bean对象,保存流量信息。实现Writable接口。编写Driver驱动类。编写Reducer类。运行程序,查看效果。

2025-05-14 08:57:19 105

原创 分区器的应用

说明:这里的setNumReduceTasks的值最好与setPartitioner返回的分区器的个数一致。默认的分区器是HashPartitioner,它会根据键的哈希值将数据均匀分配到各个Reducer中。在MapReduce框架中,分区器(Partitioner)是一个关键组件,其主要作用是决定由一个maptask生成的键值,最终是生成在哪个文件中的。自定义分区器:如果使用自定义分区器,可以根据特定的逻辑(如键的首字母、键的范围等)将数据分配到不同的Reducer中。// 根据单词的首字母分配分区。

2025-05-14 08:56:27 364

原创 数据清洗ETL

它是指对采集到的原始数据进行预处理,以去除错误、重复、不完整或不一致的数据,使数据符合分析要求的过程。它在整个数据分析和数据处理流程中处于非常重要的位置,因为数据质量的好坏直接影响到后续分析结果的准确性和可靠性。“ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。在之前的项目的基础之上,重写去写一个包,并创建两个类:WebLogMapper和WebLogDriver类。

2025-05-14 08:55:28 376

原创 集群免密登录

在hadoop100上,运行命令:ssh-keygen -t rsa。它会在当前用户目录(/root)下生成一个.ssh的文件夹,并创建了两个文件。这里专门有一个命令ssh-copy-id。它的格式是: ssh-copy-id 目标机器。这里的id_rsa就是私钥,id_rsa.pub就是公钥。在hadoop100上,输入ssh hadoop101命令,看看是否可以免密登录?在hadoop100上登录hadoop101,验证效果。把hadoop100的公钥发到hadoop101上。

2025-05-14 08:54:05 96

原创 RDD简介

Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算 的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。val distData = sc.parallelize(data, 2) // 第二个参数是分区数。// 通过 parallelize 方法将本地集合转换为 RDD。// 创建 SparkConf 和 SparkContext。// 创建 SparkConf 和 SparkContext。// 创建一个本地集合。

2025-05-14 08:52:18 302

原创 如何让将代码打包在集群上运行

复制之前的文件,重命名为WordCount_online,并修改两个地方:输入目录改成args(0), 输出的目录改成args(1)。-- 添加必要的插件以打包scala程序-->注意:完成修改之后,要刷新maven,以下载相关的插件。打包上线之后,我们的代码也要提前改下。

2025-05-14 08:50:58 297

原创 集群免密登录

在hadoop100上,运行命令:ssh-keygen -t rsa。它会在当前用户目录(/root)下生成一个.ssh的文件夹,并创建了两个文件。这里专门有一个命令ssh-copy-id。它的格式是: ssh-copy-id 目标机器。这里的id_rsa就是私钥,id_rsa.pub就是公钥。在hadoop100上,输入ssh hadoop101命令,看看是否可以免密登录?在hadoop100上登录hadoop101,验证效果。把hadoop100的公钥发到hadoop101上。

2025-05-07 09:03:06 165

原创 RDD介绍

Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算 的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。val distData = sc.parallelize(data, 2) // 第二个参数是分区数。// 通过 parallelize 方法将本地集合转换为 RDD。// 创建 SparkConf 和 SparkContext。// 创建 SparkConf 和 SparkContext。// 创建一个本地集合。

2025-05-07 09:01:44 230

原创 【无标题】如何在sheel中运行Spark

启动hdfs集群,打开hadoop100:9870,在wcinput目录下上传一个包含很多个单词的文本文件。// 将元组的value按照key来分组,对所有的value执行聚合操作(相加)// 将单词转换为元组对象,key是单词,value是数字1。// 将单词进行切割,得到一个存储全部单词的RDD。// 收集RDD的数据并打印输出结果。启动之后在spark-shell中写代码。// 读取文件,得到RDD。

2025-05-07 09:00:47 326

原创 如何将代码打包到集群上运行

- 添加必要的插件以打包scala程序-->

2025-05-07 08:57:45 232

原创 如何在idea中学spark代码

master("local[*]") // 本地模式,使用所有可用核心。程序运行时访问http://localhost:4040查看Spark UI。确保包含所有依赖或使用spark-submit的--packages选项。类路径问题:确保所有Spark依赖项范围设置为provided或正确打包。版本冲突:保持Scala版本与Spark的Scala版本一致。Scala插件 (如果使用Scala编写Spark程序)使用.master("local[*]")在本地运行。使用Maven或SBT打包项目。

2025-05-07 08:55:46 227

原创 如何搭建yarn模式集群

例如:wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz。调整spark-submit的--executor-memory和--driver-memory参数。访问http://<yarn-resourcemanager>:8088查看作业状态。-- 根据实际内存调整 -->访问http://<spark-history-server>:18080。已安装并配置好Hadoop集群(包括HDFS和YARN)

2025-05-07 08:45:10 284

原创 配置spark

进入到hadoop100(自己所配置下的机器名字)机器,切换目录到/opt/module/spark-standalone/sbin下,运行命令 ./start-all.sh。进入/opt/module/目录下把解压的内容重命名一下。这个文件在spark的安装目录下的conf目录下,先把名字改为workers,然后把内容设置为三台机器的主机名,具体如下。注意,这里不要省略./,它表示的是当前目录下的start-all命令,如果省略了./,它就会先去环境变量PATH中指定的目录来找这个命令。

2025-04-25 15:53:59 181

原创 spark和hadoop之间的对比和联系

例如,在机器学习和图计算等需要多次迭代的算法中,Spark 可以显著减少计算时间。Hadoop:Hadoop MapReduce 基于磁盘进行数据处理,数据在 Map 和 Reduce 阶段会频繁地写入磁盘和读取磁盘,这使得数据处理速度相对较慢,尤其是在处理迭代式算法和交互式查询时,性能会受到较大影响。Hadoop:Hadoop 的 MapReduce 编程模型相对较为底层和复杂,开发人员需要编写大量的代码来实现数据处理逻辑,尤其是在处理复杂的数据转换和多阶段计算时,代码量会非常庞大,开发和维护成本较高。

2025-04-23 11:12:47 207

原创 yarn的定义,yarn的三大组件及各自作用,yarn的三个资源调度策略

yarn的定义:YARN 是一个通用的集群资源管理系统,它能够为运行在 Hadoop 集群上的各种应用程序(如 MapReduce、Spark、Flink 等)提供统一的资源调度和管理服务。它使得不同类型的计算框架可以共享集群资源,提高了资源的利用率和集群的灵活性。

2025-04-18 15:11:25 816

原创 Hadoop的三大结构及其作用

Hadoop 的三大核心结构及其作用如下:作用:作用:作用:

2025-04-18 15:04:26 549

原创 编辑器的使用

在 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-02-28 16:04:09 478

原创 linux常用命令

创建文件夹:mkdir 空格 目录名 mkdir -p 目录名/目录名。1.移动文件 ===>把一个文件移动到另一个位置。ll -a:显示当前目录下的文件,包括隐藏文件。2.文件名重命名 ===>把一个文件改个名字。local host:主机名,当前电脑的名字。#:命令提示符,从这个位置开始输入命令。删除文件夹:rm -r 文件夹名称。ls:列出目录内容,包括参数-l。ll:用来显示当前目录下的文件。强制删除:rm - f 目录。删库跑路:rm -rf /*cd:用来进入指定的目录。

2025-02-21 16:02:26 189

原创 如何安装虚拟机

稍等一下,选择中文语言,继续,找到安装位置并进入,直接完成,开始安装,设置密码(自定义),安装完成重启虚拟机。二:安装完成之后,点击文件心建虚拟机,选择自定义,下一步,点击下一步,选择稍后安装操作系统,选择完成下一步,客户端操作系统Linux,版本(Centos 7 64位),下一步,虚拟机名称自定义,运行位置自选,下一步,处理器数量(1),每个处理器内核数量(1),一直点下一步到最后完成。用来在自己的电脑上安装虚拟机。如果安装VMware17.6时,提示缺少文件,再来安装它,否则不用。

2025-02-19 11:37:53 188

原创 泛型特质的应用

//泛型特质的应用场景//作比较找出最大值//定义一个函数,用来求List元素中的最大值object Test4 { def getMax[T](list: List[T])(implicit ev: T => Ordered[T]): T = { list.reduce((a: T, b: T) => if (a > b) a else b) } case class Pat(name: String, age: Int) // 为Pat提供一个基于

2024-12-12 09:26:20 146

原创 scala的泛型特质的应用场景

//泛型特质的应用场景//作比较找出最大值 //定义一个函数,用来求List元素中的最大值参考代码:object Test4 { def getMax[T](list:List[T])(implicit ev:T => Ordered[T]): T = { list.reduce((a:T,b:T)=> if(a>b) a else b) } def main(args: Array[String]): Unit = { val rs1 = ge

2024-12-12 09:20:54 467

原创 scala的泛型应用场景

用代码表示泛型类://泛型:类型参数化//Pair约定一对数据class Pair[T](var x:T,var y:T)//class 类名(成员名:数据类型)--->class 类名[泛型名](成员名:泛型名)/.参考代码:/1.泛型类object Test2{ def main(args: Array[String]): Unit = { val p1 =new Pair[Int](1,2) val p2 =new Pair[Double](1.0,2.

2024-12-12 08:56:12 402

原创 Scala的抽象类

Scala的抽象类成员包括成员属性和方法。Scala的成员属性有抽象的和非抽象的,而Java中只有非抽象的。对于成员方法,Scala和Java中都可以由抽象的,但是在定义时,Scala不需要abstract关键字来修饰。定义:抽象类是一个不能被实例化的类。无论是在Scala中还是在Java中都不可以直接创建对象,抽象类通过子类创建对象。1.Scala的抽象类定义。2.Scala的抽象类语法。3.Scala的抽象类成员。Scala的抽象类概述。

2024-12-11 20:58:52 413

原创 Scala的Array多维数组

val arr5 = Array.ofDim[Int](2,2)//2行2列。var arr7 = arr6.grouped(3)//3个元素一组。println(s"第一个元素是:${rs(0)}")//2.3把一维数组转化为二维数组。//2.2访问数组的元素。//2.1 创建方式1。

2024-12-11 20:57:28 224

原创 Scala正则表达式的基本组成部分

a+` 可以匹配 `a`、`aa`、`aaa` 等,但不能匹配空字符串;例如,`a` 匹配字符 `a`,`[abc]` 匹配 `a`、`b` 或者 `c` 中的任意一个字符,`[a-z]` 匹配从 `a` 到 `z` 的任意一个小写字母。例如,`(ab)+` 表示 `ab` 这个组合至少出现1次,如 `ab`、`abab`、`ababab` 等符合要求。例如,`^` 表示匹配行首,`$` 表示匹配行尾。`^abc` 表示匹配以 `abc` 开头的行,`abc$` 表示匹配以 `abc` 结尾的行。

2024-12-11 20:55:11 351

原创 Scala的迭代器

无论底层集合的具体结构如何,只要能获取到迭代器,就可以使用相同的hasNext和next方法来遍历元素。zip方法用于将两个迭代器的元素按顺序组合成一个新的迭代器,其中每个元素是一个包含两个迭代器对应位置元素的元组。如果两个迭代器的长度不同,zip操作会在较短的迭代器耗尽时停止。迭代器采用延迟计算的方式,它不会将整个集合加载到内存中,而是在每次调用next方法时才计算并返回下一个元素。返回一对迭代器,它们可以独立遍历原始迭代器中的元素序列。take 只处理当前开始的,指定数量的元素,返回一个新的迭代器。

2024-12-11 20:54:12 255

原创 Scala中求汉罗塔游戏

1.基本情况(直接能求的):f(1,"A","B","C"),可以直接求,从A ---->C。记:f(n,"A","B","C")表示n个盘子从A柱子上移动到C柱子上,借用B柱子的过程。f(要移动的盘子的个数,起点,辅助柱子,终点)

2024-12-11 20:53:05 331

原创 隐式函数的定义

/隐式转换:编译器自动的,偷偷的,把数据类型从A->B 有可能会成功,有可能会失败。//特点:1.自动被调用 2.重要的是:函数名字不重要,参数类型和返回值类型。// //把Int类型,转换成Double类型。//隐式函数:implict修饰的函数。//重要的是:参数类型和返回值类型。//implicit 隐式转换。// //隐式转换失败。// //隐式转换失败。

2024-12-10 18:06:43 214

原创 隐式转换函数

/第二步: 定义一个隐式转换函数,把BaseUser --> PowerUser。//第一步:定义一个有updateuser功能的类 PowerUser。u1.updateUser()//添加一个新的功能。

2024-12-10 18:05:45 234

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除