Spark第一天

MapReduce过程复习

Spark由五部分组成

RDD五大特征

1、 Spark  -- 代替MapReduce    <<<<< scala是单机的,spark是分布式的。>>>>>

开源的分布式计算引擎

可以快速做计算 -- 因为可以利用内存来做一些计算

    (1) 分为5个库(模块) :

1、 Spark SQL  

2、 Spark Streaming   -- 流处理

3、 MLlib(maching learning)   -- 机器学习

4、 GraphX(graph)   -- 图计算(人际关系图、网络关系图)

5、 Spark Core   -- 核心   类似MapReduce

-- 5是核心, 1、2、3、4都是基于5做的封装。

(2) 为什么说spark比hadoop快?(但spark不稳定)

    1、hadoop是基于磁盘做迭代的

   spark是将数据放在内存中做迭代的

   

        2、对同一份数据进行多次查询时,hadoop每次都会去磁盘读取数据

   而spark会先将数据放在内存里面,然后再基于内存做查询  

   

   使用内存也会有问题 :

       1、 成本变高

   2、 数据量太大,可能会内存溢出    (内存溢出 :  先出现GC 、 再出现 oom)

   3、 闪存,怕断电

(3) 运行的 4 种模式 :

1、 Local     -- 本地  多用于测试

2、 Standalone   -- 独立集群

3、 Mesos     -- 资源管理框架  和yarn同一种东西,但更多的是使用yarn

4、 YARN      -- 资源管理框架   使用最多

2、 新建 Spark 的 maven项目 :

(1) 在pom文件中 导入3个org.scala-lang依赖, 再导入Java Compiler - Java 编译的插件、 Scala Compiler - Scala 编译的插件,

最后导入Spark核心插件 :   spark core

<dependency>

            <groupId>org.apache.spark</groupId>

            <artifactId>spark-core_2.11</artifactId>

            <version>2.4.5</version>

        </dependency>

(2) 创建Spark环境

// 1、 创建配置对象

val conf = new SparkConf()

// 2、 设置任务名

conf.setAppName("wordCount")

// 3、 指定spark代码运行方式   ---  local : 本地测试

conf.setMaster("local")

// 4、 spark 上下文对象  --- 用于读取数据

val sc = new SparkContext(conf)

(3) 大数据处理引擎步骤 :

1、读取数据

2、处理数据

3、保存结果

(4) RDD: 弹性的分布式数据集

           暂时可以将rdd当成scala中的list使用

           如果是提交到集群运行,会自动切换为读取hdfs数据

   

   // 1、读取数据

   val linesRDD: RDD[String] = sc.textFile("data/words.txt")

运行时出现报错 :   Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

解决方法 :

1、将hadoop-3.1.0安装包解压到电脑C:\soft\hadoop目录

2、将winutils.exe工具粘贴到hadoop-3.1.0\bin目录

3、配置环境变量 :

3.1、 新建 HADOOP_HOME  值: C:\soft\hadoop\hadoop-3.1.0

3.2、 点击path -> 编辑 -> 新建%HADOOP_HOME%\bin

3.3、 一路确认

4、重启IDEA

3、 RDD的五大特性 :

    RDD :  弹性的分布式数据集

RDD里面默认是没有数据的,处理数据时边读数据边处理,是一个持续的过程。

   如果对同一份数据做多次查询,需要将数据缓存到内存,RDD就有数据了。

RDD是在编写代码时的一个抽象的概念, 类似搭建了一个管道,数据会流经RDD。

RDD的引入是为了更方便的写代码。

     spark没有自己的切片规则,使用的是MapReduce的切片规则

RDD五大特性 :

(1) RDD由一组分区(切片)组成              -- 默认一个block块对应一个分区(partition), 分区越多计算的并行度越高

(2) 算子(方法)是作用在每一个分区上的     -- 即每一个分区(切片)对应一个task

(3) RDD之间有一系列的依赖关系              -- 有shuffle : 宽依赖     无shuffle : 窄依赖

       在宽依赖的地方切一刀,前面被称为一个阶段或一个stage,后面也被称为一个阶段; 或者称前面为map端,后面为reduce端

(4) 分区类的算子只能作用于KV格式的RDD上    -- 如 groupBykey、reduceBykey、sortBykey、join

(5) spark为task提供了最佳的计算位置        -- spark会尽量将task发送到数据所在的节点执行(移动计算而不是移动数据)

   读取速度:  从内存中 > 从磁盘中 > 从网络中

   所以Spark尽量将task发送到数据所在的节点执行,避免网络拉取数据,提高效率。

spark运行程序 先将整体的RDD搭建起来,再一起执行。而不是一步一步的执行。

4、 RDD 分区(切片)

分区决定因素 :

    (1) 读取hdfs数据

1) 默认一个block块对应一个分区,切片规则和MR一样。

