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.mzph.cn/web/55220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装指定node.js 版本 精简版流程

首先 我们本机上是否安装有node 如果有 需要先卸载 卸载完成后 使用命令查看是否卸载干净 打开WinR 输入cmd 然后输入如下名: where node 如果没有目录显示 说明node 很干净 本机没有相关安装 在输入命令: where npm 如果有相关目录 需要删除掉 要不然 后续安装的…

报错 - LangChain bind_tools NotImplementedError

使用 LangChain 的 bind_tools 方法一直报错&#xff0c;即使使用 ChatOpenAI 作为 llm 接口 根据这个issue 下的回答&#xff0c;修改了 ChatOpenAI 的 import 出处&#xff0c;解决了问题 https://github.com/langchain-ai/langchain/issues/21479#issuecomment-2105618237 …

基于华为昇腾910B,实战 InternLM2.5-7B-Chat 模型推理

本文将带领大家基于启智平台&#xff0c;使用 LMDeploy 推理框架在华为昇腾 910B 上实现 internlm2_5-7b-chat 模型的推理。 GitHub - InternLM/lmdeploy: LMDeploy is a toolkit for compressing, deploying, and serving LLMs.&#xff08;欢迎star&#xff09; GitHub - I…

Opencv库的安装与vs项目配置

目录 一、下载安装opencv 1、下载 2、减压安装 3、环境变量配置&#xff08;vs项目不是必须的&#xff0c;看后面&#xff09; 二、vs项目配置opencv 1、创建vs项目 2、包含opencv头文件 一、下载安装opencv 1、下载 OpenCV - Open Computer Vision Library 2、减压安…

k8s杂记

在node节点内部使用kubectl&#xff1a; rootmultinode-demo-m02:/# ps aux | grep kubelet root 218 3.1 1.6 2066316 62516 ? Ssl 07:35 0:29 /var/lib/minikube/binaries/v1.30.0/kubelet --bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.con…

phpstorm+phpstudy 配置xdebug(无需开启浏览器扩展)

今天又被xdebug折磨了&#xff0c;忘记了以前咋配置了现在百度发现好多都是各种浏览器扩展而且也没有真正的用到项目上的都是测试的地址怎么样的 我就简单写一下自己实战吧 不支持workerman swoole hyperf等这种服务框架 如果你会请教教我 工具版本phpstudy8.1.xphpstorm2021.x…

docker查看,删除,停止,暂停,恢复容器详解

一&#xff0c;查看容器&#xff08;假设你有一个名为 my_app_container 的容器&#xff09;。 1. 查看所有容器&#xff08;包括已停止的&#xff09; docker ps -a 输出示例&#xff1a; CONTAINER ID IMAGE COMMAND CREATED STATUS …

springboot单文件,多文件下载方式

简单大文件下载&#xff1a; /*** 下载大文件* param path 路径* param fileName 文件名* return* throws IOException*/ public static ResponseEntity<InputStreamResource> downloadFile(String path, String fileName) throws IOException {Path filePath Paths.ge…

操作系统(2) (进程调度/进程调度器类型/三种进程调度/调度算法)

目录 1. 介绍进程调度&#xff08;Introduction to Process Scheduling&#xff09; 2. 优先级调度&#xff08;Priority Scheduling&#xff09; 3. CPU 利用率&#xff08;CPU Utilization&#xff09; 4. 吞吐量&#xff08;Throughput&#xff09; 5. 周转时间&#xf…

PAT甲级-1127 ZigZagging on a Tree

题目 题目大意 给出一棵树的中序和后序遍历&#xff0c;要求按层序输出这棵树&#xff0c;但是按照从左到右&#xff0c;再从右到左&#xff0c;再从左到右的顺序。 思路 由中序遍历和后序遍历可以构造出一棵二叉树。观察题目中要求的输出顺序&#xff0c;发现层数为奇数的都…

FineReport 数据集

