自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MapReduce架构-序列化

Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传输。下面我们来看一个例子:通过代码来定义一个类,并创建它的一个对象,把这个对象保存到文件中(序列化),然后再写代码读取这个文件并还原回来。序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。

2025-05-14 08:49:25 317

原创 Spark缓存

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

2025-05-14 08:30:33 457

原创 自定义分区器-基础

这就类似于 Spark 中的分区,每个分区的数据可以在不同的计算节点上同时进行处理,从而加快整个数据处理的速度。例如,一个 128MB 的文件在 HDFS 上被分成 2 个 64MB 的块,那么创建的 RDD 默认分区数就是 2。在 Spark 中,分区是指将数据集按照一定的规则划分成多个较小的子集,每个子集可以独立地在不同的计算节点上进行处理,这样可以实现数据的并行处理,提高计算效率。在 Spark 里,弹性分布式数据集(RDD)是核心的数据抽象,它是不可变的、可分区的、里面的元素并行计算的集合。

2025-05-14 08:28:12 364

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

一个合适的思路是:写一个脚本,假设名为xsync,给它指定一个参数,它的作用就是把这个位置的内容同步给其他的设备。在一台机器上模拟出 Hadoop 分布式系统的各个组件,各个组件在逻辑上是分离的,但是都运行在同一台物理机器上,以此来模拟分布式环境。我们提出一个更加高级的需求: 现在有A,B,C,D,E五台机器,我们在A上新增加了文件,那如何去同步到B,C,D,E上相同的目录下呢?下面我们来看一个典型的任务场景:在A机器上有一个conf文件夹,它下面已经有了4个文件,并且在B机器上也有相同的4个文件。

2025-05-14 08:26:20 675

原创 RDD有哪几种创建方式

可以从Hadoop支持的文件系统(如HDFS、S3等)、本地文件系统或其他数据源(如数据库)中读取数据创建RDD。通过 parallelize 方法可以将本地集合转换为RDD。这里 rdd2 就是通过对 rdd1 进行 filter 转换操作创建的新RDD。通过对已有的RDD进行转换操作来创建新的RDD。从其他RDD转换创建。

2025-05-14 08:23:57 282

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

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

2025-05-14 08:21:57 284

原创 RDD转换算子

与 map 类似,但它是对RDD的每个分区进行操作,传入的函数接收一个分区的迭代器,返回一个新的迭代器。它可以在处理每个分区时进行一些初始化和清理操作,比 map 更高效,特别是在需要对每个分区进行批量操作时。用于合并两个RDD,生成一个包含两个RDD中所有元素的新RDD。两个RDD的类型必须相同。返回两个RDD的交集,即包含同时存在于两个RDD中的元素的新RDD。对RDD中的元素进行去重,返回一个包含唯一元素的新。// 对每个分区内的元素乘以2。

2025-05-14 08:21:06 134

原创 Linux操作系统命令-复杂命令

示例:把目录dir1复制一份得到dir2. 那么对应的命令就是:cp -r dir1 dir2。示例: 把file1.txt 复制一份得到file2.t x t。移动操作: mv file.txt newdir/file.txt。说明:如果源文件和目标文件在同一个目录下,就是重命名,否则就是移动。重命名操作: mv file.txt newfile.txt。复制和移动都分为文件和文件夹,具体的命令是cp和mv。3. more -tail:查看文件的结尾部分的内容。格式: cp 源文件 目标文件。

2025-05-14 08:18:41 240

原创 自定义分区器-基础

当使用 textFile 方法从外部存储(如 HDFS、本地文件系统等)读取文件创建 RDD 时,默认分区数通常由文件的块大小决定。对于 HDFS 文件,默认分区数等于文件的块数。例如,一个 128MB 的文件在 HDFS 上被分成 2 个 64MB 的块,那么创建的 RDD 默认分区数就是 2。在 Spark 里,弹性分布式数据集(RDD)是核心的数据抽象,它是不可变的、可分区的、里面的元素并行计算的集合。RDD 会被划分成多个分区,每个分区就是一个数据集片段,这些分区可以分布在集群的不同节点上。

2025-05-14 08:17:37 434

原创 VI编辑器

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

2025-05-14 08:16:04 304

原创 数据清洗ETL

