【数据仓库】spark大数据处理框架

文章目录

    • 概述
    • 架构
    • spark 架构角色
    • 下载
    • 安装
    • 启动pyspark
    • 启动spark-sehll
    • 启动spark-sql
    • spark-submit
    • 经验

概述

Spark是一个性能优异的集群计算框架,广泛应用于大数据领域。类似Hadoop,但对Hadoop做了优化,计算任务的中间结果可以存储在内存中,不需要每次都写入HDFS,更适用于需要迭代运算的算法场景中。

Spark专注于数据的处理分析,而数据的存储还是要借助于Hadoop分布式文件系统HDFS等来实现。

大数据问题场景包含以下三种:

  • 复杂的批量数据处理
  • 基于历史数据的交互式查询
  • 基于实时数据流的数据处理

Spark技术栈基本可以解决以上三种场景问题。

架构

在这里插入图片描述

1 spark Core :spark的核心模块,是spark运行基础。以RDD为数据抽象,提供python、java、scala、R语言的api,可以通过RDD编程进行海量离线数据批处理计算。

2 Spark SQL:基于Spark Core,提供结构化数据处理功能。可以使用SQL语言对数据进行处理,可用于离线计算场景。同时基于Spark SQL提供了StructuredStreaming模块,可以使用时SQL进行流式计算。

3 sparkStreaming : 以Spark Core为基础,提供数据的流式计算功能

4 MLlib:以spark Core为基础,进行机器学习计算,内置大量机器学习库和API算法等。

5 Graphx:以spark Core为基础,进行图计算,提供大量图计算的API,方便以分布式资源进行图计算。

6 spark底层的文件存储还是基于hdfs分布式文件系统,支持多种部署方式。

spark 架构角色

在这里插入图片描述

从两个层面理解:

资源管理层面:(典型的Master-Worker架构)

管理者:即Master角色,只能有一个

​ 工作者:即Worker角色,可以有多个。一个worker在一个分布式节点上,监测当前节点的资源状况,向master节点汇总。

任务执行层面:

​ 某任务管理者:Driver角色,一个任务只能有一个

​ 某任务执行者:Executor角色,可以有多个

在特殊场景下(local模式),Driver即是管理者又是执行者

下载

下载地址:

http://spark.apache.org/downloads.html

或者

https://archive.apache.org/dist/spark/

选择合适自己的版本下载。

Spark2.X预编译了Scala2.11(Spark2.4.2预编译Scala2.12)

Spark3.0+预编译了Scala2.12

该教程选择Spark3.2.1版本,其中预编译了Hadoop3.2和Scala2.13,对应的包是 spark-3.2.1-bin-hadoop3.2-scala2.13.tgz,但这里的预编译Hadoop不是指不需要再安装Hadoop。

linux 服务器上下载地址

wget https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2-scala2.13.tgz

安装

Spark的安装部署支持三种模式,

local本地模式(单机):启动一个JVM Process进程,通过其内部的多个线程来模拟整个spark运行时各个角色。一个进程里有多个线程。

Local[N]:可以使用N个线程,一个线程利用一个cpu核,通常cpu有几个核,就指定几个线程,最大化利用计算能力;
Local[*],按照cpu核数设置线程数;

standalone模式(集群):各个角色以独立进程的形式存在,并组成spark集群

​ spark on YARN模式(集群):各个角色运行在yarn的容器内部,组成集群环境

​ kubernetes 模式(容器集群):各个角色运行在kubernetes 容器内部,组成集群环境

本文将只介绍 本地Local模式,其它模式将会在后续文章中进行介绍。

该文的安装环境为centos7。

1、将下载的包上传到服务器指定目录,解压

[root@localhost softnew]# tar zxvf spark-3.1.2-bin-hadoop3.2.tgz
# 修改目录
mv spark-3.1.2-bin-hadoop3.2 spark-3.1.2

2、修改配置文件

修改/etc/profile文件,新增spark环境变量:

 # Spark Environment Variables
 export SPARK_HOME=/home/bigData/softnew/spark
 export PATH=$PATH:$SPARK_HOME/bin

修改完成后记得执行 source /etc/profile 使其生效

启动pyspark

​ pyspark 是spark集成python后,可以使用python 脚本编写spark 数据 批处理计算。pyspark提供了一个shell窗口。

./pyspark
[root@yd-ss bin]# ./pyspark
Python 3.10.10 (main, Dec 26 2024, 22:46:13) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
24/12/27 10:46:44 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using xx.xx.xx.xx instead (on interface bond0)
24/12/27 10:46:44 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.metastore.event.db.notification.api.auth does not exist
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.server2.active.passive.ha.enable does not exist
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.exec.default.charset does not exist
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.exec.default.national.charset does not exist
24/12/27 10:46:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.2.1
      /_/

Using Python version 3.10.10 (main, Dec 26 2024 22:46:13)
Spark context Web UI available at http://sc:4040
Spark context available as 'sc' (master = local[*], app id = local-1735267609271).
SparkSession available as 'spark'.
>>>

