自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2025-05-14 09:41:19 519

原创 VI编辑器认识

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

2025-05-14 09:38:49 256

原创 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:34:38 422

原创 Spark缓存---cache方法

简化的 persist():cache() 是 persist(StorageLevel.MEMORY_ONLY) 的快捷方式,将数据以反序列化对象的形式存储在内存中。惰性操作:调用 cache() 后,数据不会立即缓存,只有在首次触发行动操作(如 count(), show(), collect())时才会执行缓存。println(s"spark.local.dir 的值: ${conf.get("spark.local.dir")}")后续复用:后续操作直接读取缓存数据,跳过血缘中的计算步骤。

2025-05-14 09:32:06 760

原创 Spark缓存

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

2025-05-14 09:29:48 321

原创 分区器的认识及应用

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

2025-05-14 09:22:17 298

原创 在finalshell中运行Spark

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

2025-05-14 09:19:09 287

原创 配置Spark环境

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

2025-05-14 09:16:16 429

原创 RDD的处理过程

RDD中所有的转换都是延迟的,它们并不会直接计算结果。RDD中所有的转换都是延迟的,它们并不会直接计算结果。RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使用,直到最后一个RDD经过“行动”操作才会真正被计算处理。RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使用,直到最后一个RDD经过“行动”操作才会真正被计算处理。一个RDD运算之后,会产生新的RDD。一个RDD运算之后,会产生新的RDD。

2025-05-14 09:10:35 315

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

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

2025-05-14 09:08:29 285

原创 介绍数据清洗ECL

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

2025-05-14 09:01:45 512

原创 如何在idea中编写spark代码并运行

最后准备待统计的词频文件。在项目根目录下建立文件夹input,并创建两个文本文件:word1.txt, word2.txt并运行就可以。它的功能是wordcount的功能:从指定的文件夹中去读取文件,并做词频统计。下载好关于所需要的空间,配置好相应的环境,例如Scala,jdk。// 提取文本内容并执行 WordCount 操作。// 创建 SparkContext 对象。// 将所有分区的数据合并成一个分区。// 停止 SparkContext。// 读取目录下的所有文本文件。// 保存结果到文件。

2025-05-14 08:58:29 303

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

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

2025-05-14 08:54:52 310

原创 hadoop集群免密登录

在hadoop100上,运行命令:ssh-keygen -t rsa。它会在当前用户目录(/root)下生成一个.ssh的文件夹,并创建了两个文件。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。这里的id_rsa就是私钥,id_rsa.pub就是公钥。在hadoop100上,输入ssh hadoop101命令,看看是否可以免密登录?在hadoop100上登录hadoop101,验证效果。把hadoop100的公钥发到hadoop101上。

2025-05-07 11:35:28 349

原创 数据压缩所示例

原文链接:https://blog.youkuaiyun.com/2401_83374563/article/details/147752979。基于WordCount案例,只需要在dirvier类的代码中,去设置在reduce端输出压缩开启,并设置压缩的方式即可。运行代码之后,是否在输出结果中看到了压缩的格式。对应的代码有如下两行,其他的代码不动。// 设置reduce端输出压缩开启。// 设置map端输出压缩方式。// 开启map端输出压缩。在driver中修改代码。// 省略其他.....// 设置压缩的方式。

2025-05-07 11:33:46 345

原创 RDD基本介绍

1.Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。val distData = sc.parallelize(data, 2) // 第二个参数是分区数。:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。// 通过 parallelize 方法将本地集合转换为 RDD。// 从 HDFS 加载文本文件。// 创建一个本地集合。

2025-05-07 08:40:20 353

原创 如何在idea 中写spark程序

2. **创建新项目**:在 IntelliJ IDEA 中选择 File -> New -> Project,选择 Scala 并选择 sbt(Scala 的构建工具)作为构建工具。5. **运行程序**:在 IntelliJ IDEA 中运行 Spark 程序。3. **添加 Spark 依赖**:在项目的 `build.sbt` 文件中添加 Spark 依赖。4. **创建 Scala 类**:在项目中创建一个 Scala 类,编写 Spark 程序。名称:=“ sparkexample”

2025-04-28 19:48:46 501

原创 如何搭建spark yarn模式的集群

修改 Spark 的配置文件 `spark-defaults.conf`,设置 Spark 应用程序与 YARN 集成的相关参数,如 `spark.master yarn`。- 使用 `spark-submit` 命令提交 Spark 应用程序,指定 `--master yarn` 参数,让 Spark 应用程序在 YARN 集群上运行。- 修改 Hadoop 配置文件 `yarn-site.xml` 和 `hdfs-site.xml`,设置 YARN 的资源管理器和节点管理器等信息。

2025-04-28 19:45:55 330

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

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

2025-04-23 11:10:33 343

