《PySpark大数据分析实战》-07.Spark本地模式安装

news2024/9/28 9:32:43

📋 博主简介

  • 💖 作者简介:大家好,我是wux_labs。😜
    热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。
    通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP)、TiDB数据库认证SQL开发专家(PCSD)认证。
    通过了微软Azure开发人员、Azure数据工程师、Azure解决方案架构师专家认证。
    对大数据技术栈Hadoop、Hive、Spark、Kafka等有深入研究,对Databricks的使用有丰富的经验。
  • 📝 个人主页:wux_labs,如果您对我还算满意,请关注一下吧~🔥
  • 📝 个人社区:数据科学社区,如果您是数据科学爱好者,一起来交流吧~🔥
  • 🎉 请支持我:欢迎大家 点赞👍+收藏⭐️+吐槽📝,您的支持是我持续创作的动力~🔥

《PySpark大数据分析实战》-07.Spark本地模式安装

  • 《PySpark大数据分析实战》-07.Spark本地模式安装
    • 前言
    • Spark本地模式安装
      • 使用交互式pyspark运行代码
      • 使用spark-submit提交代码
    • 结束语

《PySpark大数据分析实战》-07.Spark本地模式安装

前言

大家好!今天为大家分享的是《PySpark大数据分析实战》第2章第2节的内容:Spark本地模式安装。

Spark本地模式安装

Spark本地模式即单机模式,是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境,本地模式只需要在1台服务器上安装Spark。本地模式的安装非常简单,将下载的Spark软件安装包解压到目标位置即安装完成,解压安装包的命令如下:

$ tar -xzf spark-3.4.0-bin-hadoop3.tgz -C apps

解压后的Spark目录结构如图所示。

  • bin目录存放的是提交Spark应用程序需要用到的命令,例如pyspark、spark-submit等命令。
  • conf目录存放的是Spark的配置文件,这里可以配置Spark的部署模式,例如独立集群信息、YARN信息。
  • jars目录存放的是Spark的依赖软件包,Spark各个组件的核心代码都存放在这里,与第三方框架集成,例如MySQL、Kafka等,用到的依赖包也需要添加到jars目录下。
  • sbin目录下存放的是Spark集群管理相关的可执行命令,例如启动、停止集群的相关命令。

使用交互式pyspark运行代码

解压安装完成后,验证安装结果,在没有配置相关的环境变量时,pyspark不能直接在任意路径执行,将工作目录切换到Spark的安装目录,在此执行相关命令。命令如下:

$ cd apps/spark-3.4.0-bin-hadoop3/
$ bin/pyspark

pyspark命令执行后,会进入交互式解释器环境,如图所示。

从交互式解释器环境可以知道:

  • Spark的版本是version 3.4.0。
  • Python的版本是version 3.8.10。
  • Spark Driver Web UI的地址是http://node1.internal.cloudapp.net:4040。
  • 环境实例化了一个SparkContext对象,名为sc。
  • 当前环境的master是local[*]。
  • 环境实例化了一个SparkSession对象,名为spark。

通过浏览器访问Spark Driver Web UI地址,打开的Spark Driver Web UI界面如图所示。

在Spark Driver Web UI中:

  • Jobs页面可以查看根据Spark应用程序创建的Job信息,当前没有任何Job在运行。
  • Stages页面可以查看每个任务的Stage的划分。
  • Storage页面可以查看Spark应用程序缓存在内存或磁盘中的数据的详细信息,包括缓存级别、大小、分区数等信息。
  • Environment页面可以查看Spark的环境信息。
  • Executors页面可以查看Spark环境中Executors的列表信息。

本地模式环境下,只有一个driver,不含其他Executor,如图所示。

下面通过pyspark交互式命令行提交Spark代码来执行,以经典的WordCount程序来验证Spark环境。将文件words.txt放到服务器上,目前还没有部署HDFS,如果有额外的HDFS也可以上传到HDFS。文件内容如下:

Hello Python
Hello Spark You
Hello Python Spark
You know PySpark

编写WordCount的程序代码,实现文件的读取,按单词统计单词在文件中出现的次数。代码如下:

count = sc.textFile("/home/hadoop/words.txt") \
.flatMap(lambda x: x.split(' ')) \
.map(lambda x: (x, 1)) \
.reduceByKey(lambda a,b: a + b).collect()
print(count)