进入窗口,即可使用python 写RDD编程代码了。

同时,可以通过web ui 在4040端口访问,查看spark 任务执行情况。

执行如下计算任务

sc.parallelize([1,2,3,4,5]).map(lambda x:x*10).collect()

访问localhost:4040

在这里插入图片描述

可以看到job清单,这个job,起了24个线程去处理计算。 由于跑任务的服务器是24核的,执行./pyspark 默认以local[*]最大线程去启动。

在这里插入图片描述

可以看到任务层面,启动了一个driver,由于是local模式,所以driver即是管理者也是执行者。

可以在pyspark-shell下利用spark做一些简单开发任务;

下面修改启动命令:

# 该local模式启动2个线程
./pyspark --master local[2]

再次执行

sc.parallelize([1,2,3,4,5]).map(lambda x:x*10).collect()

在这里插入图片描述

可以看到这个job只用了2个线程来处理计算。

还可以利用该shell处理其他计算任务,也就是说一个shell 启动起来,是可以处理多个任务的,但只要关闭窗口,shell就会关闭。就不能再处理任务了。

通过shell 总是不便,后续将介绍通过pycharm进行RDD计算任务编写。

退出shell脚本

quit()或者ctrl + D

启动spark-sehll

./spark-shell

可以看到如下信息:

[root@yd-ss bin]# ./spark-shell
24/12/27 11:11:50 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using xx.xx.xx.xx instead (on interface bond0)
24/12/27 11:11:50 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.2.1
      /_/

Using Scala version 2.13.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201)
Type in expressions to have them evaluated.
Type :help for more information.
24/12/27 11:12:04 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Spark context Web UI available at http://sc:4040
Spark context available as 'sc' (master = local[*], app id = local-1735269126553).
Spark session available as 'spark'.

scala>

这个是要使用scala语言编写,其他跟pyspark类似。

启动spark-sql

./spark-sql

可以看到如下:

[root@yd-ss bin]# ./spark-sql
24/12/27 11:14:28 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using xx.xx.xx.xx instead (on interface bond0)
24/12/27 11:14:28 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
24/12/27 11:14:29 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.metastore.event.db.notification.api.auth does not exist
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.server2.active.passive.ha.enable does not exist
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.exec.default.charset does not exist
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.exec.default.national.charset does not exist
Spark master: local[*], Application Id: local-1735269273943
spark-sql>

可以看到这个是依赖hive数仓配置的。spark-sql是没有元数据管理的,所以需要跟hive集成,利用其元数据管理功能。后续将详细介绍。

spark-submit

该工具是用来提交写好的计算脚本,到saprk上去执行,执行完成即结束。和前面的shell不一样,shell只要没关闭,就可以一直执行的。

# 执行spark自带的python示例,计算pi的值(8次迭代)
./spark-submit /home/spark/spark-3.2.1/examples/src/main/python/pi.py 8

该脚本,会基于spark启动一个driver,执行pi.py计算,然后打开web ui 4040监控接口,执行完成后输出结果,最后关闭driver,关闭web ui。

是个一次性的任务执行。

经验

1 spark 功能比较强大,使用方式也很丰富,初步学习只需要了解自己使用方式即可;

2 spark local模式使用配置是比较简单的,基本是开箱即用;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

标准库以及HAL库——按键控制LED灯代码

按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯:是直接控制输出引脚,GPIO初始化推挽输出即可 按键控制LED:是按键输入信号从而控制输出引脚,GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…

Rabbitmq追问2

