- 博客(37)
- 收藏
- 关注
原创 Study 3.8 Spark RDD典型案例
使用Spark RDD的groupByKey()算子可以对(key, value)形式的RDD按照key进行分组,key相同的元素的value将聚合到一起,形成(key, value-list),将value-list中的元素降序排列取前N个即可。执行命令:val rdd2 = rdd1.map(score => (score._1, score._2, (score._2 / 3.0).formatted("%.2f")))执行命令:val rdd1 = rdd.reduceByKey(_ + _)
2023-05-18 10:30:06
407
5
原创 Study 3.7 Spark任务调度
而对宽依赖来说,由于有Shuffle存在,所以只能在父RDD处理完成后,下一个Stage才能开始接下来的计算,因此宽依赖是划分Stage的依据,当RDD进行转换操作,遇到宽依赖类型的转换操作时,就划为一个Stage。上图中的依赖关系一共可以划分为两个Stage:从后向前进行递归划分,RDD3到RDD4的转换是Shuffle操作,因此在RDD3与RDD4之间划开,继续向前查找,RDD1、RDD2、RDD3之间的关系为窄依赖,因此为一个Stage;Stage的划分依据为是否有宽依赖,即是否有Shuffle。
2023-05-18 09:34:59
244
原创 Study 3.6 RDD容错机制
Spark建议,在将RDD标记为检查点之前,最好将RDD持久化到内存,因为Spark会单独启动一个任务将标记为检查点的RDD的数据写入文件系统,如果RDD的数据已经持久化到了内存,将直接从内存中读取数据,然后进行写入,提高数据写入效率,否则需要重复计算一遍RDD的数据。cache()或者persist()是将数据存储于机器本地的内存或磁盘,当机器发生故障时无法进行数据恢复,而检查点是将RDD数据存储于外部的共享文件系统(例如HDFS),共享文件系统的副本机制保证了数据的可靠性。因此,广播变量是只读的。
2023-05-18 09:26:13
395
原创 Study 3.5 RDD持久化机制
Spark会自动监视每个节点上的缓存使用情况,并以最近最少使用的方式从缓存中删除旧的分区数据。从上述代码可以看出,cache()方法调用了无参的persist()方法,两者的默认存储级别都为MEMORY_ONLY,但cache()方法不可更改存储级别,而persist()方法可以通过参数自定义存储级别。Spark中重要的功能之一是可以将某个RDD中的数据保存到内存或者磁盘中,每次需要对这个RDD进行算子操作时,可以直接从内存或磁盘中取出该RDD的持久化数据,而不需要从头计算才能得到这个RDD。
2023-05-18 09:13:59
183
原创 Study 3.4 理解RDD依赖
一个父RDD的一个分区不可能对应一个子RDD的多个分区。对一个RDD进行reduceByKey()操作,RDD中相同key的所有记录将进行聚合,而key相同的所有记录可能不在同一个分区中,甚至不在同一个节点上,但是该操作必须将这些记录聚集到一起进行计算才能保证结果准确,因此reduceByKey()操作会产生Shuffle,也会产生宽依赖。在Spark中,对RDD的每一次转化操作都会生成一个新的RDD,由于RDD的懒加载特性,新的RDD会依赖原有RDD,因此RDD之间存在类似流水线的前后依赖关系。
2023-05-18 09:04:25
98
原创 Study 3.3 掌握RDD分区
在分布式程序中,网络通信的开销是很大的,因此控制数据分布以获得最少的网络传输可以极大的提升程序的整体性能,Spark程序可以通过控制RDD分区方式来减少通信开销。textFile()方法通常用于读取HDFS中的文本文件,使用该方法创建RDD时,Spark会对文件进行分片操作(类似于MapReduce的分片,实际上调用的是MapReduce的分片接口),分片操作完成后,每个分区将存储一个分片的数据,因此分区的数量等于分片的数量。RDD各个分区中的数据可以并行计算,因此分区的数量决定了并行计算的粒度。
2023-05-18 09:00:59
117
原创 Study 3.2 掌握RDD算子
例如,rdd1的元素以(k,v)表示,rdd2的元素以(k, w)表示,进行左外连接时将以rdd1为基准,rdd2中的k与rdd1的k相同的元素将连接到一起,生成的结果形式为(k, (v, Some(w))。报错,(_ * _)经过eta-expansion变成普通函数,不是我们预期的x => x * x,而是(x$1, x$2) => (x$1 * x$2),不是一元函数,而是二元函数,系统立马就蒙逼了,不晓得该怎么取两个参数来进行乘法运算。转换算子负责对RDD中的数据进行计算并转换为新的RDD。
2023-05-16 11:46:34
139
原创 Study 3.1 掌握RDD的创建
将数据集(hello, world, scala, spark, love, spark, happy)存储在三个节点上,节点一存储(hello, world),节点二存储(scala, spark, love),节点三存储(spark, happy),这样对三个节点的数据可以并行计算,并且三个节点的数据共同组成了一个RDD。在编程时,可以把RDD看作是一个数据操作的基本单位,而不必关心数据的分布式特性,Spark会自动将RDD的数据分发到集群的各个节点。不同的是,数据的来源路径不同。
2023-05-15 09:32:05
158
原创 Study 2.4 IDEA开发词频统计项目
执行命令:spark-submit --master spark://master:7077 --deploy-mode cluster --class net.huawei.rdd.WordCount --driver-memory 512m --executor-memory 1g --executor-cores 2 hdfs://master:9000/park/SparkRDDWordCount.jar。hdfs://master:9000/wc/output:统计结果的输出路径。
2023-05-15 09:15:34
316
原创 Study 2.3 Spark运行架构与原理
Spark有多种运行模式,可以运行在一台机器上,称为本地(单机)模式,也可以以YARN或Mesos作为底层资源调度系统以分布式的方式在集群中运行,称为Spark On YARN模式,还可以使用Spark自带的资源调度系统,称为Spark Standalone模式。Driver进程向Cluster Manager申请资源,Cluster Manager接收到Application的注册请求后,会使用自己的资源调度算法,在Spark集群的Worker节点上,通知Worker为应用启动多个Executor。
2023-05-15 08:24:06
95
原创 Study2.2 搭建Spark开发环境
一、Spark开发环境准备工作由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。安装Spark集群前,需要安装Hadoop环境二、了解Spark的部署模式(一)Standalone模式Standalone模式被称为集群单机模式。
2023-04-24 09:47:16
114
原创 Study1.8 掌握Scala函数
如果在函数定义时,如果用到了上下文中的变量,则函数的具体执行将会和该变量的值具有了相关性,即这个函数包含了外部该变量的引用,这个过程称之为函数的闭包。甚至在一些极端情况下,变量所在的环境已经被释放,但是由于函数中包含对它的引用,变量依然会存在,阻止了对象的释放,造成内存泄露的问题。函数体中return关键字往往可以省略掉,一旦省略掉,函数将会返回整个函数体中最后一行表达式的值,这也要求整个函数体的最后一行必须是正确类型的值的表达式。注意,Java是不允许函数嵌套的,但是Scala是允许的。
2023-04-24 09:17:48
85
原创 Study 1.7 掌握Scala类、对象、抽象类与特质
Scala中没有static关键字,当然也就没有静态方法或静态字段,但是可以使用关键字object定义一个单例对象,单例对象中的方法相当于Java中的静态方法,可以直接使用“单例对象名.方法名”方式进行调用。说明:实例化Dog时,传入的参数是""与0,但是会执行类里的两个给成员变量赋值的语句,于是name成了瑞瑞,age成了5,于是调用对象的speak()方法,会输出我叫瑞瑞,今年5岁了~。抽象类中可以定义抽象字段(没有初始化的字段)和抽象方法(没有被实现的方法),也可以定义被初始化的字段和被实现的方法。
2023-04-17 09:25:43
328
原创 Study 1.6 掌握Scala数据结构
ArrayBuffer的API文档:https://www.scala-lang.org/api/current/scala/collection/mutable/ArrayBuffer.html。ListBuffer的API文档:https://www.scala-lang.org/api/current/scala/collection/mutable/ListBuffer.html。注意:在创建集合时,4.5是第二个元素,但是创建完之后的集合里,4.5成为了最后一个元素,这正好说明了集合的无序性。
2023-04-14 11:22:25
160
原创 Study 1.5 掌握Scala内建控制结构
注意不会是finally的返回值,finally即使有返回值,也会被抛弃,这点和Java是不同的。for循环语句本身的返回值是Unit类型,无论在循环体中返回什么都是无效的,最终得到的都是Unit的值,但是可以在循环中的循环条件和循环体之间加上yield关键字,那么就可以将循环体产生的返回值组成数组进行返回。我们把mx()方法里的抛出异常的语句注释掉,此时程序正常运行,但是test()方法的返回值不会是恭喜,程序运行正常~,还是会被finally语句块的返回值覆盖,成为无论如何,程序结束~
2023-03-23 09:36:45
124
原创 Study 1.4 掌握Scala运算符
例如:3 + 2 * 5,我们期望获得的是13,但是根据Scala特点,Scala中所有运算符其实就是方法,那么按照这种说法,表达式应该等同于(3).+(2) 得到5,(5).*(5) 得到25,与我们的预期不符!靠的是运算符优先级。如果运算符以=结尾,且运算符并非比较运算符 =、==或=,则运算符优先级等同于=,即优先级最低,例如+=、-=等;由于Scala并没有真正的运算符,运算符其实是方法的一种形式,所以此处运算符的优先级,其实就是指方法的优先级。Scala中,如果是基本数据类型,==与!
2023-03-23 08:45:15
78
原创 Study 1.3 使用Scala集成开发环境
在包net.huawei.day01上右击,选择New→Scala Class,选择创建Object,创建一个Scala对象TestHelloWorld,在里面创建主方法,实例化HelloScala,然后调用其speak()方法。在IDEA的欢迎界面中单击Create New Project按钮,在弹出的窗口中选择左侧的Scala项,然后选择右侧的IDEA项,单击Next按钮。Scala类创建成功后,即可编写Scala程序,定义一个没有返回值的speak()方法,用来输出一条信息。我们学习在线安装方式。
2023-03-23 08:34:53
78
原创 Study 1.2 Scala变量与数据类型
定义变量需要初始化,否则会报错。定义变量时可以不指定数据类型,系统会根据初始化值自动推断变量的类型。
2023-03-06 09:27:09
105
原创 Study 1.1 搭建Scala开发环境
本次学习我们准备采用Spark3.3.1,为了后续操作不出现任何匹配方面的问题,建议采用跟Spark版本匹配的Scala。
2023-03-02 09:15:25
108
原创 Hadoop学习总结
对Hadoop认识(1)MR默认采用哈希分区HashPartitioner(2)修改词频统计驱动器类,设置分区数量、打包上传到虚拟机上运行(1)利用Maven打包(2)将jar包上传到虚拟机(3)运行jar包,查看结果(4)降低项目JDK版本,重新打包(5)重新上传jar包到虚拟机(6)运行jar包,查看结果19、创建新词频统计驱动器类20重新打包上传虚拟机并执行21、将三个类合并成一个类完成词频统计22、合并分区导致的多个结果文件23、统计不同单词数。MapReduce就是“ 任务的分解与结果的汇总”
2022-12-20 21:30:46
1016
原创 初探MapReduce
行首数字对于我们做单词统计没有任何用处,只需要拿到每一行内容,按空格拆分成单词,每个单词计数1,因此,WordCoutMapper的输出应该是单词和个数,于是,输出键类型为Text,输出值类型为IntWritable。当引入Reducer组件后,输出结果文件内容就是Reducer的输出key和输出value。Mapper参数说明。第三个泛型和第四个泛型是Reducer的输出key类型和输出value类型。观察输出结果,map阶段会按键排序输出。
2022-12-14 09:57:54
161
原创 使用Java API操作HDFS(二)
接上节创建hadoop.txt能否事先判断文件是否存在呢?我们去查看Hadoop FileSystem API文档查看方法编写create2()方法,事先判断文件是否存在运行程序故意让HDFS进入安全模式(只能读,不能写),看看会出现什么状况?删除已经创建的此时,再运行程序,查看结果,抛出异常下面,修改程序,来处理这个可能会抛出的安全模式异常运行程序,查看结果(虽然我们捕获了安全模式异常,但还是有一点系统抛出的异常信息)再运行程序,查看效果。
2022-12-14 09:38:44
1028
原创 使用Java API操作HDFS
Hadoop整合了众多文件系统,HDFS只是这个文件系统的一个实例。Maven Repository(Maven仓库)-FileSystem对象的一些方法可以对文件进行操作。创建Maven项目 - HDFSDemo。在Hadoop WebUI界面查看。利用HDFS集群WebUI查看。已经存在,此时会提示用户创建失败。注意:导包千万不要导错了。单击【Finish】按钮。目录,在该目录里创建。
2022-11-23 09:37:35
603
原创 HDFS的Shell操作
HDFS会将hadoop-3.3.4.tar.gz分割成6块。可以将HDFS上的文件下载到本地指定位置,并且可以更改文件名。,查看根目录(可以在任何节点上查看,结果都是一样的)
2022-11-23 08:59:11
377
原创 Hadoop集群测试
点开【Utilities - 实用工具】下拉菜单,选择【Browse the file system - 浏览文件系统】(注意:每次运行同一个应用,应用标识会发生变化),查看应用的运行详情。单击【Download】,下载结果文件到本地 打开结果文件。,既可以在WebUI上创建,也可以通过shell命令创建。单击导航条上的【Datanodes】,查看数据节点信息。在Hadoop WebUI界面查看刚才创建的目录。利用HDFS命令查看文件是否上传成功。在HDFS集群UI界面,查看。在HDFS上创建一个目录。
2022-11-18 09:55:33
244
原创 Hadoop集群构建(三)
接上次 jdk安装成功。第一学期我们学习Java,当时我们是在Windows平台上运行Java程序的,我们知道Java是跨平台的,现在我们在Linux平台上编写和运行Java程序。
2022-11-02 18:05:56
764
原创 Hadoop集群构建(二)
查看JDK版本 java-version。再次执行命令:java -version。,将JDK压缩包解压到指定目录。查看上传的JDK压缩包。再进行配置。
2022-10-18 21:31:35
554
原创 Hadoop集群构建(一)
master虚拟机可以通过主机名来ping通slave1虚拟机和slave2虚拟机。查看系统是否开启了SSH服务 查看master虚拟机是否开启了SSH服务。同上,在slave1 slave2上执行相同操作。此时,master虚拟机免密登录master虚拟机。同理,查看slave1 slave2的ssh服务。,添加三个映射(集群有三个虚拟机),连续敲三个回车,生成密钥对。存盘退出(:wq命令)
2022-10-18 21:10:53
492
原创 Linux目录操作
查看两个用户组里的用户情况,用户alice在lzy用户组里,用户mike在luzhou用户组里。查看用户smith的情况,lzy与luzhou两个组里都有smith,正所谓脚踏两只船。,最后创建smith时,也没有设置用户id,那也是自动编号。创建文件的方法很多,比如用vim、touch、echo……,然后创建alice时,没有设置用户id,那就自动编号。的情况,目前该组有两个用户:mike和alice。创建mike用户时,设置了用户id -的用户及用户组 将其用户组改为。,并不会连带删除里面的用户。
2022-10-07 13:01:51
301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人