自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spark(32)SparkSQL操作Mysql

请注意,这里并没没有单独添加spark_core的依赖,因为在spark-sql中已经包含了spark_core。tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar得到的效果如下。若已安装,需要先做卸载MySQL的操作命令是:rpm -e --nodeps mariadb-libs。(2)spark-sql_2.12 提供了 Spark SQL 的功能,用于高效的数据处理和分析。使用的命令是: mysqld --initialize --user=mysql。

2025-05-17 02:52:17 710

原创 Spark(31)SparkSQL-基本使用

agg(sum($"quantity").as("total_quantity"), sum($"quantity" * $"price").as("total_sales")):对每个分组进行聚合操作,计算销售总量和销售总额,并分别命名为 total_quantity 和 total_sales。使用sql风格操作的前提是将DataFrame注册成一个临时表,在程序中直接使用spark.sql()方式执行SQL查询,结果将作为一个DataFrame返回。// 显示 DataFrame 的前几行数据。

2025-05-17 02:46:58 375

原创 Spark(30)RDD的自定义分区器-案例

在代码中,通过编写一个自定义的分区函数,根据用户 ID 的范围返回对应的分区编号。如在之前的示例代码中,custom_partitioner 函数根据不同的 ID 范围返回 0、1、2 三个分区编号,从而实现按照地区进行分区的目的。具体来说,将用户 ID 在 0 - 1000 的订单数据分到一个分区,1001 - 2000 的分到另一个分区,2001 及以上的分到第三个分区。对电商订单数据进行处理,订单数据包含用户 ID 和订单金额,不同地区的用户有不同的 ID 范围。

2025-05-17 02:44:41 563

原创 Spark(29)基础自定义分区器

这就类似于 Spark 中的分区,每个分区的数据可以在不同的计算节点上同时进行处理,从而加快整个数据处理的速度。MyPartitioner类继承自Partitioner,实现了numPartitions方法指定分区数量为 3 ,实现getPartition方法,根据球队名称判断分区索引,湖人对应分区 0,火箭对应分区 1,其他球队对应分区 2。在 Spark 中,RDD 是数据的集合,它会被划分成多个分区,这些分区可以分布在不同的计算节点上,就像图书馆的书架分布在不同的房间一样。

2025-05-17 02:40:58 911

原创 Spark(28)Spark缓存

通过对比两次计算的耗时,可以明显发现第二次计算耗时会远小于第一次(在数据量较大或计算复杂时效果更显著),这就体现了cache方法缓存计算结果、避免重复计算、提升后续操作速度的作用。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。MEMORY_ONLY_SER:将 RDD 以序列化的 Java 对象形式存储在内存中,相较于 MEMORY_ONLY,序列化后占用的内存空间更小,但读取时需要进行反序列化操作,会带来一定的性能开销。

2025-05-17 02:36:12 822

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

以下是 10 条符合上述示例中数据格式(姓名,年龄,性别)的测试数据,包含了一些可能需要清洗掉的无效数据,你可以将其保存为一个文本文件,用于测试上面的数据清洗程序。“李四” 的年龄为空,“赵六” 和 “吴九” 的年龄不是有效的数字,在执行数据清洗程序时,这些行应该会被过滤掉。过滤算子中,函数返回为false,就会被过滤掉,函数返回为true,就会被保留下来。// ①如果它不是数字或者缺失,则忽略这条数据。// (1)字段拆分,拆分出年龄这个字段。// 保存清洗后的数据到文件。

2025-05-12 10:17:34 798

原创 Spark(26)Spark处理过程-转换算子和行动算子

这个函数 f 接收一个输入类型为 T 的元素,返回一个类型为 U 的元素。f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。

2025-05-12 10:14:01 529

原创 Spark(25)在shell中运行Spark程序

在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。RDD的分区是RDD数据存储的最小单位。不同分区之间的数据是需要有关联的,在不同的分区之间进行数据的传输就是Shuffle,也叫洗牌。把大的数据拆成一小份一小份的(分区,分片)让多台设备同时计算,所以要分区。

2025-05-12 08:32:29 1033

原创 Spark(24)在Idea中编写Spark程序

