自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据清洗案例代码

【代码】数据清洗案例代码。

2025-05-20 06:16:07 104

原创 自定义分区器的实现步骤

getPartition(key: Any) :接收一个键值key(对于非键值对类型 RDD,可根据数据特征构造合适的键 ),根据自定义逻辑返回该键值对应的分区索引(从 0 开始,取值范围为 0 到numPartitions - 1 )。假设要对 NBA 球队比赛信息进行分区存储,要求将湖人、火箭两队信息单独存储,其余球队信息存放在一个分区。numPartitions :返回分区的数量,即整个 RDD 将被划分成多少个分区。自定义分区器需要:继承Partitioner抽象类 + 实现其中的两个方法。

2025-05-20 06:14:29 110

原创 分区器和默认分区器

数据倾斜:当数据分布不均匀,某些分区数据量过大,导致计算负载不均衡时,可自定义分区器,按照特定规则重新分配数据,避免数据倾斜影响计算性能。比如电商订单数据中,按地区统计销售额,若某些热门地区订单数远多于其他地区,使用默认分区器会使部分任务计算量过大。通过定义分区规则,它能够将具有键值对类型的数据(PairRDD)按照一定策略划分到不同分区,以实现数据的合理分布,进而提高并行计算的效率。特定业务逻辑:若业务对数据分区有特殊要求,如按时间段将日志数据分区,不同时间段的数据存到不同分区便于后续处理分析;

2025-05-20 06:12:17 209

原创 RDD的五大特征

按照“移动数据不如移动计算”的理念,Spark在进行任务调度时,会尽可能地将任务分配到其所要处理数据块的存储位置。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。举个生活中的例子:高考的时候,每个班的同学都打散到不同的考场,此时的高3(8)班就是一个抽象的概念,在实际中,这个班级的学生可能分布在5个不同的考场。RDD的方法会作用在所有的分区上。

2025-05-20 06:10:19 150

原创 RDD基本概念

通过 SparkConf 类,你可以设置应用程序的名称、运行模式(如本地模式、集群模式)、资源分配(如内存、CPU 核心数)等。是 Spark 应用程序的入口点,它代表了与 Spark 集群的连接。Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。【老师强调】要先确保这个外部的文件是存在的。:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。

2025-05-20 06:07:28 210

原创 SparkONYarn模式

NodeManager:部署在集群中的每个节点上,负责管理该节点上的资源使用情况,监控容器的运行状态,并且与 ResourceManager 保持通信,汇报节点的资源使用信息。启动 ApplicationMaster:ResourceManager 接收到应用程序的请求后,会在集群中的某个节点上启动一个 ApplicationMaster 进程。Spark Driver:负责执行用户编写的 Spark 应用程序代码,将其转化为一系列的任务,并调度这些任务到各个 Executor 上执行。

2025-05-20 06:02:50 299

原创 Yarn-tool接口

org.apache.hadoop.util.Tool 是 Apache Hadoop 框架里的一个接口,其用途是协助开发可通过命令行运行的 Hadoop 应用程序。ToolRunner 是 Hadoop 提供的一个实用类,可用于运行实现了 Tool 接口的应用程序。run(String[] args):此方法为应用程序的主要执行逻辑,接收命令行参数,返回一个整数代表执行结果(通常 0 表示成功,非 0 表示失败)。2.run 方法会打印出接收到的命令行参数,你可以在此添加自己的业务逻辑。

2025-05-18 23:49:38 127

原创 MR提交YARN详细流程

步、各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。第3步、ApplicationMaster启动成功之后,首先向ResourceManager注册并保持通信,这样用户可以直接通过ResourceManage查看应用程序的运行状态(处理了百分之几);第6步、NodeManager 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

2025-05-14 15:41:31 135

原创 Yarn-概述

YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。一台机器上有很多的容器,有的容器大,有的容器小。应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。可以把YARN理解为一个分布式操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需要的资源。第二个阶段是由ApplicationMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成。lient: 提交程序的一端。

2025-05-14 15:40:57 217

原创 数据压缩的参数配置

即使你的MapReduce的输入输出文件都是未压缩的文件,你仍然可以对Map任务的中间结果输出做压缩,因为它要写在硬盘并且通过网络传输到Reduce节点,对其压缩可以提高很多性能,这些工作只要设置两个属性即可,我们来看下代码怎么设置。mapreduce.map.output.compress.codec(在mapred-site.xml中配置),只需要在dirvier类的代码中,去设置在reduce端输出压缩开启,并设置压缩的方式即可。运行之后,发现输出的结果格式没有变化,因为它是中间过程。

2025-05-14 15:36:01 628

原创 数据压缩的具体介绍

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

2025-05-14 15:33:20 708

原创 案例-流量统计

流量统计

2025-05-14 15:30:29 267