代码运行完成,统计出words.txt文件中的单词出现的次数,统计结果为3个Hello、2个Python、2个Spark、1个know、1个PySpark和2个You,如图所示。

代码执行完成, Spark Driver Web UI中的数据会发生变化。提交的Spark应用程序的Job列表中,当前运行完成的Job有1个,如图所示。

点击Job列表中的链接,可以看到Job的详细信息,包括Job的执行流程DAG图、Stage的划分、Stage列表等,当前Job被划分成两个Stage,如图所示。

点击Stage列表中的链接,可以看到Stage的详细信息,包括Stage概览信息、执行流程DAG图、Task列表等,如图所示。

在页面底部可以看到Stage中Task的划分情况,当前Stage包含两个Task,如图所示。

使用spark-submit提交代码

交互式pyspark命令行并不适合用于生产环境提交代码执行,在生产环境上运行Spark应用程序,需要将代码开发写入Python文件,将文件保存到系统中的某个路径下,比如/home/hadoop/WordCount.py。WordCount.py的代码如下:

from pyspark import SparkConf, SparkContext

if __name__ == '__main__':
    conf = SparkConf().setAppName("WordCount")
    # 通过SparkConf对象构建SparkContext对象
    sc = SparkContext(conf=conf)
    # 通过SparkContext对象读取文件
    fileRdd = sc.textFile("/home/hadoop/words.txt")
    # 将文件中的每一行按照空格拆分成单词
    wordsRdd = fileRdd.flatMap(lambda line: line.split(" "))
    # 将每一个单词转换为元组,
    wordRdd = wordsRdd.map(lambda x: (x, 1))
    # 根据元组的key分组,将value相加
    resultRdd = wordRdd.reduceByKey(lambda a, b: a + b)
    # 将结果收集到Driver并打印输出
    print(resultRdd.collect())

使用spark-submit命令进行提交运行。spark-submit命令如下:

spark-submit [options] <app jar | python file | R file> [app arguments]

将其中的参数替换为具体的值,在不设置任何选项或者参数的情况下,则只需要指定python file。具体执行命令如下:

$ bin/spark-submit /home/hadoop/WordCount.py

执行命令后,Spark启动相关的进程,进行数据文件处理,输出处理过程中的日志,日志内容如下:

INFO SparkContext: Running Spark version 3.4.0
...
INFO SparkContext: Submitted application: WordCount
...
INFO Utils: Successfully started service 'SparkUI' on port 4040.
INFO Executor: Starting executor ID driver on host node1.internal.cloudapp.net
...
INFO SparkContext: Starting job: collect at /home/hadoop/WordCount.py:16
INFO DAGScheduler: Registering RDD 3 (reduceByKey at /home/hadoop/WordCount.py:14) as input to shuffle 0
INFO DAGScheduler: Got job 0 (collect at /home/hadoop/WordCount.py:16) with 2 output partitions
INFO DAGScheduler: Final stage: ResultStage 1 (collect at /home/hadoop/WordCount.py:16)
...
INFO Executor: Running task 0.0 in stage 0.0 (TID 0)
INFO Executor: Running task 1.0 in stage 0.0 (TID 1)
INFO HadoopRDD: Input split: file:/home/hadoop/words.txt:32+33
INFO HadoopRDD: Input split: file:/home/hadoop/words.txt:0+32
...
INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 1678 bytes result sent to driver
INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 1678 bytes result sent to driver
...
INFO DAGScheduler: looking for newly runnable stages
...
INFO Executor: Running task 0.0 in stage 1.0 (TID 2)
INFO Executor: Running task 1.0 in stage 1.0 (TID 3)
...
INFO Executor: Finished task 0.0 in stage 1.0 (TID 2). 1732 bytes result sent to driver
INFO Executor: Finished task 1.0 in stage 1.0 (TID 3). 1628 bytes result sent to driver
...
INFO DAGScheduler: Job 0 finished: collect at /home/hadoop/WordCount.py:16, took 2.965328 s
[('Hello', 3), ('Python', 2), ('Spark', 2), ('know', 1), ('PySpark', 1), ('You', 2)]
INFO SparkContext: Invoking stop() from shutdown hook
INFO SparkUI: Stopped Spark web UI at http://node1.internal.cloudapp.net:4040
...
INFO SparkContext: Successfully stopped SparkContext
...