原创 yarn的三个资源调度策略

随着时间的推移,如果应用程序 A 完成了部分任务,对资源的需求减少,那么公平调度器会将多余的资源分配给应用程序 B,以保证两个应用程序都能以相对公平的速度完成任务。例如,一个企业的大数据集群可以划分为生产队列、测试队列和开发队列,生产队列分配 70% 的资源,测试队列分配 20% 的资源,开发队列分配 10% 的资源。例如,开发队列在某个时间段内资源使用较少,而生产队列有紧急任务需要更多资源,此时生产队列可以借用开发队列的空闲资源。每个队列可以设置不同的优先级,高优先级队列中的应用程序会优先获得资源。

2025-04-18 15:15:18 441

原创 yarn的三大组件及其各自的作用

在容器运行过程中,NodeManager 会监控容器的资源使用情况和运行状态,如果容器出现异常或达到资源使用上限,NodeManager 会采取相应的措施,如停止容器或重新分配资源。例如,容量调度器允许将集群资源划分为多个队列,每个队列可以分配一定比例的资源,不同的用户或应用程序可以被分配到不同的队列中,从而保证资源的合理分配和隔离。同时,NodeManager 会接收 ResourceManager 发送的指令,如启动新的容器、释放已有的容器等,并按照指令执行相应的操作。yarn的三大组件及各自作用。

2025-04-18 15:13:06 423

原创 yarn的定义

它的主要作用是将资源管理和作业调度 / 监控的功能从传统的 Map - Reduce 框架中分离出来,使得 Hadoop 集群能够支持多种不同类型的计算框架,而不仅仅局限于 Map - Reduce。与其他包管理工具相比,Yarn 在安装速度和可靠性方面有一定的优势,它可以并行下载包,并且有一个本地缓存机制,当再次需要安装相同的包时,可以直接从缓存中获取,提高了安装效率。同时,不同的应用程序通过各自的 ApplicationMaster 来管理任务,彼此之间相互独立,提高了集群资源的利用率和灵活性。

2025-04-18 15:11:28 431

原创 hadoop的三大结构及其各自的作用

这种架构使得不同的应用程序可以在同一个集群中互不干扰地运行,提高了集群资源的利用率和灵活性,支持多种类型的大数据应用,如批处理、交互式查询、流处理等。它根据任务的优先级、数据本地性等因素来调度任务。通过这种方式,MapReduce 能够充分利用集群的计算资源,实现对大规模数据的高效处理,适用于数据挖掘、机器学习、日志分析等各种数据密集型应用场景。NameNode 管理文件系统的命名空间,维护着整个文件系统的目录树结构、文件和目录的元数据(例如文件的权限、修改时间、块位置信息等),就像图书馆的目录索引一样。

2025-04-18 15:09:49 582

原创 mapreduce-案例-简单的数据清洗案例代码

/Text,LongWritable:表示map函数输出的数据的格式。//LongWritable,Text:表示初始输入的键值对格式。//// 6.设置输入和输出路径:我们要处理的单词所在的文件在哪里?// 改成集群上的地址。/cinput:/表示集群的根目。// 4.设置Mapper输出的key和value类型。// 设置操作集群时的用户名为root。//1.获取一行数据,使用空格拆分,得到字段组。// 7.提交任务。

2025-04-09 10:50:36 520

原创 mapreduce的工作原理

MapReduce 是一种编程模型和处理大规模数据集的计算框架,最初由 Google 提出,并被 Hadoop 实现。它的工作原理可以分为两个主要阶段:Map 阶段和 Reduce 阶段。

2025-03-31 19:47:24 421

原创 Hadoop集群常用命令

【代码】Hadoop集群常用命令。

2025-03-31 19:45:37 536

原创 Linux常见操作命令以及编辑器VI命令

如果没有这个文件会直接创建这个文件,把这个111覆盖掉文件里面的所有内容。它的功能是:把上一个命令的输出结果,作为下一个命令的输入内容。ping 域名/ip地址:检测当前机器是否与目标域名/ip之间可以连接。enter键可以一行一行翻,space键翻下一页,按b翻到上一页。-c:建立一个压缩文件,把多个文件或者文件夹压缩到一个新的文件中。把一个压缩文件中的内容全部解压出来。more -tail:查看文件的结尾部分的内容。2.pageup,pagedown控制翻页。1.覆盖掉原来文件中所有的内容:>

2025-03-03 19:34:15 695

原创 如何配置虚拟机上网

linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。将这个虚拟机的网络设置重启,让它生效。具体设置为:进入虚拟机,修改对应的IP。(3)设置虚拟机的IP。检查是否能Ping通外网。

2025-02-28 16:01:54 400

原创 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:40 167

原创 如何安装虚拟机(保姆教程)

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