它的功能是wordcount的功能:从指定的文件夹中去读取文件,并做词频统计。// 写一个spark程序,统计input目录下所有文本文件中单词的词频。IDEA中,默认是不支持编写Scala的,需要额外配置一个插件。如果这里没有看到Scala类的选项,就去检查第2步。添加完成之后,刷新Maven,它会帮助我们去下载依赖。使用Maven创建项目,并在pom.xml文件中配置相关的依赖。-- 添加必要的插件以打包scala程序-->在Idea中安装插件,使得Idea中可以编写scala代码。

2025-05-01 02:19:28 793

原创 Spark(23)Spark集群搭建之Yarn模式

1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。5. /opt/module/spark-standalone/examples/jars/spark-examples_2.12-3.1.1.jar:指定了包含应用程序代码的 JAR 文件的路径。NodeManager:部署在集群中的每个节点上,负责管理该节点上的资源使用情况,监控容器的运行状态,并且与 ResourceManager 保持通信,汇报节点的资源使用信息。

2025-05-01 02:12:34 915

原创 Spark(22)Spark集群搭建-Standalone

先把名称改成spark-default.conf,再补充两个设置。进入到hadoop100机器,切换目录到/opt/module/spark-standalone/sbin下,运行命令 ./start-all.sh。进入/opt/module/把解压的内容重命名一下,mv spark-3.1.1-bin-hadoop3.2/ spark-standalone。注意,这里不要省略./,它表示的是当前目录下的start-all命令,如果省略了./,它就会先去环境变量PATH中指定的目录来找这个命令。

2025-05-01 02:10:48 909

原创 Spark(19)Yarn-tool接口

org.apache.hadoop.util.Tool 是 Apache Hadoop 框架里的一个接口,其用途是协助开发可通过命令行运行的 Hadoop 应用程序。// 它要做7件事 hadoop jar mc8.js com.example.mapreduce.WordCountDriver /要处理的文件夹 /结果路径。run(String[] args):此方法为应用程序的主要执行逻辑,接收命令行参数,返回一个整数代表执行结果(通常 0 表示成功,非 0 表示失败)。// 返回 0 表示执行成功。

2025-04-21 10:21:28 578

原创 Spark(21)Spark基础介绍

在安装Spark时,它就提供了一些示例程序,我们可以直接来调用。进入到spark-local,运行命令spark-submit命令。这里的 \ 是换行输入的意思,整体的代码就只有一句,只不过太长了,我们把它拆开成几个部分来输入,其中\ 的意思就是这里写不下,写在下一行。接下来的操作,我们把它上传到集群中的节点,并解压运行。1.打开etc/profile.d/my_env.sh文件中,补充设置spark的环境变量。的值,具体运行效果如下。请注意,它并不会产生新的文件,而是直接在控制台输出结果。

2025-04-21 09:37:55 914

原创 Spark(20)spark和Hadoop的区别

**架构**:Spark 采用主从架构,包括 Driver(驱动程序,负责任务调度和资源管理)、Executor(执行程序,负责任务执行)和 Cluster Manager(如 YARN、Mesos 或 Spark 自带的 Standalone 模式)。- **架构**:Hadoop 采用主从架构,包括 NameNode(管理文件系统元数据)、DataNode(存储数据块)、JobTracker(管理作业调度)和 TaskTracker(执行任务)。这样可以充分发挥两者的优点,满足不同的业务需求。

2025-04-21 08:43:12 1111

原创 Spark(18)Yarn-概述

当用户向 YARN 中提交一个应用程序后, YARN将分两个阶段运行该应用程序。第一个阶段是。

2025-04-21 08:40:01 858

原创 Spark(17)案例-流量统计

统计每一个手机号耗费的总上行流量、总下行流量、总流量。创建一个目录data并创建log.txt文件填写数据。(注意类的引用需要使用Hadoop相关)运行程序,查看效果。

2025-04-08 16:01:43 180

原创 Spark(16)Mapreduce初使用

该阶段编程模型中有一个 reduce 函数需要开发人员重写,reduce 函数的输入也是一个 <key, value> 对,reduce 函数的输出也是一个 < key,List<value>> 对。该阶段的编程模型中会有一个 map 函数需要开发人员重写,map 函数的输入是一个 < key,value > 对,map 函数的输出也是一个 < key,value > 对,key和value的类型需要开发人员指定。reduce函数的返回值格式也是kv结构,k是每个单词,v是汇总之后的数字。

2025-04-08 15:50:03 547

原创 Spark(15)HDFS的客户端操作2