原创 序列化与反序列化

下面我们来看一个例子:通过代码来定义一个类,并创建它的一个对象,把这个对象保存到文件中(序列化),然后再写代码读取这个文件并还原回来。而且“活的”对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机。序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。新建文件输出流对象,并写入要实例化的实例。

2025-05-14 15:27:26 286

原创 分区器介绍

说明:这里的setNumReduceTasks的值最好与setPartitioner返回的分区器的个数一致。在MapReduce框架中,分区器(Partitioner)是一个关键组件,其主要作用是决定由一个maptask生成的键值,最终是生成在哪个文件中的。回顾我们的需求,我们在做词频统计的时候,把a-m开头的保存在一个文件中,n-z开头的保存在另一个文件中。自定义分区器:如果使用自定义分区器,可以根据特定的逻辑(如键的首字母、键的范围等)将数据分配到不同的Reducer中。继承Partitioner类。

2025-05-14 15:22:12 233

原创 数据清洗-案例

数据清洗案例

2025-05-14 15:19:36 245

原创 WordCount代码运行

reduce函数的入参是kv结构,k是单词,v是集合,每个元素值都是1。reduce函数的返回值格式也是kv结构,k是每个单词,v是汇总之后的数字。此时要注意,我们的程序并没有使用集群中的资源,在yarn中看不到运行的任务,我们也没有把结果保存在hdfs中。map函数的入参是kv结构,k是偏移量,v是一行的具体内容。map函数的返回值格式也是kv结构,k是每个单词,v是数字1。其中,需要我们去实现代码的部分是:map函数和reduce函数。给定一个路径,统计这个路径下所有的文件中的每一个单词的出现次数。

2025-05-14 15:14:41 236

原创 MapReduce的两个阶段和编程规范

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

2025-05-14 15:06:20 629

原创 Mapreduce基本介绍

Map会处理本节点的原始数据,产生的数据会临时保存到本地磁盘,那么每个节点会得到一部分结果(因为节点上的数据是一部分数据)。Reduce是会跨节点fetch属于自己的数据,并进行处理,把结果进行汇总,存储到HDFS。每个Map任务读取数据,按行处理,按空格进行切分,组成KV键值对,单词为键,1为值,将键值对保存到磁盘。其他的mapTask也会去生成这样的文件,这个文件的内容会有两个部分:a-p是一部分,q-z是另一部分。移动计算,而非移动数据。数据在各个节点上,我们把计算任务移动上去,而不是移动数据。

2025-05-14 15:00:14 296

原创 HDFS概述

HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,1. 不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。

2025-05-14 14:55:43 762

原创 Hadoop的组成

