当前位置: 首页 > news >正文

在sheel中运行Spark

(一RDD基本概念

Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。

先来看看这三个单词的含义:

- Dataset: 一个数据集合,用来存放数据的。之前我们学习的Scala中,Array, Set等也叫数据集。

- Distributed: 分布式存储的,表示数据是存放在不同的机器上的。这就和我们前面学习数据结构就不同了。

- Resilient: 数据可以保存在内存或者磁盘中。

然后,我们在看看它的定义中的一些关键字:

不可变的:immutable。类比理解scala中的不可变集合或者是使用val修饰的变量。

可分区的:集合的数据课划分成为很多部分,每部分称为分区:Partition

并行计算:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。

(二RDD的创建

spark的计算功能是通过RDD来实现的,那么如何去创建RDD呢?有两种创建方式。

1.从集合内存中创建

可以通过将本地集合(如数组、列表等)传递给 SparkContext 的 parallelize 方法来创建 RDD。

    // 创建 SparkConf 和 SparkContextval conf = new SparkConf().setAppName("RDDFromCollection").setMaster("local[*]")val sc = new SparkContext(conf)// 创建一个本地集合val data = Array(1, 2, 3, 4, 5)// 通过 parallelize 方法将本地集合转换为 RDDval distData = sc.parallelize(data, 2) // 第二个参数是分区数

2.从外部存储中创建。例如,读入外部的文件。

// 创建 SparkConf 和 SparkContextval conf = new SparkConf().setAppName("RDDFromHDFS").setMaster("local[*]")val sc = new SparkContext(conf)// 从 HDFS 加载文本文件val hdfsRDD = sc.textFile("hdfs://namenode:8020/path/to/your/file.txt")
// 获取并打印分区数val partitionCount = hdfsRDD.getNumPartitions
println(s"The number of partitions is: $partitionCount")

 可以通过getNumPartitions来获取分区的数量。

(三SparkConf 和 SparkContext

  SparkConf :类用于配置 Spark 应用程序的各种参数。通过 SparkConf 类,你可以设置应用程序的名称、运行模式(如本地模式、集群模式)、资源分配(如内存、CPU 核心数)等。

  主要作用配置应用程序参数:可以设置 Spark 应用程序的各种属性,如应用程序名称、主节点地址等。

  管理配置信息:将配置信息封装在一个对象中,方便在应用程序中传递和使用。

  SparkContext :是 Spark 应用程序的入口点,它代表了与 Spark 集群的连接。通过 SparkContext,你可以创建 RDD(弹性分布式数据集)、累加器、广播变量等,还可以与外部数据源进行交互。

(四在shell中运行RDD程序

  案例:启动hdfs集群,打开hadoop100:9870,在wcinput目录下上传一个包含很多个单词的文本文件。

  启动之后在spark-shell中写代码。

    // 读取文件,得到RDDval rdd1 = sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt")// 将单词进行切割,得到一个存储全部单词的RDDval rdd2= fileRDD.flatMap(line => line.split(" "))// 将单词转换为元组对象,key是单词,value是数字1val rdd3= wordsRDD.map(word => (word, 1))// 将元组的value按照key来分组,对所有的value执行聚合操作(相加)val rdd4= wordsWithOneRDD.reduceByKey((a, b) => a + b)// 收集RDD的数据并打印输出结果rdd4.collect().foreach(println)

  执行过程如下

(五RDD的五大特征

RDD有5个特征,我们分别来介绍。

1.RDD是有分区的。

RDD的分区是RDD数据存储的最小单位。一份数据本质是分隔了多个分区。 如下图示,假如1个RDD有3个分区,RDD内存储了123456,那么数据本质上分散在三个分区内进行存储。

举个生活中的例子:高考的时候,每个班的同学都打散到不同的考场,此时的高3(8)班就是一个抽象的概念,在实际中,这个班级的学生可能分布在5个不同的考场。

2.计算函数会作用于每个分区

RDD的方法会作用在所有的分区上。

3.每个RDD之间是有依赖关系(RDD有血缘关系)

RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。

        4.Key-Value型的RDD可以有分区器

  数据默认分区器:Hash分区规则,可以手动设置一个分区器(rdd.partitionBy的方式来设置)

       5.每一个分区都有一个优先位置列表

  优先位置列表会存储每个Partition的优先位置,对于一个HDFS文件来说,就是每个Partition块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度时,会尽可能地将任务分配到其所要处理数据块的存储位置。

http://www.xdnf.cn/news/299215.html

相关文章:

  • 【quantity】0 README.md文件
  • Linux服务之nginx中高级配置
  • C++笔记-二叉搜索树(包括key,key/value搜索场景等)
  • 一个基于Netty和WebRTC的实时通讯系统
  • 大数据应用开发和项目实战-电商双11美妆数据分析
  • LangChain入门(六)Agent
  • 演讲学习的总结
  • CentOS虚拟机固定ip以及出现的问题
  • 极狐Gitlab 里程碑功能介绍
  • 如何监控Kafka的Lag(消费延迟)?
  • 如何使用 QuickAPI 推动汽车行业数据分享:数据仓库场景下的实践
  • SQL Server 备份加密和解密还原
  • Linux 系统上安装 Firefox 浏览器的完整指南
  • [人机交互]理解用户
  • 简单介绍分布式定时任务XXL-JOB
  • 大数据产品销售数据分析:基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现
  • 数据分析汇报七步法:用结构化思维驱动决策
  • OrangePi Zero 3学习笔记(Android篇)1 - 搭建环境
  • 第三节:Vben Admin 最新 v5.0 对接后端登录接口(下)
  • 【愚公系列】《Manus极简入门》022-艺术创作顾问:“艺术灵感使者”
  • Vue3路由模式为history,使用nginx部署上线后刷新404的问题
  • 【IP101】图像特征提取技术:从传统方法到深度学习的完整指南
  • R 语言科研绘图第 45 期 --- 桑基图-和弦
  • Factorio 异星工厂 [DLC 解锁] [Steam] [Windows SteamOS]
  • JAVA SE(9)——多态
  • Axure疑难杂症:深度理解与认识“事件”“动作”(玩转交互)
  • 数据中台产品功能介绍
  • Rice Science∣武汉大学水稻研究团队发现水稻壁相关激酶OsWAKg16和OsWAKg52同时调控水稻抗病性和产量
  • CSS中的@import指令
  • 深入解析二维矩阵搜索:LeetCode 74与240题的两种高效解法对比