6.通过网络链接发送packet给第一个DataNode,此时它是在内存中接收到的数据,在准备写入磁盘的同时,它把数据通过pipeline传给下一个DataNode。第一个参数 new Path("/xiyou") 指定了要删除的路径,/xiyou 是 HDFS 中的目录或文件路径。修改这个值之后,我们再去重新上传一个新的文件,并检查是否在hdfs的UI面板中能看到这个数值的变化。注意:如果执行上面代码,下载不了文件,有可能是你电脑的微软支持的运行库少,需要安装一下微软运行库。我们来学习如何删除文件。

2025-04-02 08:30:00 804

原创 Spark(14)HDFS客户端操作1

每个生命周期由多个阶段(phase)组成,例如 `default` 生命周期包含 `compile`、`test`、`package`、`install`、`deploy` 等阶段。Maven 可以帮助你管理这些依赖项,你只需在项目的 `pom.xml` 文件中声明所需的依赖,Maven 就会自动从远程仓库下载这些依赖项,并将其添加到项目的类路径中。POM 是 Maven 的核心概念之一,它是一个 XML 文件(通常命名为 `pom.xml`),用于描述项目的配置信息和依赖关系。

2025-04-02 08:15:00 981

原创 Spark(13)HDFS概述

这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。它有两种操作,一是移动,会把当前的文件删除,二是复制,保留当前的文件。

2025-04-01 15:00:32 1034

原创 Spark(12)配置历史和日志服务

比较多,在启动的时候,还要分别进入不同的服务器写不同的命令,比较麻烦。我们配置了多台服务器,并且每台服务器上运行的任务都不太相同,我们可以使用jps命令来查看每台设备上的运行任务。echo " --------------- 启动 hdfs ---------------"但是,请注意,在哪一台上配置了,就应该在哪一台上去启动。请注意,你在配置的时候指定哪个节点是历史服务器,就在哪里启动,请不要搞错了。是在具体的节点上运行的,所以运行日志也是产生在具体的节点上,但是我们希望应用。

2025-04-01 14:42:58 787

原创 Spark(11)配置Hadoop集群-测试使用

前面我们上传了一个小文件,可以看到这个文件太小,hadoop被没有被切分成小块。上传文件的时候,我们传一个大一点的(>128M),再传一个小一点的。对于大一点的文件,我们要去看看它是否会按128M为单位去拆分这个大文件,而拆分成大文件之后,怎么才能去还原?上传完成之后,我们去查看,很明显大文件被分块了,128M一块,一共有两个块。在我们上一节的hadoop配置中,我们设置了保持文件的目录是/data,所以,我们进入hadoop的按照目录下的data中去看一看。

2025-04-01 14:37:21 488

原创 Spark(10)配置Hadoop集群-集群配置

