Spark基础内容

news2024/11/28 10:43:37

Spark基本介绍

Spark是什么

定义

Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎.

Spark与MapReduce对比

mapreduce架构图如下:
在这里插入图片描述
MapReduce的主要缺点:

  • 1- MapReduce是基于进程进行数据处理,进程相对线程来说,在创建和销毁的过程比较消耗资源,并且速度比较慢
  • 2- MapReduce运行的时候,中间有大量的磁盘IO过程。也就是磁盘数据到内存,内存到磁盘反复的读写过程
  • 3- MapReduce只提供了非常低级(底层)的编程API,如果想要开发比较复杂的程序,那么就需要编写大量的代码。

Spark相对MapReduce的优点:

  • 1- Spark底层是基于线程来执行任务
  • 2- 引入了新的数据结构——RDD(弹性分布式数据集),能够让Spark程序主要基于内存进行运行。内存的读写数据相对磁盘来说,要块很多
  • 3- Spark提供了更加丰富的编程API,能够非常轻松的实现功能开发

线程和进程对比

在这里插入图片描述

  • 线程的创建和销毁,比进程会更加的快速,以及更加的节省资源
  • 进程很难共享内存中的数据;而同个进程中的线程可以共享内存中的数据

Spark特点

  • 高效性

    • 计算速度快
      • 提供了一个全新的数据结构RDD(弹性分布式数据集)。整个计算操作,基于内存计算。当内存不足的时候,可以放置到磁盘上。整个流程是基于DAG(有向无环图)执行方案。
      • Task线程完成计算任务执行
  • 易用性

    • 支持多种语言开发 (Python,SQL,Java,Scala,R),降低了学习难度
  • 通用性

    • 在 Spark 的基础上,Spark 还提供了包括Spark SQL、Spark Streaming、MLlib 及GraphX在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。
  • 兼容性(任何地方运行)

    • 支持三方工具接入

      • 存储工具
        • hdfs
        • kafka
        • hbase
      • 资源调度
        • yarn
        • Kubernetes(K8s容器)
        • standalone(spark自带的)
      • 高可用
        • zookeeper
    • 支持多种操作系统

      • Linux
      • windows
      • Mac

Spark框架模块

在这里插入图片描述

  • Spark Core API:实现了 Spark 的基本功能。包含RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。数据结构RDD。
  • Spark SQL:我们可以使用 SQL处理结构化数据。数据结构:Dataset/DataFrame = RDD + Schema。
  • Structured Streaming:基于Spark SQL进行流式/实时的处理组件,主要处理结构化数据。
  • Streaming(Spark Streaming):提供的对实时数据进行流式计算的组件,底层依然是离线计算,只不过时间粒度很小,攒批。–了解
  • MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等。
  • GraphX:Spark中用于图计算的API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

基本词频统计案例

from pyspark import SparkConf, SparkContext
import os

# 绑定指定的Python解释器
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'

# 创建main函数
if __name__ == '__main__':
    print("Spark入门案例: WordCount词频统计")

    # 1- 创建SparkContext对象
    """
        setAppName:设置PySpark程序运行时的名称
        setMaster:设置PySpark程序运行时的集群模式
    """
    conf = SparkConf()\
        .setAppName('spark_wordcount_demo')\
        .setMaster('local[*]')
    sc = SparkContext(conf=conf)

    # 2- 数据输入
    """
        textFile:支持读取HDFS文件系统和本地文件系统
            HDFS文件系统:hdfs://node1:8020/文件路径
            本地文件系统:file:///文件路径
    """
    init_rdd = sc.textFile("file:///export/data/gz16_pyspark/01_spark_core/data/content.txt")

    # 3- 数据处理
    # 文本内容切分
    """
        flatMap运行结果:
        输入数据:['hello hello spark', 'hello heima spark']
        输出数据:['hello', 'hello', 'spark', 'hello', 'heima', 'spark']
        
        map运行结果:
        输入数据:['hello hello spark', 'hello heima spark']
        输出数据:[['hello', 'hello', 'spark'], ['hello', 'heima', 'spark']]
    """
    # flatmap_rdd = init_rdd.map(lambda line: line.split(" "))
    flatmap_rdd = init_rdd.flatMap(lambda line: line.split(" "))

    # 数据格式转换
    """
        输入数据:['hello', 'hello', 'spark', 'hello', 'heima', 'spark']
        输出数据:[('hello', 1), ('hello', 1), ('spark', 1), ('hello', 1), ('heima', 1), ('spark', 1)]
    """
    map_rdd = flatmap_rdd.map(lambda word: (word,1))

    # 分组和聚合
    """
        输入数据:[('hello', 1), ('hello', 1), ('spark', 1), ('hello', 1), ('heima', 1), ('spark', 1)]
        输出数据:[('hello', 3), ('spark', 2), ('heima', 1)]
        
        reduceByKey底层运行过程分析:
        1- 该算子同时具备分组和聚合的功能。而且是先对数据按照key进行分组,对相同key的value会形成得到List列表。再对分组后的value列表进行聚合。
        2- 分组和聚合功能不能分割,也就是一个整体
        
        结合案例进行详细分析:
        1- 分组
            输入数据:[('hello', 1), ('hello', 1), ('spark', 1), ('hello', 1), ('heima', 1), ('spark', 1)]
            分组后的结果: 
                        key  value列表
                      hello  [1,1,1]
                      spark  [1,1]
                      heima  [1]
                      
        2- 聚合(以hello为例)
            lambda agg,curr: agg+curr -> agg表示中间临时value聚合结果,默认取列表中的第一个元素;curr表示当前遍历到的value元素,默认取列表中的第二个元素
            
            第一次聚合:
                agg =列表中的第一个1,curr=列表中的第二个1。聚合结果agg+curr=1+1=2,再将2赋值给agg
            第二次聚合:
                agg =上次临时聚合结果2,curr=列表中的第三个1。聚合结果agg+curr=2+1=3,再将3赋值给agg
                
            最后发现已经遍历到value列表的最后一个元素,因此聚合过程结果。最终的hello的次数,就是3
    """
    result = map_rdd.reduceByKey(lambda agg,curr: agg+curr)

    # 4- 数据输出
    """
        collect():用来收集数据,返回值类型是List列表
    """
    print(result.collect())

    # 5- 释放资源
    sc.stop()

