- 博客(62)
- 收藏
- 关注
原创 RDD的两个创建方式
/ 创建 SparkConf 和 SparkContext。// 2. 从外部存储系统创建。// 创建RDD的两个方式。// 1. 从集合中创建。
2025-05-14 09:15:12
354
原创 RDD分区合并
/ 提取文本内容并执行 WordCount 操作。// 创建 SparkContext 对象。// 将所有分区的数据合并成一个分区。// 停止 SparkContext。// 配置 Spark 应用程序。// 读取目录下的所有文本文件。// 保存结果到文件。
2025-05-14 09:12:59
121
原创 java小任务04
/ output1会自动被创建,如果它已经存在,程序会报错!// 6. 设置输入和输出路径。// 3. 关联Mapper和Reducer。// 1. 获取配置信息以及获取job对象。// 4. 设置Mapper输出的KV类型。// 2. 如果有6个字段,就保留这条数据。// 1. 获取一行数据,使用空格拆分。// 5. 设置最终输出KV类型。// mapreduce的Driver。// 2. 关联本地的jar。// 7. 提交job。
2025-05-14 09:11:44
428
原创 java小任务03
/ java反序列化: 从文件student_java.ser中读出内容,还原这个对象。// readFields: 在反序列化的时候,调用。// 字段 = dataInput.read();// write: 在序列化的时候,调用。// hadoop序列化:把对象保存到一个文件中。// java序列化: 把对象保存到一个文件中。// hadoop反序列化:从文件中读取对象。// 字段的顺序要与write中的顺序一致。// 3. 把对象写入到文件中。// 实例化student对象。
2025-05-14 09:10:51
407
原创 java小任务02
/ output1会自动被创建,如果它已经存在,程序会报错!// 如果Key1和Key2的 Code相同,那么他们会被分配到同一个分区,保存到同一个文件。// 如果单词是以a~m开头的,那么会被分配到第一个分区,// 1. 获取一行数据,并拆分成一个个的单词。// 4. 设置Mapper输出的KV类型。/*// mapreduce的Driver。//设置reduceTask的数量。// 遍历单词,设置键值对,值为1。// 2. 关联本地的jar。
2025-05-14 09:09:54
381
原创 java小任务
/ 1. 遍历集合,取出每一个元素,计算上行流量和下行流量的汇总。// 5. 设置reducer输出类型。// 1. 获取配置,得到job对象。// 4. 设置Mapper输出类型。// 6. 设置输入和输出路径。// 2. 设置jar包路径。// 三个属性:手机号,上行流量,下行流量。// 上行流量是第二个元素。// 下行流量是第三个元素。// 手机号是第一个元素。// 7. 提交job。// 定义get/set方法。// 定义一个获取流量的方法。// 2. 封装对象。
2025-05-14 09:08:37
377
转载 hadoop序列化和反序列化
原文链接:https://blog.youkuaiyun.com/2301_80781830/article/details/147089675。//readFields:反序列化的时候,调用,从文件中读出内容,还原这个对象。// //hadoop序列化:把对象保存到第一个文件中。//hadoop反序列化:从第一个文件中读取对象。//write:在序列化的时候,调用,把对象写到文件。//字段顺序要与write中的顺序一致。//支持hadoop的序列化。//2.补充一个空参构造。//学生类,姓名,年龄。
2025-05-14 08:59:51
20
原创 spark打包上传集群
/ 提取文本内容并执行 WordCount 操作。// 创建 SparkContext 对象。// 将所有分区的数据合并成一个分区。// 停止 SparkContext。// 配置 Spark 应用程序。// 读取目录下的所有文本文件。// 保存结果到文件。// 打包上传到集群去运行。
2025-05-14 08:48:45
179
原创 创建RDD的两个方式
/ 创建 SparkConf 和 SparkContext。// 2. 从外部存储系统创建。// 创建RDD的两个方式。// 1. 从集合中创建。
2025-05-14 08:18:41
199
原创 saprk中的行动算子
/ 1.collect: 把分布在集群中各个节点上的RDD元素收集,以数组的形式返回。rdd.foreach(x => println("元素"+x))// 2.count: 返回RDD中元素的个数。// 学习spark RDD中的行动算子。// 4.foreach: 循环遍历。// 3.reduce: 聚合汇总。// 计算rdd中元素之和。
2025-05-14 08:17:13
190
原创 spark中的转换算子
/ 4. reduceByKey: 键值对的数据(word,1),(hello,1)// 3. flatMap:flat(扁平化) + map(映射)// 有多个句子,每个句子有多个单词,单词之间使用空格前隔开。// 目标: 把所有的单词找出来,做一个数组中。// 学习spark RDD中的转换算子。// 使用filter算子,保留偶数。// collect() 行动算子。// 2. filter:过滤。// 创建一个RDD。// 词频统计的例子。
2025-05-14 08:16:10
292
原创 spark小任务
override def numPartitions: Int = 2 // 两个分区,编号就是:0,1。// 3. 在创建RDD的时候,partitionBy方法 指定分区器。// 目标: 把10个分区器,偶数分在第一个分区,奇数分在第二个分区。// 自定义分区器使用的前提:数据是key-value类型。// 在分区完成之后的基础上,只保留key。// 创建一个类继承Partitioner。// 分区器决定哪一个元素进入某一个分区。// 创建SparkContext。// 使用自定义分区器。
2025-05-14 08:14:46
403
原创 spark分区器
/ 2. 从外部存储系统(如HDFS、HBase、共性文件系统)中创建。// hash分区器 = hash(数据)%分区数 ===> 编号。// RDD: 弹性分布式数据集,特点:不可变的,可并行计算的。// 将 RDD 保存为文本文件,保存路径为“output”// 查看分分区数: 默认为当前机器的CPU核数。// 创建SparkContext。// 1. 从集合中创建。// 1. 分区和分区器。// 2. 自定义分区器。
2025-05-14 08:13:54
402
原创 spark数据清洗
/ 判断是不是数字,是,就保留记录"45","abc" (正则表达式 \d+)// 3. 把过滤之后的内容,保存到文件saveAsTexttFile()// 拆分出年龄split(",")(1)//将所有的分区数据合并成一个分区。// 1. 读取数据,读入文本文件。// 2. 对于文件中的每一行。// 判断年龄是否是数字。// 过滤之后的rdd。// 创建spark。
2025-05-14 08:12:52
345
原创 spark的缓存
println(s"第二次计算结果:$rs2,耗时:${endTime1 - startTime1}毫秒")println(s"第一次计算结果:$rs1,耗时:${endTime - startTime}毫秒")// cache()是persist()的一种特殊情况,默认只使用内存。// 第一次触发行动算子,计算并统计消耗的时间。// 第一次触发行动算子,计算并统计消耗的时间。// 创建一个包含大量随机数的RDD。//定义一个复杂的转换函数。// spark的缓存。
2025-05-14 08:10:48
496
原创 RDD的简单创建方式
在 Spark 中,RDD 是一种核心的数据抽象形式。以下是两种最为简单的 RDD 创建方式,分别适用于不同的需求场景。这是最基础也是最常见的创建方式之一。通过 方法可以直接将本地的 Scala 或 Python 集合转换为分布式存储的 RDD。代码示例如下:scala这种创建方式非常适合用于测试环境或者处理较小规模的数据集。如果数据已经存在于外部存储系统中(如 HDFS、本地文件系统等),则可以通过 方法轻松加载这些数据并形成 RDD。代码示例如下:scala此方法尤其适合于处理大规模
2025-05-07 08:45:12
217
原创 什么是RDD
尽管如此,需要注意的是,虽然 RDD 提供了许多优势,但它并不适合所有应用场景。:RDD 支持宽依赖(Shuffle Dependency)和窄依赖(Narrow Dependency),这允许 Spark 构建复杂的数据流图(DAG)。这些依赖关系构成了一种称为“血统”的机制,使得当某个 RDD 出现异常时,可以通过重放其血统来重新生成丢失的数据,而无需完全重启整个任务。:借助血统追踪功能,即使部分节点发生故障,也可以利用已有的输入数据和其他副本重建失败的任务输出,保障作业顺利完成。
2025-05-07 08:40:41
529
原创 如何在idea中写spark程序
打开 IntelliJ IDEA,选择 “File -> New Project”,然后选择 “Maven” 作为构建工具。确保勾选 “Create from archetype”,并选择适合的 Scala 和 Spark 版本的相关依赖项。在项目的初始配置界面中指定 Java SDK(推荐使用 JDK 1.8)。接着,在后续步骤中添加 Scala 插件支持,并选择对应的 Scala 版本(如 Scala-2.11.8)。文件来声明所需的 Spark 库和其他可能需要用到的第三方库。
2025-04-28 19:53:00
1077
原创 搭建spark yarn模式集群
注意这里指定了 master 参数为 “yarn”,意味着采用的是 YARN 模式的资源调度;为了保持一致性,建议使用自定义脚本(如 xsync.sh)同步配置文件到整个集群中的各个节点。在开始搭建 Spark YARN 集群之前,需要确保 Hadoop 和 YARN 已经正常部署并运行。验证集群状态良好之后,可以尝试提交一个简单的 Spark Pi 示例作业给 YARN 调度器管理。下载适合版本的 Spark 并将其解压至指定目录。此步骤完成后,需确认 Spark 文件夹路径已正确设置。
2025-04-28 19:49:36
470
原创 spark和hadoop之间的对比和联系
Spark 不仅具备强大的批处理能力,还扩展了流处理(Structured Streaming)、机器学习(MLlib)以及图计算(GraphX)等功能模块,适用于更广泛的应用场景。由于 Spark 支持将中间结果缓存在内存中,减少了频繁的磁盘读写操作,因此在迭代式算法和实时性要求较高的场景下表现出更高的效率。而 Hadoop 的 MapReduce 架构受限于磁盘 I/O,适合大规模离线批处理任务。相比之下,Hadoop 更专注于传统的批处理任务,其他功能通常依赖生态系统的补充工具完成。
2025-04-23 11:20:31
443
原创 yarn的三个资源调度策略
FIFO:简单,适合小规模集群。Capacity:支持资源隔离,适合多用户和多项目。Fair:动态公平分配,适合多用户和资源公平需求。
2025-04-18 15:08:38
184
原创 yarn的三大组件及各自的作用
负责应用程序的生命周期管理,包括资源申请、任务启动和监控。负责单个节点上的资源管理和任务执行。负责全局资源的分配和管理。
2025-04-18 15:05:56
175
原创 yarn的定义
YARN是一个分布式资源管理平台,它通过分离资源管理和作业调度的功能,为Hadoop集群提供了一种高效、灵活且可扩展的方式来管理和分配计算资源。YARN的核心目标是将资源管理与作业调度/监控的功能分离,从而让Hadoop能够支持更多种类的计算框架,而不仅仅是MapReduce。
2025-04-18 15:03:33
250
原创 hadoop的三大结构及各自的作用
通过ResourceManager的高可用性配置,可以避免单点故障,保证集群的稳定运行。:是YARN的从节点,运行在每个节点上,负责管理单个节点上的资源(如CPU、内存等),并接收ResourceManager的指令来启动或停止应用程序的容器(Container)。:是每个应用程序的管理组件,负责协调应用程序的运行,向ResourceManager申请资源,并与NodeManager通信以启动和管理应用程序的容器。:是HDFS的主节点,负责管理文件系统的元数据(如文件和目录的结构、文件块的存储位置等)。
2025-04-18 15:01:14
676
原创 mapreduce的工作原理
Map函数的逻辑由用户定义,它会读取输入的键值对,对数据进行处理,然后产生中间结果。例如,在一个单词统计的例子中,输入的键值对可能是(文件偏移量,一行文本),Map函数会将这行文本拆分成单词,然后输出中间结果(单词,1),表示每个单词出现了一次。例如,在单词统计的例子中,Reduce任务的输入可能是(单词,[1, 1, 1, 1]),表示这个单词在Map任务中出现了4次。例如,在单词统计的例子中,Reduce函数会对值列表中的数字进行累加,输出(单词,4),表示这个单词总共出现了4次。
2025-03-31 19:37:54
393
原创 HADOOP集群的常用命令
刷新资源调度器配置 如果修改了资源配置文件,则需要通知 ResourceManager 更新这些更改。其中 <namenode-host> 是实际部署 NameNode 的主机名或 IP 地址。该命令返回的信息包括每个应用程序的 ID、名称、用户、队列以及其他元数据2。这将安全地关闭所有的 DataNode 和 NameNode 进程。此命令会初始化并启动分布式文件系统的各个组件1。这条指令重新加载队列定义而不必重启整个集群。启动和停止 HDFS 服务。YARN 常用管理命令。查看 HDFS 状态。
2025-03-31 19:27:26
255
原创 vi常见操作命令
3.Home键可以快速定位到首位,end键可以快速定位到行尾。yy(两个小y)复制光标所在行的内容。1.dd用来删除光标所在当前行的内容。命令行模式,插入模式,底线命令模式。1.p(小写)在当前行的下一行粘贴。2.P(大写)在当前行的上一行粘贴。4.按下G键可以跳到文件最后一行。2.ndd用来删除当前行往下n行。shift+zz快速保存并退出。nyy复制当前行往下n行内容。Esc退出模式,进入命令模式。5.按下gg跳到文件的第一行。格式:vi /路径/文件名。i,a,o进入编辑模式。输入:wq退出并保存。
2025-03-03 19:44:30
181
原创 虚拟机配置IP
linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。注意:这里的第三个部分的10并不是固定的,我们自己可以约定,但是约定之后就要固定下来。让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。配置Windows本地虚拟网卡,让本机也可以访问虚拟机。具体设置为:进入虚拟机,修改对应的IP。(3)设置虚拟机的IP。
2025-03-03 19:30:58
260
原创 linux基础命令
rm 文件名.txt。会·给一个提示,让用户确认(输入yes)之后再删除。rm -f 文件名.txt这条命令是无需用户确认。rm -r dir (谨慎使用)touch 文件名.txt。cd 文件名 进入这个文件。ls -l 查询隐藏文件。cd .. 返回上一级。2、ls 查询所在目录的文件。1、cd / 进入根目录。
2025-02-21 16:03:26
117
原创 Scala测试
throw new IllegalArgumentException("列表不能为空")// 定义一个函数, 用来求List元素中的最大值。
2024-12-12 09:22:07
754
原创 Scala测试2
writer.println(s"姓名:${s.name}, 名次:${s.mingci},语文: ${s.yuwen}, 数学: ${s.shuxue}, 英语: ${s.yingyu}, java: ${s.java}, 总分:${s.zongfen}, 平均分:${s.pinjunfen}")writer.println(s"姓名:${s.name}, 语文: ${s.yuwen},总分:${s.zongfen}")// (1) 如果当前的分数不等于预设分数,则名次 +1, 更新预设分数。
2024-12-11 20:52:27
325
原创 Scala根据身份证前两位数判断地区
case _ => println("什么玩意,不到")case "42" => println("湖北")case "33" => println("折江")case "11" => println("北京")case "31" => println("上海")println("未知", province)println("湖北")println("北京")println("浙江")println("上海")// 取出id前两位。
2024-12-11 20:51:18
341
原创 Scala隐式转换
/ 特点:1.自动北调用 2.函数名字不重要 3.重要的是:参数类型和返回类型!//隐式转换:编译器自动滴,把数据类型从A->B。// 把Int类型,转成Double类型。// 隐式函数:implicit修饰的函数。// 重要的是:参数类型和返回类型!// implicit 隐式转换。//有可能成功,也可能会失败。// 函数名字不重要。
2024-12-11 20:44:27
1056
原创 Scala隐式值
def sayName(implicit name: String = "小花"): Unit = {// 2. 需要修改这个默认值时,定义一个同类型的 隐式值:implicit修饰变量。implicit val defaultValue:String = "小明"// 1. 定义函数的默认参数时,添加implicit。println(s"我叫:$name")// 需求:更改函数的默认值,不要写死。sayName("非洲酋长")// 函数的默认参数值:小花。// 函数的默认参数。
2024-12-11 20:43:15
354
原创 Scala测试
/ 需求:给字符串补充一个功能isPhone,判断它是不是一个手机号。// 私有作用域内的隐式转换,限制其使用范围,使其更符合局部使用场景。println(s"$str 的检查结果是:$rs")println(s"$str 的检查结果是:$rs")// 通过隐式转换调用isPhone方法进行判断。// 私有类,外部无法直接访问其构造函数等细节。
2024-12-11 20:40:55
421
原创 Scala隐式类
/第二步:定义一个隐式转换函数,把BaseUser ---> PowerUser。//第一步:定义一个有updateUser功能的类PowerUser。u1.updateUser()//添加一个新功能。//之前的类,不要改动。//给这个类添加新的功能。
2024-12-11 20:37:14
483
原创 Scala泛型
/ getMiddleEle(list(1,2,3,4,5)) ==> 5/2 = 2 ==> 下标为2的元素是:3。// getMiddleEle(list(1,2,3,4)) ==> 4/2 = 2 ==> 下标为2的元素是:3。// List是数据类型,表示一个列表。//List[Int]:List是列表,[Int] 是说列表中的每一个元素都是int!// (2) 名称合法就行,没有固定的。//类型参数 -----泛型(数据类型是变化的)// 中间位置的下标 = 长度/2。
2024-12-11 20:35:47
245
原创 Scala正则表达式
/ 11.\w:[a-zA-Z0-9_] 63个字符串中的任意一个."一个字"// 6.拖字符^如果在正则的最前面,表示要匹配的内容必须在字符串的开头。// 7.拖字符$如果在正则的最后面,表示要匹配的内容必须在字符串的结尾。// 2.[a-z]:表示从a到z的26个字母中的任意一个。// 3.[A-Z]:表示从A到Z的26个字母中的任意一个。// 4.[0-9]:表示从A到Z的26个字母中的任意一个。// 8.英文的 . :表示除了换行之外的其他的任意字符。// 10.\D:表示除\d 之外的字符。
2024-12-03 16:00:25
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人