通过输出的日志可以了解到Spark应用程序执行情况:

  • 应用名称是WordCount。
  • Spark Driver Web UI端口是4040。
  • collect算子触发job的创建执行,首先会构建DAG图及划分Stage。
  • Stage按顺序执行,Stage 0中实现了将文件拆分成两个分区。
  • collect输出最终的执行结果。
  • 应用程序执行完成后会停止Spark Driver Web UI和SparkContext。

由于Spark Driver Web UI已经停止,所以无法通过浏览器打开查看应用程序的执行情况。

结束语

好了,感谢大家的关注,今天就分享到这里了,更多详细内容,请阅读原书或持续关注专栏。

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

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

相关文章

C语言数据结构-----二叉树(2)堆的深入理解及应用、链式二叉树的讲解及代码实现

前言 本篇文章讲述的内容有部分是上一节写过的。重复内容不会再进行说明&#xff0c;大家可以看上一节内容 链接: C语言数据结构-----二叉树(1)认识数、二叉树、堆及堆的代码实现 文章目录 前言1.使用堆解决TOP-K问题2.向下调整堆的时间复杂度与向上调整堆的时间复杂度对比3.堆…

Android多进程和跨进程通讯方式

前言 我们经常开发过程中经常会听到线程和进程&#xff0c;在讲述Android进程多进程前我打算先简单梳理一下这俩者。 了解什么是进程与线程 进程&#xff1a; 系统中正在运行的一个应用程序&#xff0c;某个程序一旦运行就是一个进程&#xff0c;是资源分配的最小单位&#…

HarmonyOS--基础组件Text

Text组件 可以包含Span子组件。 接口 Text(content? : string | Resource) string: Text(我是ttttt) Resource: Text($r(app.string.aaaaaa)) 先找限定词目录&#xff0c;找不到内容 找base目录 属性 除支持通用属性外&#xff0c;还支持以下属性&#xff1a; 名称 参数…

玄关柜和鞋柜是一回事吗?福州中宅装饰,福州装修

玄关柜和鞋柜虽然都用于存放鞋子&#xff0c;但它们在概念上有所不同。玄关柜是一个更大的概念&#xff0c;它包括鞋柜和其他功能区域&#xff0c;可以说鞋柜是玄关柜的一部分。 1️⃣概念上的不同 玄关柜是一种集成了鞋柜、挂衣架、换鞋凳等多种功能于一体的家居家具&#xf…

大数据安全 | 【实验】Diffie-Hellman密钥交换算法

文章目录 &#x1f4da;关于DH密钥交换算法&#x1f4da;实验目的&#x1f4da;流程梳理&#x1f407;Step1&#xff1a;实现快速幂取模运算&#x1f407;Step2&#xff1a;根据算法原理分别定义公钥和共享密钥的计算&#x1f407;Step3&#xff1a;求解问题一&#x1f407;Ste…

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;可以将链表转为数组&#xff0c;然后从后往前遍历&#xff0c;遇到大于等于当前元素的就入栈&#xff0c;最终栈里面的元素即是最终的答案。解题思路二&#xff1a;递归&am…

uniapp使用vue3的ref获取dom元素出现undefined

在我的代码里面&#xff0c;已经通过ref来定义想要获取的dom了&#xff0c;但是最后在页面渲染完之后&#xff0c;打印这个dom发现竟然是undefined&#xff1a; 获取不到dom元素&#xff1a; 最后查资料发现&#xff1a; 小程序中&#xff0c;uniapp的ref要绑定在子组件中才能…

【算法】【动规】乘积为正数的最长子数组长度

跳转汇总链接 &#x1f449;&#x1f517;算法题汇总链接 1.1 乘积为正数的最长子数组长度 &#x1f517;题目链接 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积…

基于ssm生活缴费系统及相关安全技术的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对生活缴费信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

AI会干掉美图秀秀们吗?