可能出现的错误:
在这里插入图片描述
原因: 找不到JAVA_HOME环境

解决方案: 需要在代码中指定远端的环境地址 以及 在node1环境中初始化JAVA_HOME地址
第一步: 在mian函数上面添加以下内容
os.environ[‘SPARK_HOME’] = ‘/export/server/spark’
os.environ[‘PYSPARK_PYTHON’] = ‘/root/anaconda3/bin/python3’
os.environ[‘PYSPARK_DRIVER_PYTHON’] = ‘/root/anaconda3/bin/python3’
第二步:在node1的 /root/.bashrc 中配置初始化环境的配置
export JAVA_HOME=/export/server/jdk1.8.0_241
注意: 路径需要填写你自己

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

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

相关文章

【数据结构—排序—交换排序】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、排序的概念及其运用 1、排序的概念 2、排序运用 3、 常见的排序算法 二、交换排序 1、冒泡排序 1.1算法讲解 1.2冒泡排序的实现: 1.2.1头文件的…

6.云原生之jenkins集成SonarQube

文章目录 搭建 SonarQube配置SonarQube创建sonar-token生成令牌查看jenkins暴露的NodePort端口创建Webhook 服务器将 SonarQube 配置添加到 ks-installer Jenkins集成SonarQube将 SonarQube 服务器添加至 Jenkinsjenkins配置SonarQubejenkins中配置SonarQube创建Jenkins凭证将 …

LDD学习笔记 -- Linux字符设备驱动

LDD学习笔记 -- Linux字符设备驱动 虚拟文件系统 VFS设备号相关Kernel APIs动态申请设备号动态创建设备文件内核空间和用户空间的数据交换系统调用方法readwritelseek 写一个伪字符设备驱动在主机上测试pcd(HOST)在目标板上测试pcd(TARGET) 字符驱动程序用于与Linux内核中的设备…

Docker使用扩展

日升时奋斗,日落时自省 目录 1、容器 1.1、容器的生命周期 1.1.1、容器OOM 1.1.2、容器异常退出 1.1.3、容器暂停 1.2、容器命令 1.2.1、创建容器 1.2.2、启动容器 1.2.3、容器日志 1.2.4、容器交互 1.2.5、容器停止 1.2.6、扩展 1.3、综合演示 2、存…

FPGA高端项目:纯verilog的 25G-UDP 高速协议栈,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案本协议栈的 1G-UDP版本本协议栈的 10G-UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设计架构框图网络调试助手…

《Learning eBPF》读书笔记

文章目录 章节内容简介第1章 什么是ebpf,为什么它很重要?第2章 ebpf版hello world第3章 ebpf程序剖析ebpf虚拟机一个xdp的hello word例子c语言程序编译为ebpf字节码加载bpf程序到内核检查加载的程序运行时编译机器码附加到事件分离程序卸载程序 第4章 bp…

CAN物理层协议介绍