ETL 过程需要使用合适的工具来实现,常见的 ETL 工具包括 Informatica、Talend、Kettle(Pentaho Data Integration)、SQL Server Integration Services(SSIS)等,也可以使用编程的方式(如 Python 结合 pandas 库)来实现 ETL 功能。

2025-05-07 09:27:26 573

原创 分区器的应用

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

2025-05-07 09:25:41 441

原创 数据压缩实现案例

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

2025-05-07 09:19:54 400

原创 如何让实现流量统计

创建一个目录data下保持了一些日志文件,文件的内容格式如下。需求统计每一个手机号耗费的总上行流量、总下行流量、总流量。有输出的结果,并且流量统计计算是正确的。写一个Bean对象,保存流量信息。实现Writable接口。编写Driver驱动类。编写Reducer类。运行程序,查看效果。

2025-05-07 09:18:19 124

原创 数据的压缩

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

2025-05-07 09:17:43 268

原创 Yarn的定义

它的主要作用是将 Hadoop 的资源管理和作业调度/监控功能分离,形成一个通用的资源管理平台,可以支持多种计算框架(如 MapReduce、Spark、Flink 等)。ApplicationMaster (AM) 每个应用程序(如 MapReduce 作业)的管理者,负责向 RM 申请资源,并与 NM 协调任务执行。NodeManager (NM) 每个工作节点上的代理,负责管理本节点的资源(CPU、内存)并执行任务。管理集群的 CPU、内存等计算资源,并按需分配给不同的应用程序。

2025-05-07 09:14:51 262

原创 集群免密登录

在hadoop100上,运行命令:ssh-keygen -t rsa。这里专门有一个命令ssh-copy-id。它的格式是: ssh-copy-id 目标机器。这里的id_rsa就是私钥,id_rsa.pub就是公钥。在hadoop100上,输入ssh hadoop101命令,看看是否可以免密登录?登录 hadoop100。在hadoop100上登录hadoop101,验证效果。把hadoop100的公钥发到hadoop101上。在hadoop100上 生成密钥对。

2025-05-07 09:08:55 249

原创 Spark论述及其作用

因此,后续直接按照集群模式部署Spark集群。包含Spark SQL(结构化数据)、MLlib(机器学习)、Spark Streaming(流处理)、GraphX(图计算)等组件,无缝集成Hadoop、Hive、Kafka等工具。它处理速快,提供了更加简洁、高层的编程模型,提供了强大的实时数据处理能力,它可以将实时数据流分割成小的批次进行处理,实现准实时的数据分析。支持批处理、实时流处理(微批及结构化流)、交互式查询、机器学习(MLlib)和图计算(GraphX),实现“一站式”大数据处理。

2025-05-07 09:07:19 298

原创 如何在idea中写spark程序

File > New > Project > Maven,选择 JDK 版本,点击 Create。-- 版本需与集群一致 -->.master("local[*]") // 本地模式,[*] 使用所有核心。安装 JDK:确保已安装 JDK ,并配置 JAVA_HOME。-- Spark SQL 依赖(可选) -->-- Spark Core 依赖 -->// 创建 SparkSession。// 停止 SparkSession。

2025-05-07 09:05:12 397

原创 RDD简介

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

2025-05-07 09:03:35 194

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

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

2025-05-07 09:02:17 350

原创 关于hadoop和yarn的问题

YARN(Yet Another Resource Negotiator)是 Hadoop 2.0 引入的资源管理平台,其核心功能是将资源管理与作业调度/监控分离,支持多计算框架(如 MapReduce、Spark 等)运行在同一个集群中,提高资源利用率和系统扩展性。YARN(Yet Another Resource Negotiator):资源管理和作业调度框架,负责集群资源的统一分配和任务调度,提升集群利用率。ResourceManager(RM):集群资源的总管理者,负责全局资源分配与调度。

2025-05-07 08:58:55 156

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

Spark可以与Hadoop生态系统无缝集成,例如,Spark可以使用HDFS作为数据存储层,可以与Hive共享元数据,可以与YARN进行资源管理等。例如,Spark Streaming可以处理实时数据流,Spark SQL可以进行SQL查询,Spark MLlib可以进行机器学习,Spark GraphX可以进行图计算。架构特点:Hadoop的架构较为复杂,需要分别搭建HDFS和MapReduce,且MapReduce的执行过程较为繁琐,需要经过多个阶段(如Shuffle和Sort),导致延迟较高。