网上流传着这样一个传说&#xff0c;亚洲有三大“邪术”&#xff0c;韩国整容术、日本化妆术&#xff0c;还有震惊世界的中国PS 术。虽然是网友的戏称&#xff0c;但也反映了PS美图技术在国内盛行一时。 而说起美图技术就不得不提到美图公司&#xff0c;但美图公司近些年的日子…

陪玩系统圈子系统:打破孤单,寻找游戏共伴!APP小程序H5三端源码交付,支持二开!喜欢软件开发的朋友可以一起交流!

在如今快节奏的生活中&#xff0c;游戏作为一种娱乐方式&#xff0c;早已融入了人们的生活&#xff0c;成为许多人放松心情、释放压力的方式之一。然而&#xff0c;与此同时&#xff0c;游戏中的孤独感也成为一些玩家所面临的问题。为了解决这个问题&#xff0c;陪玩系统圈子系…

NorFlash 知识点总结

一、介绍 NorFlash&#xff08;也称为 NOR 型闪存&#xff09;是一种非易失性存储器&#xff0c;常用于嵌入式系统和存储设备中。NorFlash 是一种闪存类型&#xff0c;可以用于存储程序代码、固件、操作系统以及其他数据。与 NAND Flash 相比&#xff0c;NorFlash 具有较低的存…

C语言之动态内存管理

一、引言 当我们写了一段程序&#xff0c;创建了一个变量或者一个数组&#xff0c;这些操作都需要在内存中开辟出一块空间。但是我们过去的这些操作有一定的局限性&#xff1a;开辟的空间大小是固定的&#xff0c;并且数组在申明的时候&#xff0c;必须指定数组的长度&#xf…

HarmonyOS创建属性动画

属性动画的使用 1 概述 属性动画&#xff0c;是最为基础的动画&#xff0c;其功能强大、使用场景多&#xff0c;应用范围较广。常用于如下场景中&#xff1a; 一、页面布局发生变化。例如添加、删除部分组件元素。二、页面元素的可见性和位置发生变化。例如显示或者隐藏部分…

RHEL8中ansible的安装

本章主要介绍在RHEL8中如何安装ansible ansible是如何工作的在RHEL8中安装ansible 1.1 ansible的工作原理 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c; ansible就是这样的一种自动化管理工具 ansible是通过…

用print太慢了!强烈推荐这款Python Debug工具~

作为程序员&#xff0c;我们都深知调试&#xff08;Debug&#xff09;在编程过程中的重要性。然而&#xff0c;使用传统的"print"语句进行调试可能效率较低&#xff0c;今天&#xff0c;笔者将推荐一款独具一格的Python调试工具——Reloadium。Reloadium为IDE添加了热…

【PyTorch】卷积神经网络

文章目录 1. 理论介绍1.1. 从全连接层到卷积层1.1.1. 背景1.1.2. 从全连接层推导出卷积层 1.2. 卷积层1.2.1. 图像卷积1.2.2. 填充和步幅1.2.3. 多通道 1.3. 池化层&#xff08;又称汇聚层&#xff09;1.3.1. 背景1.3.2. 池化运算1.3.3. 填充和步幅1.3.4. 多通道 1.4. 卷积神经…

Google Tag Manager账号的创建

1&#xff0c;通过官网链接进入主页面 点击创建账号 官网链接-https://www.tagmanager.google.com 2&#xff0c;按提示填写账号名称 账号名称建议填写网址&#xff0c;或者公司名称&#xff0c;全称简称都可&#xff0c; 国家地区按默认的就好不用特地更改&#xff0c; 不…

MySQL进阶2 - 索引

MySQL进阶1 - 索引 1. 索引概述2. 索引结构2.1 二叉树2.2 B-Tree(多路平衡查找树)2.3 BTree2.4 Hash 3. 索引分类4. 索引语法5. SQL性能分析5.1 SQL执行频率5.2 慢查询日志5.3 profile5.4 explain执行计划5.3.1 EXPLAIN执行计划各字段含义&#xff1a; 6. 索引使…

vue实现滑动验证

效果图&#xff1a; 源码地址&#xff1a;github文档地址&#xff1a; https://github.com/monoplasty/vue-monoplasty-slide-verify 使用步骤&#xff1a;1&#xff0c;安装插件&#xff1a; npm install --save vue-monoplasty-slide-verify 在main.js中使用一下&#xff…