- 博客(67)
- 收藏
- 关注
原创 在Spark-shell中写代码
RDD(Resilient Distributed Dataset,弹性分布式数据集)是 Spark 的核心数据结构,用于表示分布式数据集合。DataFrame 是一个分布式的数据表,类似于传统数据库中的表或 Pandas 中的 DataFrame。:对 RDD 中的每个元素应用一个函数,返回一个新的 RDD。:过滤 RDD 中满足特定条件的元素,返回一个新的 RDD。启动后,你将进入一个交互式的环境,可以开始编写和执行代码。:将 RDD 中的所有元素收集到驱动程序中,返回一个数组。
2025-05-14 09:58:56
383
原创 自定义分区器案例
在实际应用中,数据的分布可能并不均匀,或者某些特定的键值对需要更精细的控制。例如,你可能希望将某些特定的键值对分配到特定的分区,或者根据业务逻辑对数据进行分组。这种情况下,内置的分区器可能无法满足需求,而自定义分区器可以提供更大的灵活性。自定义分区器需要继承类,并实现必要的方法。case _ =>false自定义分区器可以通过方法应用于键值对 RDD(PairRDD)。// 创建一个键值对 RDD// 创建自定义分区器// 使用自定义分区器对 RDD 进行分区// 打印每个分区的内容。
2025-05-14 09:54:07
364
原创 Spark SQL使用
Spark SQL 是 Spark 的一个模块,用于处理结构化和半结构化数据。它支持多种数据源,如 Hive 表、JSON 文件、Parquet 文件等,并允许用户使用标准的 SQL 语法进行数据查询和分析。Spark SQL 的核心概念包括 DataFrame 和 Dataset,它们提供了丰富的 API,使得数据处理更加简单和高效。
2025-05-14 09:47:59
356
原创 RDD-分区和分区器
分区是 RDD 的一个关键特性,它将数据分割成多个块(Partition),并分布在集群的多个节点上。每个分区是一个独立的数据块,可以被分配到不同的节点上进行并行处理。分区的数量和大小可以根据数据的大小和集群的资源进行调整,以优化并行计算的性能。分区器是一个用于控制 RDD 分区方式的组件。分区器定义了如何将 RDD 中的数据分配到不同的分区中。Spark 提供了几种内置的分区器,用户也可以自定义分区器。
2025-05-14 09:42:42
570
原创 案例:写一个spark程序,统计input目录下所有文本文件中单词的词频
/写一个spark程序,统计input目录下所有文本文件中单词的词频。//写一个spark程序,统计input目录下所有文本文件中单词的词频。// 创建 SparkContext 对象。// 创建 SparkContext 对象。// 将所有分区的数据合并成一个分区。// 停止 SparkContext。// 将所有分区的数据合并成一个分区。// 停止 SparkContext。// 配置 Spark 应用程序。// 读取目录下的所有文本文件。// 读取目录下的所有文本文件。// 保存结果到文件。
2025-05-14 09:29:25
718
原创 yarn的三大组件及其作用
例如,MapReduce 作业的 ApplicationMaster 会根据任务的进度,申请更多的资源来运行更多的任务。任务在 NodeManager 上运行,ApplicationMaster 监控任务的运行状态,处理任务的失败和重试。ResourceManager 通过与 NodeManager 的通信,获取每个节点的资源状态,并维护一个全局的资源视图。NodeManager 与 ApplicationMaster 通信,接收任务的启动和停止指令,并确保任务在节点上正常运行。
2025-05-14 09:24:30
395
原创 yarn的三个资源调度
Capacity Scheduler 是 YARN 默认的调度策略,它通过将集群资源划分为多个队列(Queue),并为每个队列分配一定的资源容量,从而实现资源的共享和隔离。支持多池(Pool):可以将作业分组到不同的池(Pool),每个池可以设置不同的资源权重,从而实现更细粒度的资源管理。动态资源分配:根据作业的运行时间和资源需求,动态调整资源分配,确保所有作业都能获得公平的资源份额。弹性资源分配:在资源允许的情况下,队列可以借用其他队列的空闲资源,提高了资源利用率。
2025-05-14 09:21:23
540
原创 Spark论述其作用
Spark 提供了简洁的 API,支持多种编程语言(如 Scala、Java、Python 和 R),使得开发人员能够快速上手并高效地编写数据处理程序。Spark 拥有一个强大的生态系统,包括 Spark SQL(用于 SQL 查询)、Spark Streaming(用于实时数据处理)、MLlib(用于机器学习)和 GraphX(用于图计算)。Spark SQL 提供了对分布式数据集的 SQL 查询能力,支持标准的 SQL 语法和丰富的数据源(如 HDFS、Hive、JSON、Parquet 等)。
2025-05-14 09:14:41
409
原创 转换算子和行动算子的区别
转换算子是对 RDD 进行操作并返回一个新的 RDD 的方法。这些操作是惰性的(Lazy),即它们不会立即执行,而是记录下操作的逻辑,等待行动算子触发实际的计算。行动算子是对 RDD 进行计算并返回结果或写入外部存储系统的操作。行动算子会触发实际的计算,因为它们需要返回结果或写入数据。
2025-05-14 09:09:18
745
原创 spark和Hadoop之间的对比和联系
Spark 本身也提供了丰富的工具和框架,如 Spark SQL、Spark Streaming、MLlib、GraphX 等,用于支持不同类型的数据处理和分析任务。在实际应用中,Spark 和 Hadoop 往往结合使用,利用 Hadoop 的存储能力和 Spark 的计算性能,构建高效的大数据处理平台。HDFS 提供了高可靠性和高吞吐量的存储,适合大规模数据的存储。Spark 作为 Hadoop 生态系统的一部分,可以与这些工具无缝集成,实现数据的导入、存储、处理和分析。
2025-05-14 09:03:52
622
原创 什么是RDD
如果某个 RDD 的分区丢失,Spark 可以通过重新执行这些转换操作来恢复数据,而不需要依赖于数据的冗余存储。这种容错机制是通过记录数据的转换操作(Transformation)来实现的,而不是通过数据本身的冗余存储。RDD 的数据被分割成多个分区(Partition),每个分区是一个独立的数据块,可以被分配到集群的不同节点上。分区的数量和大小可以根据数据的大小和集群的资源进行调整,以优化并行计算的性能。这种容错机制是通过记录数据的转换操作(血统机制)来实现的,而不是通过数据的冗余存储。
2025-05-14 08:59:32
841
原创 spark缓存--cache和persist
println("第二次计算消耗的时间:" + (endTime1 - startTime1) + "毫秒")println("第一次计算消耗的时间:"+(endTime-startTime)+"毫秒")//persist()方法可以指定缓存的级别。//第一次出发行动算子,计算并统计消耗的时间。//第二次出发行动算子,计算并统计消耗的时间。// cache是persist的特殊情况。//创建一个包含大量随机数的RDD。//定义一个复杂的转换函数。//spark的缓存。
2025-05-14 08:47:38
635
原创 RDD案例--数据清洗
/ 判断是不是数字,是,就保存记录 "45","abc"(正则表达式\d+)age.matches("\\d+")//返回值是一个boolean。//3.把过滤之后的内容,保存到文件 saveAsTextFile()//1.读取数据.读入文本文件 sc.textFile()// 拆分出年龄 split(",")(1)//将所有的分区的数据合并成一个分区。//判断是不是数字-----//2.对于文件中的每一行。//过滤之后的rdd。
2025-05-09 15:45:49
214
原创 RDD行动算子案例
/1.collect :把分布在集群中各个节点上的RDD元素收集,以数组的形式返回。rdd.foreach(x=> println("元素:"+x))//2.count:返回RDD中元素的个数。//学习spark RDD中的行动算子。//4.forEach:循环遍历。//3.reduce:聚合汇总。//打印hello world。//计算rdd中的元素之和。
2025-05-09 15:17:26
198
原创 RDD转换算子案例
/4.reduceByKey:键值对的数据 (world,1),(hello,1)//3.flatMap:flat (扁平化) + map (映射)//有多个句子,每个句子有多个单词,单词之间使用空格隔开。//目标,把所有的单词找出来,放一个数组中。//学习spark RDD中的转换算子。//使用filter算子,保留偶数。//collect() 行动算子。//打印hello world。//2.filter:过滤。
2025-05-09 15:15:58
315
原创 如何在idea中写spark程序
在 IntelliJ IDEA 中,您需要通过 Maven 或 SBT 添加 Spark 的依赖。如果您计划使用 Scala 编写 Spark 程序,需要安装 Scala。IntelliJ IDEA 提供了强大的调试功能,可以帮助您快速定位和解决问题。在调试过程中,您可以查看变量的值,逐步执行代码,以便更好地理解程序的运行逻辑。以下是一个简单的 Spark 程序示例,用于计算一个文本文件中单词的出现次数。当您完成开发后,可以将项目打包并部署到 Spark 集群。在项目中创建一个新的 Scala 类,例如。
2025-04-28 19:52:48
1093
原创 如何搭建spark yarn模式的集合集群
从 Apache Spark 官方网站下载适合您 Hadoop 版本的 Spark 安装包。例如,如果您使用的是 Hadoop 3.2,可以下载。:已经搭建并运行的 Hadoop 集群,包括 HDFS 和 YARN。将下载的 Spark 安装包解压到指定目录,并创建符号链接以便管理。:推荐使用 CentOS、Ubuntu 等 Linux 发行版。在 YARN 的 Web UI 页面(通常是。:确保安装了 JDK 1.8 或更高版本。编辑 Hadoop 的。)中查看作业的运行情况。
2025-04-28 19:42:31
841
原创 hadoop和Yarn的基本介绍
**资源管理** :YARN负责监控集群中各个节点的资源使用情况,并根据用户的资源申请请求,动态地分配和回收资源。YARN(Yet Another Resource Negotiator)的三大核心组件是 **ResourceManager(RM)**、**NodeManager(NM)** 和 **ApplicationMaster(AM)**。最常见的三种资源调度策略是 **FIFO Scheduler**、**Capacity Scheduler** 和 **Fair Scheduler**。
2025-04-18 15:09:47
587
原创 流量统计案例代码
接着点开log.txt文件,把数据填入,内容可以用豆包或者Kimi搜索出来,必须是三个属性:手机号,上行流量,下行流量,用空格隔开。首先,先得在maven_2023下建一个目录data,在data下建一个log.txt文件。然后,创建如图下的f目录和目录下Java类。//4.FlowReducer.java代码。//2.FlowDriver.java代码。//3.FlowMapper.java代码。//1.FlowBean.java代码。
2025-04-16 11:15:54
221
原创 Hadoop的序列化和反序列化
/readFields:反序列化的时候,调用,从文件中读出内容,还原这个对象。//dataOutput.writeUTF(字段);// //hadoop序列化:把对象保存到第一个文件中。//hadoop反序列化:从第一个文件中读取对象。//write:在序列化的时候,调用,把对象写到文件。//字段=dataInput.read();//字段顺序要与write中的顺序一致。//实例化student对象。//支持hadoop的序列化。//2.补充一个空参构造。//学生类,姓名,年龄。
2025-04-09 11:27:58
430
原创 序列化和反序列化--java实现
/ Student student = new Student("张三", 18);//Java反序列化:从文件student_java.ser中读出内容,还原这个对象。// //1.让这个类实现Serializable接口。// //java序列化:把对象保存到第一个文件中。//实例化student对象。// //2.创建一个输出流。// //3.把对象写入到文件中。//// 关闭。//学生类,姓名,年龄。
2025-04-09 11:00:26
140
原创 简单的数据清洗
/ // output1会自动被创建,如果它已经存在,程序会报错!// // 6. 设置输入和输出路径。// 3. 关联Mapper和Reducer。// 4. 设置Mapper输出的KV类型。//设置操作集群时的用户名为root。// 5. 设置最终输出KV类型。// mapreduce的Driver。// 2. 关联本地的jar。// 7. 提交job。//1.继承Mapper类。//2.重写map方法。
2025-04-09 10:57:43
388
原创 自定义分区器
/Text,LongWritable:表示map函数输出的数据的格式。// // output1会自动被创建,如果它已经存在,程序会报错!// // 6. 设置输入和输出路径。// 如果key1和Key2的code相同,那么他们会被分配到同一个分区,保存到同一个文件。// 如果单词是以a~m开头的,那么会被分配到第一个分区,//2.遍历单词,并输出<单词,1>的键值对。//1.获取一行数据,并拆分成一个个的单词。
2025-04-09 10:55:00
263
原创 Mapreduce的工作原理
Reduce Task 接收到所有 Map Task 的输出后,会按照键(key)对数据进行排序和分组,然后调用 Reduce 函数对每个键对应的值集合进行处理。Shuffle 是 MapReduce 中的关键步骤,负责将 Map Task 的输出数据传输到 Reduce Task。Map 端:Map Task 将输出数据写入磁盘文件,每个分区的数据会被标记为不同的 Reduce Task。Reduce 端:Reduce Task 会从各个 Map Task 拉取属于自己的分区数据,并进行合并。
2025-03-31 19:52:15
341
原创 Hadoop集群的常用命令
检查 HDFS 健康状况:`hadoop fsck <路径> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]`删除文件或目录:`hdfs dfs -rm <路径>` 或 `hdfs dfs -rm -r <目录路径>`(递归删除)运行 MapReduce 作业:`hadoop jar <jar文件> <主类名> <输入路径> <输出路径>`复制文件:`hdfs dfs -cp <源路径> <目标路径>`
2025-03-31 19:48:39
311
原创 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:37:03
185
原创 linux常见操作命令
cd /xxx/xx/x //可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全。ls -a //查看当前目录下的所有目录和文件(包括隐藏的文件)mkdir /bin/tools //在指定目录下创建一个名为tools的目录。ls /bin //查看指定目录下的所有目录和文件。cd /bin //切换到根目录下的bin目录。
2025-03-03 19:34:37
361
原创 虚拟机IP的配置,让它上网
linux中,ip地址是写在配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)中,这里使用 vi 编辑器去修改即可!选择VMnet8,IP地址:192.168.10.0,子网掩码:255.255.255.0。然后,点击NAT设置,进入填网关:192.168.10.2。将这个虚拟机的网络设置重启,让它生效。首先打开虚拟机,点击上面的虚拟网络编辑器。具体设置为:进入虚拟机,修改对应的IP。(3)设置虚拟机的IP。检查是否能Ping通外网。
2025-03-03 19:28:04
495
原创 虚拟机安装
如果安装VMware17.6时,提示缺少文件,再来安装它,否则不用。7.再次打开虚拟机,进去之后就会碰到localhost login:填用户或者root,接着回车,下面是密码,输入时不会显示,输完点回车,第一次登录成功不会显示时间,后面登录成功后会显示登录时间。3.打开虚拟机,点击新建新的虚拟机,选择自定义,一直下一步,遇到安装程序光盘印像可以选择稍后安装,操作系统选择Linux,版本CentOS 7 64位,虚拟机名字自定义,后面点下一步,直接安装。4.如果没有安装操作系统,虚拟机启动不了。
2025-02-19 11:28:46
171
原创 Scala的导入
/格式:import 包名.{旧名字=>新名字}//(1) 创建包:在src上右键,新建软件包。//(3)在包上右键,创建类。import 包名.类名。// //局部导入。//把导入的成员重新改个名字。//(2)填写包名:小写。//导入所有,排除一部分。//导入包下的所有的类。
2024-12-12 08:04:52
578
原创 Scala中隐式值、隐式转换和例题
/ 2.需要修改这个默认值时,定义一个同类型的隐式值:implicit 修饰变量。//定义一个特殊的转换函数,把str===>StrongString的对象。//需求:更改函数参数的默认值(不传入这个值的时候,用到的值),不要写死。// println(s"$str 的检查结果是:$rs")// //把Int类型,转换成Double类型。//隐式函数:implicit修饰的函数。//重要的是:参数类型和返回值类型!//implicit 隐式转换。// //隐式转换失败。
2024-12-12 08:04:32
722
原创 Scala的数组
/ // 如果下标超出了范围,会报错 ArrayIndexOutOfBoundsException。// //1-10是数组,每隔2个 range不包括终点,2是步长。// //2.访问.数组名(下标)。//indexOf(元素): //找到元素的下标。// //不可变数组Array。// //3.快速填充数组内容。//有,就返回第一次出现的下标。// //1.创建不可变数组。//找到大于100的元素。// //4.遍历。
2024-12-12 08:02:32
426
原创 Scala中正则表达式
/ 6.脱字符 ^ 如果在正则的最前面,表示,要匹配的内容必须在字符串的开头。// 7.脱字符 $ 如果在正则的最后边,表示,要匹配的内容必须在字符串的结尾。// 2. [a-z]:表示从a到z的26个字母中任意的一个。// 3. [A-Z]:表示从A到Z的26个字母中任意的一个。// 8.英文的 . :表示除了换行之外的其他的任意一个字符。// 4. [0-9]:表示从1到9的10个中任意的一个。// val name2 = "abc" //不符合。
2024-12-12 08:02:05
668
原创 Scala中函数默认参数和隐式类、对象
/第二步:定义一个隐式转换函数,把BaseUser ---> PowerUser。//第一步:定义一个有updateUser功能的类PowerUser。// println("偷偷调用implicit")sayName() //输出结果:小花。// implicit val x:String="小美"//隐式类:implicit class == 隐式转换函数+类。u1.updateUser()//添加一个新的功能。sayName("小小") //输出结果:小小。
2024-12-12 08:01:54
544
原创 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[Int]:List是列表,[Int]是说列表中的每一个元素都是int!//(2)名称合法就行,没有固定的。//类型参数化 -------泛型(数据类型是变化的)// 用它来获取当前的列表的中间位置上的值。// 中间位置的下标=长度/2。
2024-12-12 07:57:23
372
原创 Scala模式匹配-基础使用
/ case _ => println("我不知道啊!// case "42" => println("湖北")// case "33" => println("浙江")// case "11" => println("北京")// case "31" => println("上海")// case"条件1"=>println("名称1")// case"条件2"=>println("名称2")// case"条件3"=>println("名称3")
2024-12-03 16:10:33
469
原创 Scala中条件守卫
/ case Array(1,x,y)=>println(s"三个元素,且第一个为1,第二个是${x},第三个是${y}")// case _: Int => println(s"$x 是Int类型的") //_:Int 表示变量是Int类型。// case Teacher(a,b)=>println(s"${b}老师${a}")// case Stu(a)=>println(s"学生${a}")// val t1=Teacher("小明","体育")
2024-12-03 16:04:40
416
原创 Scala中读取文件
writer.println(s"${b._1}次数是:${b._2}")val rs=content.split("\\W+")//正则表达式。val word=w.toLowerCase()//全小写。//Map不能直接排序,需要转成有序的集合。//W:表示非字符(,空格,?//4.根据出现的次数从高到低排序。//2.拆分字符串-->单词数组。//5.保存结果,涉及写入文件。//3.统计出现的频率。//W+:多个非字符。
2024-12-03 14:12:22
213
原创 Scala练习
writer.println(s"姓名:${s.name},语文:${s.yuwen},数学:${s.shuxue},英语:${s.yingyu},总分:${s.zongfen},平均分:${s.pinjunfen},名次为:${s.mingci}")writer.println(s"姓名:${s.name},数学:${s.shuxue},总分:${s.zongfen}")writer.println(s"姓名:${s.name},语文:${s.yuwen},总分:${s.zongfen}")
2024-12-03 14:12:00
427
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人