2025-05-07 08:56:38 437

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

1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。对应的命令是:tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module。使用xsync /opt/module/hadoop-3.1.3/etc/hadoop/同步一下。同步给其他的设备: xsync /etc/profile.d/

2025-05-07 08:50:52 248

原创 如何在idea中写spark程序

3. 添加Spark依赖:在项目的pom.xml(Maven项目)或build.gradle(Gradle项目)文件中添加Spark相关依赖。1. 安装和配置Java或Scala开发环境:确保已在本地安装好Java或Scala开发环境,并在IDEA中配置好相应的SDK。4. 创建Spark程序:在IDEA项目中创建Scala或Java类来编写Spark程序。2. 创建Maven或Gradle项目:打开IDEA,选择创建新项目,根据需求选择Maven或Gradle项目类型。

2025-04-28 19:39:43 313

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

• 可以通过访问YARN的Web界面(通常是http://yarn_resourcemanager_ip:8088)和Spark Master的Web界面(通常是http://spark_master_ip:8080)来查看集群状态。• 从Spark官方网站下载适合你Hadoop版本的Spark安装包,如spark-3.3.2-bin-hadoop3.tgz。• 配置SPARK_HOME环境变量,将spark/bin目录添加到PATH环境变量。• 安装Hadoop集群,并确保YARN服务正常运行。

2025-04-28 19:38:06 357

原创 Mapreduce 工作原理

**分区(Partitioning)**:根据 key 的哈希值决定数据发送到哪个 Reduce 任务。- **Combiner(可选)**:本地 reduce,减少网络传输量。- **排序(Sorting)**:每个分区内的数据按键排序。- **数据本地性优化**:优先在存储数据的节点上执行任务。- **Map 阶段**:处理输入数据并生成中间键值对。- **Reduce 阶段**:对中间结果进行汇总处理。- **数据从 Map 端拷贝到 Reduce 端**

2025-03-31 20:14:28 350

原创 Hadoop集群常用命令

启动所有Hadoop服务。# 停止所有Hadoop服务。# 列出所有运行中的应用程序。# 查看MapReduce作业状态。## MapReduce作业命令。# 检查YARN节点状态。2. **文件权限和所有权**# 查看集群资源使用情况。# 提交MapReduce作业。1. **平衡HDFS数据**1. **启动/停止集群**# 检查HDFS一致性。2. **检查集群状态**# 检查HDFS状态。# 检查集群健康状态。1. **基本文件操作**# 查看应用程序日志。2. **检查文件系统**

2025-03-31 20:11:17 363

原创 linux常见操作命令

ls命令可以查看文件夹下的文件信息,如果某个文件夹下的文件特别多,使用ls命令时,就只能显示后面一部分文件信息,那如果我们希望查看全部的文件信息,要怎么办呢?因为在linux下,我们要去下载安装新的软件时就需要用到它:下载下来的软件大多都是.tar格式,而安装的过程就是解压缩。会把111写入a.txt这个文件中,把之前的内容删除掉。但是,在linux里,这不能使用鼠标操作,需要用到显示文件的命令。ls 用来显示文件夹下的文件信息,more用来翻页,而 | 就可以把前一个的结果作为输入传递给more。

2025-03-03 19:47:47 355

原创 vi常见操作命令

命令模式:在这个模式下,所敲的按键编辑器都理解为命令,以命令来驱动执行不同的功能。当我们通过VI命令第一次打开文件的时候,进入的就是命令模式。vi编辑器有三种工作模式,分别是命令模式,编辑模式,底线模式。(2)按下o:进入到编辑输入模式后,在当前行的后面添加一行空行(当前行的下一行)2. 如果文件已经存在,此时就打开这个文件,进入命令模式。从命令模式切换到底线命令模式,输入: 进入底线命令模式。(1)按下i: 进入编辑模式,定位到当前光标前面。(3)在输入模式下,按下ESC退回到命令模式。

2025-03-03 19:43:25 207

原创 虚拟机IP配置

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

2025-03-03 19:40:21 201

原创 windows用户安装虚拟机教程

在VMware Workstation菜单中,选择“虚拟机” -> “安装VMware Tools”。选择“安装程序光盘映像文件(ISO)”,并浏览选择你要安装的操作系统ISO文件,点击“下一步”。输入操作系统的产品密钥(如果有,如果没有,则选择个人),设置用户名和密码,点击“下一步”。安装VMware Workstation,根据系统提示一步一步完成安装过程。打开VMware Workstation,点击“创建新的虚拟机”。设置虚拟机的磁盘大小,默认20GB,点击“下一步”。点击“完成”以创建虚拟机。

2025-03-03 19:35:05 306

原创 scala——模式匹配-基础使用

case (x1,x2,x3)=>println("有三个元素",x1,x2,x3)case (x1,x2,x3,x4)=>println("有四个元素")case "42" => println("湖北")case "33" => println("浙江")case "11" => println("北京")case "31" => println("上海")// println("湖北")// println("浙江")// println("北京")

2024-12-12 00:10:55 391

原创 Scala全文单词统计

writer.println(s"${e._1}:${e._2}次")// val rs = content.split(",")正则表达式。val word = w.toLowerCase()//全小写。//Map不能直接排序,需要转成有序的集合。// W:表示非字符(,空格,?writer.close()//关闭。//4.根据出现的次数从高到低排序。//2.拆分字符串-->单词数组。//5.保存结果,涉及到写入文件。//3.统计出现的频率。// W+:多个非字符。

2024-12-12 00:09:39 338

原创 Scala的集合复习

原文链接:https://blog.youkuaiyun.com/GZM1314YMX/article/details/143889271。集合(可变 不可变):Set,List(链表:空间上不连续),Array(数组:空间上连续),Map。// subString(起点下标,终点下标,不包含)// println(q1.enqueue())//出队 1。// println(q1.enqueue())//出队 2。//2.取出他的生日,子串。// 4.前两位表示省份。//奇数为男,偶数为女。

2024-12-12 00:08:25 418

原创 Scala(多维数组)

val dream3 = DreamItem("健健康康的过完一生",true,"2024-11-19",3)val dream2 = DreamItem("吃遍全世界的美食",true,"2020-7-24",2)val dream1 = DreamItem("走遍全世界",true,"2010-10-10",1)dreamList += DreamItem("学会独立",true,"2024-1-12",1)val arr5 = Array.ofDim[Int](2, 2) //2行2列。

2024-12-12 00:06:50 485

原创 Scala中的Array

/ArrrayBuffer(1,2,3,4,5)取出3,4组成一个新的数组。//filter 过滤.从当前数组中找出重要的元素,组成一个新的数组。//数组的切片,从一个数组中取出相邻的元素·1组成一个新的数组。//slice(起点下标,终点下标) 不包括终点下标!// println(s"第一个元素是 ${arr1(0)}")// //2.访问,数组名(下标)。//indexOf(元素): //找到元素下标。//有 ,就返回第一次出现的下标。// //1.创建不可变数组。

2024-12-12 00:05:21 434

原创 Scala的迭代器

如果要访问集合,需要通过集合对应的迭代器的方法来访问。// println(it1.next())//作用:获得当前元素 + 移动迭代器。// println(it1.next())//作用:获得当前元素 + 移动迭代器。// println(it1.next())//作用:获得当前元素 + 移动迭代器。// val l2 = it1.toList //把剩余元素转成列表。// it1.next() //移动一次迭代器。// it1.next() //移动一次迭代器。

2024-12-12 00:04:13 329

原创 Scala的Set集合

override def toString: String = s"书名是:$bookName,作者:$author,价格:$price"println(book1)// println会自动去调用对象的toString方法。val book1 = new Book("西游记","吴承恩",100)//问题:Set可以把两本相同的书。//创建可变S儿童,添加两本相同的书。//case class 的特点。//3,它内置实现了一些方法。//2,可以省略new。//Set:特点去重。//1,数据是只读的。

2024-12-12 00:03:06 489

原创 Scala中的List

/ val rs = l1.contains(21) //判断元素是否存在list中。// l1.remove(0) //删除指定位置上的元素。// //不可变 l1(0) = 100 写法是错误的!// //7.合并List。// l1 -= 150 //删除指定位置的元素。// //2。// //6.判断元素是否存在。// //1建立一个不可变的列表。// //2,输出第一个元素。// //4,添加 +=//List:列表。

2024-12-12 00:01:31 464

空空如也

空空如也

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

TA关注的人

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