概念&#xff1a;数据集是指可直接应用于模板设计的数据展现集合。 按其来源范围数据集可以分为 数据库查询内置数据集文件数据集SAP 数据集存储过程多维数据库关联数据集树数据集 1、数据库查询 数据库查询&#xff1a;指从定义好的数据库连接中&#xff0c;就是数据源中使用…

Flutter鸿蒙版本灵活使用方法间的回调处理复杂化的逻辑

目录 写在前面 示例代码 main.dart: one.dart: 代码解析 1. 主入口 main 函数 2. MyApp 类 3. CallbackExample 类 4. onok 函数 5. one 函数 写在后面 写在前面 在 Flutter 开发中&#xff0c;灵活使用函数之间的回调带来了多种好处&#xff0c;包括提高可重用性、…

高频SQL50题(基础版)三

前言&#xff1a;需要了解SQL50题一和二的可以关注我&#xff0c;在我之前写的文章都有。 目录 620.有趣的电影&#xff08;简单&#xff09; 1251.平均售价&#xff08;简单&#xff09; 1075.项目员工I&#xff08;简单&#xff09; 1633.各赛事的用户注册率&#xff08…

如何提高LabVIEW编程效率

提高LabVIEW编程效率对开发者来说非常重要&#xff0c;尤其是在处理复杂项目或紧迫的开发周期时。以下是一些可以显著提升LabVIEW编程效率的技巧&#xff0c;从代码结构、工具使用到团队协作的多个角度进行详细分析&#xff1a; 1. 模块化设计 模块化设计 是提高代码可维护性和…

在Luckysheet中嵌入图表

在当今数据驱动的世界中&#xff0c;能够有效地可视化数据变得越来越重要。Luckysheet作为一个强大的基于Web的电子表格工具&#xff0c;不仅提供了Excel类似的功能&#xff0c;还支持嵌入各种图表。本文将指导你如何在Luckysheet中嵌入图表&#xff0c;让你的数据栩栩如生。 …

kali chrome 安装 hackbar

HackBar 是一个用于在 Kali Linux 中快速测试 SQL 注入和 XSS 漏洞的 Chrome 扩展程序。以下是如何在 Kali Linux 上安装 HackBar 的步骤&#xff1a; 首先&#xff0c;你需要确保你的系统已经安装了 Google Chrome 或 Chromium。如果没有安装&#xff0c;你可以使用以下命令安…

树莓派--AI视觉小车智能机器人--1.树莓派系统烧入及WiFi设置并进入jupyterlab

一、Raspberry Pi 系统烧入 使用树莓派&#xff0c;我们是需要有操作系统的。默认情况下&#xff0c;树莓派会在插入的SD卡上查找操作系统。这需要一台电脑将存储设备映像为引导设备&#xff0c;并将存储设备插入该电脑。大多数树莓派用户选择microSD卡作为引导设备。 1.1 下载…

SQL Server日期查询常用语句

一、以下是SQL 日期截取 & SQL Server日期比较日期查询常用语句 select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),-,), ,),:,) 20040912110608 select COUNVRT(varchar(12) , getdate…

前端的全栈混合之路Meteor篇:容器化开发环境下的meteor工程架构解析

本文主要介绍容器化meteor工程的目录架构解析&#xff0c;之前的文章中浅浅提到过一些&#xff1a;前端的全栈混合之路Meteor篇&#xff1a;开发环境的搭建 -全局安装或使用docker镜像-CSDN博客https://blog.csdn.net/m0_38015699/article/details/142730928?spm1001.2014.300…

【Trulens框架】用TruLens 自动化 RAG 应用项目评估测试

前言&#xff1a; 什么是Trulens TruLens是面向神经网络应用的质量评估工具&#xff0c;它可以帮助你使用反馈函数来客观地评估你的基于LLM&#xff08;语言模型&#xff09;的应用的质量和效果。反馈函数可以帮助你以编程的方式评估输入、输出和中间结果的质量&#xff0c;从而…