目录 ​编辑 1. CAN协议简介 2. CAN物理层 3. 通讯节点 4. 差分信号 5. CAN协议中的差分信号 1. CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519) &#xff0…

光明源@智慧公厕系统的功能介绍-详情可点击查看

什么是智慧公厕系统?智慧公厕系统是一种通过科技手段提升公共卫生设施管理和服务水平的解决方案。智慧公厕系统都有哪些功能呢?那么小编讲以光明源的角度来讲一下公厕系统都有哪些功能! 光明源智慧公厕系统-实时监控和管理公厕 该系统使用各…

【leetcode】力扣算法之旋转图像【难度中等】

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 用例 输入: matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…

【Spring实战】26 使用Spring Security 保护 Spring Boot Admin

文章目录 1. 定义1.集成流程1)添加 Spring Boot Admin 依赖2)配置 Spring Boot Admin3)启动 Spring Boot Admin 服务4)访问 Spring Boot Admin 服务5)添加 Spring Security 依赖6)配置 Spring Security7&am…

【书生大模型00--开源体系介绍】

书生大模型开源体系介绍 0 通用人工智能1 InternLM性能及模型2 从模型到应用 大模型成为目前很热的关键词,最热门的研究方向,热门的应用;ChatGPT的横空出世所引爆,快速被人们上手应用到各领域; 0 通用人工智能 相信使…

02、Kafka ------ 配置 Kafka 集群

目录 配置 Kafka 集群配置步骤启动各Kafka节点 配置 Kafka 集群 启动命令: 1、启动 zookeeper 服务器端 小黑窗输入命令: zkServer 2、启动 zookeeper 的命令行客户端工具 (这个只是用来看连接的节点信息,不启动也没关系&#…

Hadoop3.3.5云服务器安装教程-单机/伪分布式配置

系列文章目录 华为云服务器试用领取 领取的试用云服务器在哪 Hadoop3.3.5云服务器安装教程-单机/伪分布式配置 文章目录 系列文章目录创建hadoop用户更新apt安装SSH、配置SSH无密码登陆安装Java环境安装 Hadoop3.3.5Hadoop单机配置(非分布式)Hadoop伪分布式配置运行Hadoop伪分…

【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024

AI视野今日CS.Sound 声学论文速览 Fri, 5 Jan 2024 Totally 10 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers PosCUDA: Position based Convolution for Unlearnable Audio Datasets Authors Vignesh Gokul, Shlomo Dubnov深度学习模型需要大量干净的…

Windows.OpenSSL生成ssl证书配置到nginx

一、下载OpenSSL程序安装 到E:\soft\OpenSSL-Win64 二、打开一个CMD控制台窗口,设置好openssl.cnf路径 E: cd E:\soft\OpenSSL-Win64\bin set OPENSSL_CONFE:\soft\OpenSSL-Win64\bin\openssl.cnf 三、在当前目录 E:\soft\OpenSSL-Win64\bin 里创建两个子目录 m…

UVa12419 Heap Manager

题目链接 UVa12419 - Heap Manager 题意 内存以内存单元为基本单位,每个内存单元用一个固定的整数作为标识,称为地址。地址从0开始连续排列,地址相邻的内存单元被认为是逻辑上连续的。我们把从地址i开始的s个连续的内存单元称为首地址为i长度…

三代半导体材料有何区别

什么是半导体材料 半导体材料是制作半导体器件和集成电路的电子材料,是半导体工业的基础。利用半导体材料制作的各种各样的半导体器件和集成电路,促进了现代信息社会的飞速发展。 绝缘体、半导体和导体的典型电导率范围 半导体材料的研究开始于19世纪初…

行走在深度学习的幻觉中:问题缘由与解决方案

如何解决大模型的「幻觉」问题? 我们在使用深度学习大模型如LLM(Large Language Models)时,可能会遇到一种被称为“幻觉”的现象。没错,它并不是人脑中的错觉,而是模型对特定模式的过度依赖,这…

ChatGPT学习笔记——大模型基础理论体系

1、ChatGPT的背景与意义 近期,ChatGPT表现出了非常惊艳的语言理解、生成、知识推理能力, 它可以极好的理解用户意图,真正做到多轮沟通,并且回答内容完整、重点清晰、有概括、有条理。 ChatGPT 是继数据库和搜索引擎之后的全新一代的 “知识表示和调用方式”如下表所示。 …

任务调度实现

一、定时任务概述 在项目中开发定时任务应该一种比较常见的需求,在 Java 中开发定时任务主要有三种解决方案:一是使用JDK 自带的 Timer,二是使用 Spring Task,三是使用第三方组件 Quartz Timer 是 JDK 自带的定时任务工具,其简单易…