(1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等。刚才我们是在hadoop100这台机器上进行了正确的设置,但是,其他的2台机器也要做相同的配置。Yet Another Resource Negotiator,简称YARN,另一种资源协调者,是Hadoop的资源管理器。但是,我们要把它搭建起起来,就必须要了解它的基本组成,知道它的内部分工。-- 指定ResourceManager的地址-->

2025-04-01 14:30:58 823

原创 Spark(9)配置SSH无密登录

(2)在 hadoop100 上,运行命令:ssh-keygen -t rsa。它的格式 是: ssh-copy-id 目标机器。2. hosts 文件中的主机名和 ip 地址是否与 finalshell 中的连接的主机名以及对 应的虚拟机上的 ip 地址一致。接下来我们去具体看看.ssh 相关的文件,以便更加深入的了解它的工作过程。(4)在 hadoop100 上,输入 ssh hadoop101 命令,看看是否可以免密登录。(2)把 hadoop100 的公钥发到 hadoop101 上。

2025-03-17 08:48:23 862

原创 Spark(7)安装Hadoop并运行WordCount程序

etc/profile 是系统级别的全局配置文件,当用户进行登录操作时,该文件会被执行,而 /etc/profile 脚本里包含了对 /etc/profile.d 目录下脚本的扫描和执行逻辑。这是指定要运行的具体示例程序名称。(1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等。安装hadoop时,它自带了很多的示例代码,其中有一个是用来统计词频的程序,下面我们来看一下如何去运行这个示例代码。

2025-03-10 10:53:35 883

原创 Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步

在一台机器上模拟出 Hadoop 分布式系统的各个组件,各个组件在逻辑上是分离的,但是都运行在同一台物理机器上,以此来模拟分布式环境。在hadoop102上,将hadoop101中/opt/module/hadoop-3.1.3目录拷贝到hadoop102上。在root目录建立bin文件夹,在bin内建立xsync文件,并在文件中输入脚本。2.scp -r /etc/tst/B机器的用户名@主机名:/etc/tst。重新查看它的颜色,它现在已经变成执行的脚本了(如下图)。把这个脚本同步到其他的机器中。

2025-03-10 10:31:17 803

原创 Spark(6)vm与centos虚拟机

得到了hadoop101,hadoop102,由于它们是从hadoop100直接扣克隆过来的,所以目前他们的ip和hostname都是很hadoop100是一样的,这里就需要修改下。要注意,这里是虚拟机的名称,而不是它的hostname。(2)要将这两台克隆出来的虚拟机和hadoop100保存在同一个磁盘目录下,方便我们统一管理。vm软件提供了克隆的功能,它可以允许我们从一台虚拟机上快速克隆出其他的一模一样的主机。配置IP的步骤是一样的。只是要注意修改对应的名称和IP:在第一台机器的基础上顺延即可。

2025-03-03 20:05:24 210

原创 Spark(5)host配置

hosts 文件是一个本地的文本文件,它的作用是将主机名映射到对应的 IP 地址,在 DNS(域名系统)解析之前,系统会先查询 hosts 文件来确定目标主机的 IP 地址。把虚拟机上的软件yum想象成你自己开的一家商场,那么yum的源就是你的供货商。hosts文件是一个没有后缀名的文本文件,它记录了本机在访问域名时的映射表。需要管理员权限才能去修改它。网络上的免费而稳定的源有很多,这里我们选择阿里云的源。现在我们可以通过finalshell这个工具来连接我们的远程服务器,不过我们连接主机的时候,需要。

2025-03-03 20:02:22 854

原创 Spark(4)配置虚拟机与finalShell安装

配置服务器IP地址用来通信,我们要把多台虚拟机设置为一个集群来工作,就必须给他们配置相同网段的IP地址。这里要注意一下:VMware net work Adpater VMnet8是安装了Vm这个软件之后会自动产生的。注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。1.配置:让自己的虚拟机可以联网,和别的虚拟机通讯。

2025-03-03 19:54:55 681

原创 Spark(3.1)vi的基本使用.课后习题

6.命令模式下输入nyy(复制当前行往下n行内容)5.如何在命令模式下保存内容并退出编辑器?1.命令模式,编辑模式,底线命令模式。3.如何从命令模式切换到编辑模式?4.如何从编辑模式切换到命令模式?7.如何粘贴内容到当前行的下一行?1.vi编辑器有哪三种模式2。2.第一次进入的是什么模式?5.命令模式下输入:wq。6.如何复制多行内容?8.如何删除一行内容?8.命令模式下输入dd。7.命令模式下输入p。

2025-02-24 19:47:10 146

原创 Spark(3)vi的基本使用

1.如果这个文件不存在,此时就是新建文件,编辑器的左下角会提示:new file。vi编辑器有三种工作模式,分别是命令模式,输入模式,底线模式。当我们通过VI命令第一次打开文件的时候,进入的就是命令模式。2.如果文件已经存在,此时就打开这个文件,进入命令模式。它是linux的内置命令,所以还是以命令的方式来运行。2. nyy(n+两个小y)复制当前行往下n行内容。1. yy(两个小y)复制光标所在行的内容。4.G键(大写g)可以跳到文件的最后一行。5. gg键(两个小g)跳到文件的第一行。

2025-02-24 19:45:41 351

原创 Spark(2.2)输出重定向,管道运算符与压缩解压

会把aaa这三个字符写入a.txt文件,并把之前的内容全部覆盖掉(等价于先删除了a.txt的内容,再写入aaa。把1.txt, 2.txt, 3.txt 压缩到test.tar文件中。会把当前日期覆盖到到a.txt 这个文件中。命令是:tar -cvf test.tar 1. txt 2.txt 3.txt。会把111追加到a.txt这个文件中。-c建立一个压缩文件,把多个文件或者文件夹压缩到一个新的文件中。管道运算符 | 把上一个命令的结果变成下一个命令的参数。

2025-02-24 11:37:13 353

原创 Spark(2.1)复制移动与查看

会把文件的最尾部的内容显示在屏幕上,并且不断刷新,只要文件有更新,就可以看到最新的文件内容。示例:把目录dir1复制一份得到dir2.那么对应的命令就是:cp -r dirl dir2。那么对应的命令就是:cp filel.txt file2.txt、。说明:如果源文件和目标文件在同一个目录下,就是重命名,否则就是复制。例如:重命名操作: my file. txt newfile.txt。复制和移动都分为文件和文件夹,具体的命令是cp和mV。3. more -tail:查看文件的结尾部分的内容。

2025-02-24 09:07:55 303

原创 Spark(2)linux和简单命令

波浪线,当前用户的home目录,比如root 用户 home目录是/root。..目录或文件名以,开始表示是隐藏的文件如果路径以点开始表示当前路径。如rm file.txt。1.当前路径:也叫做当前工作目录是当下用户所处的位置。1.ls:列出目录内容,包括参数-l(详细列表)、-a(显示隐藏文件)。3. mkdir -p 命令:创建目录,如果父级目录不存在,就建立一个。2.相对路径:当前相对当前工作目录开始的路径,会随着当前路径变化而变化。2. ll -a 命令,显示当前的目录下的文件,包括隐藏文件。

2025-02-20 18:43:15 284

原创 Spark(1)三大阶段与Hadoop的优势

例如早期的个人电脑,通常只有几百兆的内存和几 GB 的硬盘空间。提高处理能力:通过将任务分散到多个节点上并行计算,能够大大提高数据处理的速度和效率,从而可以在短时间内处理海量数据,满足大数据时代对数据处理的实时性和高效性要求。2.可靠性和可用性较低:一旦单机出现故障,整个系统就会瘫痪,导致业务中断,数据也可能丢失,没有冗余机制来保证数据的安全和业务的连续性。1.无法处理大规模数据:随着业务的发展和数据量的增长,单机系统很快就会遇到存储和处理能力的瓶颈,无法应对海量数据的存储和分析需求。

2025-02-18 14:34:39 281

原创 Scala入门基础(30)异常

异常:Exception,不是正常的情况。// 无论是否有异常发生,都会做的事。异常如果不处理,会导致整个程序崩溃。// 发生异常之后的处理逻辑。// 可能发生异常的代码。

2024-12-26 09:45:00 167

原创 Scala入门基础(29)泛型界定

T >: Policeman. T可以取值必须是Policeman。如果给某个泛型设置了上界:这里的类型必须是上界,及其子类。如果给某个泛型设置了下界:这里的类型必须是下界,及其父类。我们说T的上界是 类型A。我们说T的下界是 类型A。泛型的上界,下界,对类型的更加具体的约束。.求list中最大元素。//爷爷>叔叔>兄弟。

2024-12-26 09:30:00 311

原创 Scala入门基础(28)泛型

定义:把泛型定义放在trait的声明上。即:该特质中的参数类型是由泛型来决定的。在定义特质的子类或者子单例对象时,明确具体的数据类型。1.定义泛型特质Logger,该特质有一个变量a和show方法,他们都是用Logger特质的泛型。1.定义一个pair泛型类,该类包含两个字段,且两个字段的类型不固定。:在定义函数的时候,把参数的类型提取出来,变成一个参数,用[]包起来。需求:定义一个函数,用来将Array中的中间位置的元素值返回。泛型是对Array这个数据内部的元素的类型的约定。

2024-12-26 09:00:00 268

原创 Scala入门基础(27)隐式转换

系统自动完成的,把一种类型的数据转化成了另一种类型的数据。函数的 参数类型 和 返回值类型 是重要的,它约定了把什么类型转成什么类型。隐式值:能够自己设置函数的参数默认值,而不是在代码中固定写死。隐式函数:就是implicit修饰的函数,可以自动被调用的。隐式转换:编译器偷偷的,帮我做的转换,我们不要主动参与.函数名:transform 不重要。需求:能够自己设置函数的参数默认值。

2024-12-23 08:00:00 322

原创 Scala入门基础(27.1)正则—隐式转换练习

让字符串增加一个功能:isPhone() 检查当前字符串是否是一个合法的手机号。//例如:"136123456a8".isPhone ---> false。//例如:"13612345678".isPhone ---> true。定义一个函数,用来检验输入的字符串是否是一个手机号。将字符串转换成一个拥有isPhone这个方法的对象。利用隐式转换,隐式函数简化代码。:类 + 隐式转换函数。

2024-12-23 08:00:00 398

空空如也

空空如也

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

TA关注的人

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