2025-02-19 11:40:40 333

原创 在Scala中对隐式转换格式与作用

def sayName(implicit str: String = "小陈"): Unit = {// implicit val x:String = "小美....."implicit val x1: String = "小妹妹..."////格式:implicit object。//问题:如何动态去设置函数的默认参数值。////作用:给函数的默认参数提供隐式值。//尽量不要去改动之前的代码!sayName("小明")// 函数的默认参数。

2024-12-12 08:39:14 569

原创 在SCala中隐式转换的理解与应用

/ // 需求:更改函数参数的默认值(不传入这个值的时候,用到的值),不要写死。//// 特点:1 自动被调用 2 函数名字不重要,重要的是,参数类型和返回值类型。// // 1.定义函数的默认参数时,添加implicit。//// 把Int类型,转成Double类型。//// 重要的是,参数类型和返回值类型。////隐式函数:implicit修饰的函数。////implicit 隐式转换。//// 函数名字不重要。// 函数的默认值:小花。

2024-12-12 08:37:07 647

原创 在Scala中正则表达式的类型

/ 6.脱字符^如果在正则的最前面,表示,要匹配的内容必须在字符串的开头。// 7.脱字符$如果在正则的最后面,表示,要匹配的内容必须在字符串的结尾。// 12.\W:除[a-zA-Z0-9_]63个字符中不是字符的任意一个。// 2.[a-z]:表示a到z的26个字母中的任意一个。// 3.[A-Z]:表示A到Z的26个字母中的任意一个。// println("找到的是:",rs.get)// 4.[0-9]:表示0到9的10中的任意一个。

2024-12-12 08:35:58 921

原创 在Scala中对匹配类型匹配数组的使用

/ case Array(1, x, y) => println(s"三个元素,且第一个为1,第二个${x},第三个是${y}")// case Array(1, _*) => println("n个元素,且第一个为1")// case Teacher(a,b)=>println(s"${b}老师${a}")// case Stu(a) => println(s"学生${a}")//// case _ =>println("不是闰年")

2024-12-12 08:08:51 720

原创 在Scala中对Map函数的使用

"何小鹏 - 小鹏汽车" -> 1977,"陈天桥 - 盛大网络" -> 1973,"李彦宏 - 百度" -> 1968,"张一鸣 - 抖音" -> 1983,"刘强东 - 京东" -> 1974,"黄峥 - 拼多多" -> 1980,"贾跃亭 - 乐视" -> 1973,"张小龙 - 微信" -> 1969,"雷军 - 小米" -> 1969,"丁磊 - 网易" -> 1971,"程维 - 滴滴" -> 1983,"王兴 - 美团" -> 1979,"周源 - 知乎" -> 1980,

2024-12-12 08:07:23 668

原创 在Scala中对迭代器的使用

writer.println(s"姓名:${s.name},语文:${s.yuwen},数学:${s.shuxue},英语:${s.yingyu},Java:${s.java},Scala:${s.scala},总分:${s.zongfen},平均分:${s.pingjunfen},名次:${s.mingci}")writer.println(s"姓名:${s.name},平均分:${s.yuwen},总分:${s.zongfen}")// println("语文:",arr(1).toInt)

2024-12-12 08:05:51 560

原创 了解身份证组成

/ subString(起点下标,终点下标——不包含)val str = "高圆圆,林青霞,章泽天"println(s"我喜欢${e}")println(s"她的性别是女")println(s"他的性别是男")// 2.取出ta的生日.子串。// 奇数是:男;// 1 取出单个字符。// 4 前两位表示省份。// 3.判断性别。// 取出第17位。

2024-12-12 08:04:41 265

原创 在Scala中case class 的运用

dreamList += DreamItem("拥有自己的公司", false, "2012-8-30", 10)dreamList += DreamItem("学会一门新语言", false, "2012-8-26", 7)dreamList += DreamItem("环游世界", false, "2012-8-25", 6)dreamList += DreamItem("学习钢琴", false, "2012-8-29", 9)

2024-12-03 16:03:29 631

原创 在Scala中栈的认识

/ println(q1.dequeue())//出队 1。// println(q1.dequeue())//出队 2。// 栈:先进后出。

2024-12-03 16:02:20 509

原创 在Scala中Array可变以及切片的学习

/ ArrayBuffer(1,2,3,4,5),取出3,4组成一个新的数组。val arr5 = Array.ofDim[Int](2,2)//2行2列。// filter 过滤。// slice(起点下标,终点下标)//不包括终点下标!// 4 查询:判断是否有某个元素。// indexOf://找到第一元素的下标。// 有,就返回第一次出现的下标。// map方法。//找到大于100的元素。// 二维数组。// 创建方式。

2024-12-03 14:45:43 603

空空如也

空空如也

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

TA关注的人

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