2) 设置最小分区数据(minPartitions),  RDD的分区数会大于等于(>=)这个值, 具体多少分区需要通过计算得到

   计算原则是保证每一个切片的数据量是差不多的

(2) 窄依赖算子   --   RDD一对一

1) 没有shuffle, 返回的新的RDD的分区数等于前一个RDD的分区数, 不可以修改

2) 如 map、 filter、 flatmap、 mappartition

(3) 宽依赖算子   --   RDD一对多    (会在宽依赖切一刀)

1) 会产生shuffle,  默认也是等于前一个RDD的分区数。  所有的宽依赖算子都可以手动设置分区数

2) 通过参数 (numPartitions) 修改

   一般来说保证每一个分区类的数据量在128M左右是比较合适的

   默认不会修改分区数,  除非资源无限的情况下, 分区越多, 执行的并发越高, 效率越高

   一个分区就是一个并行度(task), 分区越多并行度越高。

设置一个死循环,运行代码时点击出现的网址 :  http://XiaoWang:4040

    或者直接在浏览器输入 : localhost:4040

    (1) 可以看见 Job Id  -- 一个job就是一个spark任务

    Tasks 显示 8个  --  6 + 2

(2) 点击Description下的带颜色的部分, 进入可以看到Stage Id 分为两个部分, 分别是0 -- map阶段、1 -- reduce阶段

5、 RDD 缓存  

RDD里面默认是没有数据的,如果对同一份数据做多次查询,需要将数据缓存到内存,RDD就有数据了。

    即对同一个RDD进行多次使用的时候,可以将这个RDD缓存起来,减少重复计算,提高效率。

    第一次需要从HDFS中读取数据,后续任务再使用这个RDD时可以直接从缓存中获取数据。

当数据量太大时,不适合使用缓存

格式 :  

    stuRDD.cache()     -- 直接在这个RDD后面加上

缓存级别 :

 (1) MEMORY_ONLY (默认)  --  数据量不大, 内存充足

(2) MEMORY_AND_DISK_SER   --  数据量较大, 内存不能完全放下数据 。 一般适用于RDD前的计算逻辑很长的时候。

        因为不管压缩与否,放内存都比放磁盘快,所以尽量将数据放在内存中。

    // 默认的缓存级别是 MEMORY_ONLY

        stuRDD.cache()

        //可以手动设置缓存级别为 MEMORY_AND_DISK_SER

        stuRDD.persist(StorageLevel.MEMORY_AND_DISK_SER)  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559800.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

打不死的超强生命力

水熊虫是你可能听说过的小生物&#xff0c;它们能够在极端环境中生存&#xff0c;堪称地球上的“超强幸存者”。数十年来&#xff0c;科学家们试图通过各种极端实验杀死它们&#xff0c;但无论是把它们以900米/秒的速度发射&#xff0c;还是将它们暴露在宇宙辐射下&#xff0c;…

Linux系统本地搭建轻量级文件共享系统PicoShare远程连接实战

前言 本篇文章介绍&#xff0c;如何在Linux系统本地部署轻量级文件共享系统PicoShare&#xff0c;并结合Cpolar内网穿透实现公网环境远程传输文件至本地局域网内文件共享系统。 PicoShare 是一个由 Go 开发的轻量级开源共享文件系统&#xff0c;它没有文件限制&#xff0c;允…

CDGA|数据治理:企业创新发展的强劲引擎

在当今这个数据驱动的时代&#xff0c;企业之间的竞争已经悄然转变为对数据资源的争夺与利用能力的比拼。数据&#xff0c;作为新的生产要素&#xff0c;正以前所未有的速度改变着企业的运营模式、决策方式乃至整个商业生态。而数据治理&#xff0c;作为确保数据质量、安全性、…

FPGA上板调试方式总结----VIO/ILA

在Vivado中&#xff0c;VIO&#xff08;Virtual Input/Output&#xff09;是一种用于调试和测试FPGA设计的IP核&#xff0c;它允许设计者通过JTAG接口实时读取和写入FPGA内部的寄存器&#xff0c;从而检查设计的运行状态并修改其行为。VIO IP核提供了一个简单易用的接口&#x…

二叉树系列(遍历/dfs/bfs)10.10

一、二叉树的右视图(遍历) 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 &#xff08;如果右子树为空的话&#xff0c;那么右视图中看到的就是左子树的节点&#xff09; bfs层…

IPguard与Ping32 DLP能力对比,保护企业数据的最佳选择

在信息安全的背景下&#xff0c;数据丢失防护&#xff08;DLP&#xff09;解决方案已成为企业不可或缺的一部分。IPguard和Ping32是市场上两款功能强大的DLP产品。本文将对它们的DLP能力进行详细对比&#xff0c;帮助企业找到最适合自己的数据保护工具。 Ping32的独特之处 Pin…