分析rabbitmq 默认使用姿势是什么 direct fanout还是什么 public void convertAndSend(String exchange, String routingKey, Object object, CorrelationData correlationData) throws AmqpException { this.send(exchange, routingKey, this.convertMessageIfNecessary(obje…

vue+js+Java在分页的el-table里实现上移、下移;置顶

这里写目录标题 一、上移、下移二、置顶 一、上移、下移 实现&#xff1a;上移到第一行后不能再上移&#xff0c;下移到最后一行不能下移&#xff0c;以及分页后能上移到前一页&#xff0c;下移能移到后一页&#xff1b;&#xff08;新增sort排序字段&#xff09; <el-tabl…

计算机因进程结束导致白屏

问题场景&#xff1a; 计算机卡顿利用&#xff08;右击计算机桌面底部任务栏->打开任务管理器->结束任务->或进程被意外结束导致白屏&#xff09; 问题描述 白屏 原因分析&#xff1a; 在结束进程时&#xff0c;导致 文件资源管理器 进程崩溃。 解决方案&#xf…

【YashanDB知识库】如何在备机节点上做备份和恢复

本文内容来自YashanDB官网&#xff0c;原文内容请见 https://www.yashandb.com/newsinfo/7817898.html?templateId1718516 问题现象 一主一备情况下&#xff0c;主机需要支持常规业务&#xff0c;为了不影响业务&#xff0c;在备机做备份恢复的场景。 问题的风险及影响 1、…

【Linux-多线程】线程互斥(锁和它的接口等)

一、线程互斥 我们把多个线程能够看到的资源叫做共享资源&#xff0c;我们对共享资源进行保护&#xff0c;就是互斥 1.多线程访问问题 【示例】见一见多线程访问问题&#xff0c;下面是一个抢票的代码&#xff0c;共计票数10000张&#xff0c;4个线程去抢 之前我们展示过封…

Kafka中的Topic和Partition有什么关系?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka中的Topic和Partition有什么关系&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka中的Topic和Partition有什么关系&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Apache Kafka 中&#…

leetcode108:将有序数组转化为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确…

MyBatis执行一条sql语句的流程(源码解析)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MyBatis执行一条sql语句的流程&#xff08;源码解析&#xff09; MyBatis执行sql语句的流程加载配置文件加载配置文件的流程 创建sqlsessionFactory对象解析Mapper创建sqlses…

python23-常用的第三方库01:request模块-爬虫

requests 模块是 Python 中的一个第三方库&#xff0c;用于发送 HTTP 请求。 它提供了一个简单且直观的 API&#xff0c;使得发送网络请求和解析响应变得非常容易。requests 模块支持各种 HTTP 方法&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并且具有处理 cookies…

TTL 传输中过期问题定位

问题&#xff1a; 工作环境中有一个acap的环境&#xff0c;ac的wan口ip是192.168.186.195/24&#xff0c;ac上lan上有vlan205&#xff0c;其ip子接口地址192.168.205.1/24&#xff0c;ac采用非nat模式&#xff0c;而是路由模式&#xff0c;在上级路由器上有192.168.205.0/24指向…

前端超大缓存IndexDB、入门及实际使用

文章目录 往期回顾项目实战初始化表获取列表新增表的数据项获取详情根据ID获取详情根据其他字段获取详情 删除数据 总结 往期回顾 在之前的文章中&#xff0c;我们介绍了IndexDB vs Cookies vs Session这几个的对比&#xff0c;但是没有做实际项目的演示&#xff0c;今天我们用…

vue3学习笔记(11)-组件通信

1.props 父传子 子传夫 父传子 接收用defineProps([]) 空字符串也是假 2.自定义事件 $event:事件对象 ref定义的数据在模板里面引用的时候可以不用.value 3.子传父 宏函数 触发事件 声明事件 defineEmits() 挂载之后3s钟触发 4.命名 肉串命名 5.任意组件通信 mitt pubs…

【高阶数据结构】红黑树封装map、set

红黑树封装map、set 1.源码及框架分析2.模拟实现map和set1.支持 insert 的实现2.支持 iterator 的实现3.map支持 operator [] 的实现 3.总代码1.RBTree.h2.Myset.h3.Mymap.h4.Test.cpp 1.源码及框架分析 SGI-STL30版本源代码&#xff0c;map和set的源代码在map/set/stl_map.h/…

多模态论文笔记——Coca

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍多模态模型Coca&#xff0c;在DALLE 3中使用其作为captioner基准模型的原因和优势。 文章目录 ALBEF论文模型结构组成训练目标 CoCa​论文模型结构CoCa…

WebGL之Tree.js

tree基于WebGL的库绘制展示3D图形使用场景包括: 网页游&#xff1a;创建交互式的3D游戏&#xff0c;提供沉浸式的游戏体验。数据可视&#xff1a;将复杂的数据以3D形式展示&#xff0c;便于用户理解和分析。产品展&#xff1a;在电商网站上展示产品的3D模型&#xff0c;提供更…

基于PyQt5的UI界面开发——图像与视频的加载与显示

介绍 这里我们的主要目标是实现一个基于PyQt5和OpenCV的图像浏览和视频播放应用。用户可以选择本地的图像或视频文件夹&#xff0c;进行图像自动播放和图像切换以及视频播放和调用摄像头等操作&#xff0c;并且支持图像保存功能。项目的核心设计包括文件路径选择、图像或视频的…

数据结构与算法之动态规划: LeetCode 62. 不同路径 (Ts版)

不同路径 https://leetcode.cn/problems/unique-paths/description/ 描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “…

java自定义注解对枚举类型参数的校验

目录 1.前提准备条件 1.1 pom.xml文件依赖: 1.2 枚举类&#xff1a; 1.3 controller接口&#xff1a; 1.4 实体参数&#xff1a; 1.5 knife4j的配置 2.实现要求 3.实现步骤 3.1 自定义注解类&#xff1a; 3.2 使用注解&#xff1a; 3.3 添加注解校验类&#xff1a; …

Type c系列接口驱动电路·内置供电驱动电路使用USB2.0驱动电路!!!

目录 前言 Type c常见封装类型 Type c引脚功能详解 Type c常见驱动电路详解 Type c数据手册 ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路…