(1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等。在Hadoop3.X中,hadoop一共有四个组成部分:MapReduce计算,Yarn资源调度,HDFS数据存储,Common辅助工具。(4)Container: 容器,相当于一台独立的服务器,里面封装了任务运行时所需要的资源:如内存、cpu、磁盘、网络等等。(1)ResourceManager(RM):整个集群资源(内存,CPU等)的老大。

2025-05-14 14:46:46 334

原创 如何使用finalshell连接主机

当我们使用finalshell连接远程主机之后,我们又回到了熟悉的图形化界面了。我们可以:创建文件夹、创建文件、上传文件,下载文件,使用linux命令、复制、粘贴命令等等,非常方便。finalsheel中,在/下面,鼠标右键,选择创建文件夹。然后,回到vm的虚拟机上,通过cat,命令查看 names.txt中是否有这些内容。. 找到刚才建立的连接,点击连接。弹层出现SSH安全警告,选择接受并保存。然后回到vm的虚拟机上,通过 ls命令检查是否多了个modules目录?启动finalshell,新建。

2025-05-14 14:39:21 443

原创 配置虚拟机IP并使用finalshell连接

在window操作系统中,我们通过图形化的界面来设置ip值,而在linux中ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中的,要去设置IP地址,就需要使用vi 编辑器去修改这个配置文件。如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。,在后续的设置中也要保持一致。一共要改如下5行的配置。

2025-05-14 14:32:37 343

原创 vi编辑器

有强大的文本编辑能力。1. 如果这个文件不存在,此时就是新建文件,编辑器的左下角会提示:new file。(2)按下o:进入到编辑输入模式后,在当前行的后面添加一行空行(当前行的下一行)当我们通过VI命令第一次打开文件的时候,进入的就是命令模式。2. 如果文件已经存在,此时就打开这个文件,进入命令模式。从命令模式切换到底线命令模式,输入: 进入底线命令模式。它是linux的内置命令,所以还是以命令的方式来运行。来,我们实操一下,如何从命令模式进入输入模式?(3)在输入模式下,按下ESC退回到命令模式。

2025-05-13 11:18:23 280

原创 一分钟教你Spark数据清洗

核心流程包括:读取数据、处理缺失值、去重、异常值处理、格式统一、标准化,以及最终的质量验证和输出。另外,也可以基于相似记录的特征进行填充,例如根据与缺失值所在 记录相似的其他记录的相应特征值来填充。需要通过比较数据的各个字段,找出重复的记录,并根据业务需求保留其中一条,删除其余重复项,以避免重复数据对分析结果产生干扰。数据清洗是指对数据进行审查和校验的过程,目的是删除重复信息、纠正错误数据、处理缺失值和异常值,以及统一数据格式,从而提高数据质量,为后续的数据分析和挖掘工作提供可靠的基础。

2025-05-13 09:16:35 392

原创 spark基本介绍

Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。Hadoop是一个分布式系统结构的基础架构。

2025-05-07 16:04:12 922

原创 如何在idea中写spark程序

确保本地已安装与集群环境相同版本的 JDK(建议 JDK 8 或更高版本)。安装完成后,配置系统环境变量,使 Idea 能够识别 Java 运行环境。可在系统设置中,将 JAVA_HOME 变量指向 JDK 的安装目录,并将 %JAVA_HOME%\bin 添加到 Path 变量中。​。

2025-04-28 20:19:31 1373 1

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

建议使用 Linux 系统,如 CentOS 7 或 Ubuntu 18.04。以 CentOS 7 为例,确保集群中所有节点的操作系统版本一致,并且已经安装好常用的基础软件包,如wget、vim等。可以通过以下命令安装:​。

2025-04-28 20:11:15 1168

原创 vi 编辑器的使用

例:echo 111 > a.txt 会把111写入 a.txt 此文件中,把之前的内容删除掉。示例:把 file1.txt 复制一份得到 file2.txt,那么对应的命令就是:cp file1.txt file2.txt。例:echo 111 >> a.txt 会把111追加到 a.txt 此文件中。把 1.txt,2.txt,3.txt 压缩到 test.tar 文件中。例如:重命名操作:mv file.txt newfile.txt。2 . 添加到文件的末尾:>>(二) 管道运算符:|

2025-02-25 11:39:29 494

原创 linux命令

rm -rf ./bbb 和 rm -rf /*: 将目录以及以下所有递归逐一删除,无需用户确认。ls : 列出目录内容 -l(详细列表),-a(显示隐藏文件)mkdir -p 命令:创建目录,如果父级目录不存在,就建立一个父级目录。rm 文件名 : 删除文件(会给出是否删除提示,用户确认:yes)touch 命令:创建一个空文件。cd dir:进入当前文件夹下的dir目录。rm -f 文件名:删除文件(无需确认)cd .. :进入上一级目录。mkdir 命令:创建目录。

2025-02-19 19:46:01 151

原创 一分钟教你搭建虚拟机

安装 VMware Workstation Pro需要在本地计算机上下载并安装 VMware Workstation Pro 软件。这一步骤相对简单直观,按照官方提供的指引完成即可。创建新虚拟机打开软件后,在界面中选择新建虚拟机器向导来启动新的实例设置流程。这里可以根据实际需要调整分配给该虚拟系统的资源参数,比如 CPU 数量、RAM 大小等。配置网络连接对于希望通过 SSH 登录访问的情况,确保正确设置了网络适配器模式(如 NAT 或桥接),以便让虚拟机能被外部设备识别并与之通讯。加载操作系统镜像。

2025-02-19 15:38:11 210

原创 Scala的隐式对象

隐式对象:implicit object。

2024-12-30 13:21:50 99

原创 Scala用隐式类求阶乘

【代码】Scala用隐式类求阶乘。

2024-12-30 13:19:25 111

原创 Scala的隐式类

隐式类:implicit class。

2024-12-30 13:18:00 120

原创 Scala之函数的隐士参数

【代码】Scala之函数的隐士参数。

2024-12-30 13:15:51 96

原创 scala如何编写调用isPhone方法

/ 完成一个功能,让所有的字符串都能调用isPhone方法,来校验自己是不是一个手机号。// 定义一个特殊的转换函数,把str ===> StrongString 的对象。// println("偷偷调用implicit")// 验证是否身份证号。

2024-12-11 17:04:53 455

原创 Scala的模式匹配之守卫语句

语法:

2024-12-11 17:04:26 98

原创 Scala的正则表达式

2024-12-11 17:04:08 119

原创 正则表达式 隐式转换

2024-12-11 17:03:51 100

原创 Scala的模式匹配之元组匹配

【代码】Scala的模式匹配之元组匹配。

2024-12-02 17:02:52 113

原创 Scala的模式匹配

相当于java中的switch case(可替代多个if else语句)

2024-12-02 16:58:30 190

空空如也

空空如也

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

TA关注的人

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