java复制查询数组-cnblog

java数组 复制数组 copyOf(待复制数组,复制后新数组的长度) 如果复制后数组的长度&#xff0c;长于原来数组&#xff0c;多出来的元素会被补0&#xff0c;如果新数组元素少会从第一个元素&#xff0c;取到指定元素长度 package nb;import java.util.Arrays;public class co…

2024年,有多少程序员被迫转行?真是惨烈啊!

知乎有个很火热的帖子&#xff0c;很多人在讨论今年有多少程序员在被迫转行&#xff0c;原来今年的程序员这么难。 有个老哥说自己干了8年前端程序员&#xff0c;今年被裁之后&#xff0c;薪资从30K降到25K还是没找到工作&#xff0c;现在只能转行去卖保险。 还有一个38岁的老哥…

深度解析|生成式人工智能大模型备案全流程

一、大模型备案的含义 根据《生成式人工智能服务管理暂行办法》第十七条 提供具有舆论属性或者社会动员能力的生成式人工智能服务的&#xff0c;应当按照国家有关规定开展安全评估。这里所说的按照国家有关规定开展安全评估&#xff0c;其实就是生成式人工智能服务备案&#x…

Python_网络编程(IP 端口 协议)

网络编程&#xff1a; 互联网时代&#xff0c;现在基本上所有的程序都是网络程序&#xff0c;很少有单机版的程序了。网络编程就是如何在程序中实现两台计算机的通信。Python语言中&#xff0c;提供了大量的内置模块和第三方模块用于支持各种网络访问&#xff0c;而且Python语言…

JAVA毕业设计187—基于Java+Springboot+vue3的电动车销售管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的电动车销售管理系统(源代码数据库)187 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#xff1a; 注…

不用PS!patchwork快速解决多子图组合问题~~

如果现在你还是将自己制作的图表放在PS或者PPT中进行随意组合的化&#xff0c;那么这篇文章你就得好好看看了&#xff0c;今天小编就给大家安利一个超强的突变自由组合包-patchwork&#xff0c;让你轻松实现多图的自由组合。 更多详细的数据可视化教程&#xff0c;可订阅我们的…

科研绘图系列:R语言绘制中国地理地图

文章目录 介绍加载R包导入数据图a图b图c图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码。该图展示了不同省份的物种分布情况。 加载R包 library(geojsonsf) library(sf) library(ggplot2) library(RColorBrewer) library(ggspatial) library(</

Springboot网上书城小程序—计算机毕业设计源码38707

目 录 摘要 1 绪论 1.1 研究背景及意义 1.2国内外研究现状 1.3系统开发的内容 1.4论文结构与章节安排 1.5小程序框架以及目录结构介绍 2 网上书城小程序系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析…

PowerJob做定时任务调度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、区别对比二、使用步骤1. 定时任务类型2.PowerJob搭建与部署 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; PowerJob是基于java开…

Android SELinux——安全策略(三)

SELinux 通过严格的访问控制机制增强了 Linux 系统的安全性。它通过标签和安全策略来控制进程和文件的访问权限&#xff0c;从而保护系统免受未经授权的访问和攻击。 一、策略介绍 1、主要组件 安全标签&#xff08;Security Labels&#xff09;&#xff1a;每个文件、目录、…

Nginx中,413 Request Entity Too Large错误

背景 在Nginx中&#xff0c;413 Request Entity Too Large错误通常发生在尝试上传或发送超过Nginx配置文件中的client_max_body_size限制的文件时。这个错误意味着请求的正文大小超过了Nginx允许的最大值。 解决这个问题的方法是在Nginx配置文件中增加client_max_body_size的值…

运动耳机选哪个品牌比较好?盘点五大高品质运动耳机推荐!

在骨传导耳机日益普及的同时&#xff0c;一个不容忽视的问题也逐渐暴露在大众视野之中。根据可靠消息&#xff0c;有超过九成的运动爱好者反馈在使用骨传导耳机时感到佩戴不适&#xff01;作为一名有着5年经验的运动达人&#xff0c;我秉持着对消费者负责的态度&#xff0c;同时…

【力扣刷题实战】(顺序表)移除元素

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a; 移除元素 题目描述 示例 1&#xff1a; 示例 2&#xff1a; 解题思路 具体思路 题目要点 完整代码 兄弟们共勉 &#xff01;&#xff01;&#xff01; 每篇前言 博客主页&#xff1a;小卡…

【新品发布】数字能源EMS管理再掀新篇章

致远电子EM系列工商业储能网关累计装机容量突破2GWh&#xff01;聚焦数字综合能源应用&#xff0c;全新一代EM-800/EM-1000G发布&#xff0c;见证光储充时代的来临&#xff01; 早在2008年&#xff0c;致远电子的工程师在为国内某新能源企业设计光伏通讯管理机方案时&#xff0…