Spark的学习-02

Spark Standalone集群的安装

 

架构:普通分布式主从架构 主:Master:管理节点:管理从节点、接客、资源管理和任务 调度,等同于YARN中的ResourceManager 从:Worker:计算节点:负责利用自己节点的资源运行主节点 分配的任务 功能:提供分布式资源管理和任务调度,基本上与YARN是一致的

pi的测试

 

/opt/installs/spark/bin/spark-submit --master yarn /opt/installs/spark/examples/src/main/python/pi.py 200

上面我们已经在bigdata01上面安装好了Anaconda ,所以接下来不需要再安装,分发到bigdata02、bidata03即可

#上传,或者同步:
xsync.sh /opt/modules/Anaconda3-2021.05-Linux-x86_64.sh   #(分发给02、03)
# 添加执行权限
chmod u+x Anaconda3-2021.05-Linux-x86_64.sh  #(不添加也行, 直接执行在目录下执行即可)
# 执行
sh ./Anaconda3-2021.05-Linux-x86_64.sh  # 过程
#第一次:【直接回车,然后按q】Please, press ENTER to continue>>>
#第二次:【输入yes】Do you accept the license terms? [yes|no][no] >>> yes
#第三次:【输入解压路径:/opt/installs/anaconda3】[/root/anaconda3] >>> /opt/installs/anaconda3#第四次:【输入yes,是否在用户的.bashrc文件中初始化
Anaconda3的相关内容】Do you wish the installer to initialize  Anaconda3by running conda init? [yes|no][no] >>> yes----- 步骤和上面一样刷新环境变量:
# 刷新环境变量
source /root/.bashrc
# 激活虚拟环境,如果需要关闭就使用:conda deactivate
conda activate
配置环境变量:
# 编辑环境变量
vi /etc/profile
# 添加以下内容
# Anaconda Home
export ANACONDA_HOME=/opt/installs/anaconda3
export PATH=$PATH:$ANACONDA_HOME/bin
制作软链接:
# 刷新环境变量
source /etc/profile# 创建软连接
ln -s /opt/installs/anaconda3/bin/python3 /usr/bin/python3

重新再解压spark安装包
# 解压安装
cd /opt/modules
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs
# 重命名
cd /opt/installs
mv spark-3.1.2-bin-hadoop3.2 spark-standalone

我们上面安装好的 Spark的名字是 Spark-local ,上面也创建了软连接,所以现在需要把上面的软链接删除

# 删除上面创建的软连接
rm -rf spark  
# 重新建立新的
ln -s spark-standalone spark

1、修改 spark-env.sh配置文件:

        先启动hdfs

        接着在hdfs上创建目录

# 创建程序运行日志的存储目录
hdfs dfs -mkdir -p /spark/eventLogs/cd /opt/installs/spark/conf
mv spark-env.sh.template spark-env.sh
vim spark-env.sh
# 22行:申明JVM环境路径以及Hadoop的配置文件路径
export JAVA_HOME=/opt/installs/jdk
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
# 60行左右
export SPARK_MASTER_HOST=bigdata01 # 主节点所在的地址
export SPARK_MASTER_PORT=7077 #主节点内部通讯端口,用于接收客户端请求
export SPARK_MASTER_WEBUI_PORT=8080 #主节点用于供外部提供浏览器web访问的端口
export SPARK_WORKER_CORES=1     # 指定这个集群总每一个从节点能够使用多少核CPU
export SPARK_WORKER_MEMORY=1g   #指定这个集群总每一个从节点能够使用多少内存
export SPARK_WORKER_PORT=7078
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_DAEMON_MEMORY=1g  # 进程自己本身使用的内存
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://bigdata01:9820/spark/eventLogs/ -Dspark.history.fs.cleaner.enabled=true"
# Spark中提供了一个类似于jobHistoryServer的进程,就叫做HistoryServer, 用于查看所有运行过的spark程序

2、spark-defaults.conf:Spark属性配置文件

mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf# 末尾
spark.eventLog.enabled           true
spark.eventLog.dir              hdfs://bigdata01:9820/spark/eventLogs
spark.eventLog.compress              true

3、workers:从节点地址配置文件

mv workers.template workers
vim workers
# 末尾处删掉localhost,添加以下内容
bigdata01
bigdata02
bigdata03

4、log4j.properties:日志配置文件

mv log4j.properties.template log4j.properties
vim log4j.properties
# 19行:修改日志级别为WARN
log4j.rootCategory=WARN, console
#  log4j的5种 级别  debug --> info --> warn --error -->fatal

接着在第二台和第三台上,创建软链接

# 同步新压缩好的spark-standalone
xsync.sh /opt/installs/spark-standalone/
# 同步软连接
xsync.sh /opt/installs/spark

启动:

启动master:
cd /opt/installs/spark
sbin/start-master.sh
启动所有worker:
sbin/start-workers.sh
如果你想启动某一个worker
sbin/start-worker.sh启动日志服务:
sbin/start-history-server.sh要想关闭某个服务,将start换为stop

standalone集群启动情况:

master页面:

日志监控页面(18080):

4040和8080端口页面的区别

当有任务进行中的时候,就可以启动4040端口,若此任务并没有执行完毕,集群中又启动了新的端口,就会再启动一个4041端口.....可以一直累加下去

4040端口中任务的执行一结束,就无法再运行此窗口

当启动master等的时候,就会启动8080端口

所以我们在本地模式的时候,是无法启动8080端口的,只能启动4040

此处运行的程序,其实就是4040端口中正在执行的进程,当这个正在running的任务结束后,显示执行完成时,4040端口就打不开了

spark三种模式下4040与8080端口的启动情况:

本地模式:只能启动4040端口 (因为8080端口要启动master才能看到)

standalone(集群)模式: 可以看到4040还可以看到8080端口

Yarn模式:4040、8080都看不到

Spark 4040端口各个模块的作用

Job:

各个界面作用: Job:显示当前这个程序的所有Job,一个程序可以有多个Job Spark中不是所有的代码都会触发Job的产生和运行 所有RDD的转换是不会立即产生job,运行Task任务的,这种模式称为Lazy模式:避免在内存中构建RDD,但是你不用只有遇到了需要使用数据的代码操作才会产生job,触发Task任务的运行 能触发job任务生成的目前有: saveAsTextFile foreach

Stages

 

Stages:显示当前这个程序的所有Stage,一个Job可以有多个 Stage

Stage 可以理解为多个算子组成的阶段,到底有多少个Stage,取决于算子是否会触发shuffle过程。假如有两个触发shuffle过程的算子,整个程序可以切为三个阶段。

当一个Job被触发运行的时候,Spark底层会根据回溯算法构建这个job的执行计划图,即DAG图

每个Job都会有1个DAG图,在构建的时候会根据计算过程中是否要产生shuffle来划分Stage 不产生Shuffle的操作就在同一个Stage中执行,产生Shuffle的操作,会传递到另外一个Stage中执行 最终每个Stage中的操作会转换为对应的Task来执行

每个黑点表示一个RDD

每个矩形框中的RDD的转换都是在内存中完成的

曲线代表经过了Shuffle,灰色代表没有执行,因为之前执行的

Executors

 

显示当前这个程序的运行进程的信息

每个Spark程序都由两种进程组成:一个Driver和多个Executors

Driver进程:负责解析程序,构建DAG图,构建Stage,构建、调度、监控Task任务的运行 Executor进程:负责运行程序中的所有Task任务

Storage:显示当前这个程序在内存缓存的数据信息 。

Environment:显示当前这个程序所有的配置信息。

Spark-submit提交

# 提交程序的语法
# spark-submit [可选的选项] Python文件 Python文件中用到的参数
spark-submit --master local[2] / spark://bigdata01:7077 / yarn \
……
hdfs://bigdata01:9820/spark/app/pyspark_core_word_args.py /spark/wordcount/input /spark/wordcount/output

spark-submit中各个参数的意义

其实就是在将 提交命令的 [options] 可以写什么。--master:用于指定程序运行的模式,5种模式,本地模式、Standalone、yarn、Mesos、K8s本地模式:--master localStandalone模式:--master spark://master:7077YARN模式:--master yarn作用等同于代码中:setMaster
--deploy-mode:用于指定Driver进程运行位置 【重点,后面展开讲】
--name:用于指定程序的名称,作用等同于代码中:setAppName
--jars:用于指定一些额外的jar包,例如读写MySQL时候需要用到MySQL的驱动包
--conf:用于指定当前程序运行的额外的一些配置,作用等同于代码中:set

Driver资源选项

Driver资源选项:主要用于构建一个非RDD的操作
--driver-memory:指定Driver进程能够使用的内存大小,默认是1G
--driver-cores:指定Driver进程能够使用的CPU核数,默认是1Core
--supervise:指定如果Driver故障,就自动重启

executor可以使用的参数:

运行这个程序的一个进程
需要的资源,资源都是来自于从节点--executor-cores 4--executor-memory 16
参数解释:
--executor-memory:指定每个Executor能够使用多少内存
--executor-cores:指定每个Executor能够使用多少CPU
--total-executor-cores:Standalone集群模式,指定所有Executor总共使用的CPU核数,用于间接指定Executor的个数
--num-executors:YARN集群模式,直接指定Executor的个数
--queue:指定提交程序到哪个队列中运行

加载顺序:优先级:代码中配置【set】 > 参数选项【--conf】 > 配置文件【公共配置:spark-defualt.conf】

实战测试:

将下面代码在pycharm中写好,然后直接拖拽到虚拟机中指定的路径下

#!/usr/bin/env python
# -*- coding: utf-8 -*-from pyspark import SparkContext, SparkConf
import os
import sys"""
-------------------------------------------------Description :        TODO:用于实现词频统计SourceFile  :        04.pyspark_core_wordcount_hdfs_args
-------------------------------------------------
"""if __name__ == '__main__':# todo:0-设置系统环境变量# os.environ['JAVA_HOME'] = 'D:/jdk1.8.0_241'# os.environ['HADOOP_HOME'] = 'D:/hadoop-3.3.0'# os.environ['PYSPARK_PYTHON'] = 'D:/Anaconda/python.exe'# os.environ['PYSPARK_DRIVER_PYTHON'] = 'D:/Anaconda/python.exe'# os.environ['HADOOP_USER_NAME'] = 'root'# todo:1-构建SparkContext# 甚至 任务的名字都可以不写,让提交任务的时候指定conf = SparkConf().setAppName("SparkSubmitApp")# .setMaster("local[2]")\sc = SparkContext(conf=conf)# todo:2-数据处理:读取、转换、保存# step1: 读取数据:SparkContext对象负责读取文件,用传递的第二个参数作为程序的输入地址input_rdd = sc.textFile(sys.argv[1])# 输出第一行# print(input_rdd.first())# 打印总行数# print(input_rdd.count())# step2: 处理数据rs_rdd = input_rdd\.filter(lambda line: len(line.strip()) > 0)\.flatMap(lambda line: line.strip().split(" "))\.map(lambda word: (word, 1))\.reduceByKey(lambda tmp,item: tmp+item)# step3: 保存结果# 打印结果rs_rdd.foreach(lambda x: print(x))# 结果保存到文件中:路径不能提前存在,将第二个参数作为输出路径rs_rdd.saveAsTextFile(sys.argv[2])# todo:3-关闭SparkContextsc.stop()

开始编写命令,提交任务

注意:我们前面已经将spark的软连接链接到了 standalone(集群)上,所以需要先把之前的软连接删除掉,重现创建新的,指向本地

# 删除原来的软连接
rm -rf /opt/installs/spark
# 创建新的软连接指向
ln -s /opt/installs/spark-local /opt/installs/spark

本地(local)

spark-submit \
--master local[2] \
/home/_pytSparkDemo04-yuancheng.py \
/home/data.txt \
/home/output02

和上面一样,也需要将软连接再连回来

# 删除原来的软连接
rm -rf /opt/installs/spark
# 创建新的软连接指向
ln -s /opt/installs/spark-standalone /opt/installs/spark

集群(standalone)

spark-submit \
--master spark://bigdata01:7077 \
/home/_pytSparkDemo04-yuancheng.py \
hdfs://bigdata01:9820/spark/wordcount/input \
hdfs://bigdata01:9820/spark/wordcount/jiqun01

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

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

相关文章

Vue前端框架

一.Vue概述 *Vue 是一套前端框架,用于免除原生JavaScript中的DOM 操作,简化书写。 *基于MVVM(Model-View-ViewModel)思想,实现数据的双 向绑定,将编程的关注点放在数据上。 *官网: https://cn.vuejs.org/ 二.Vue快速…

软件设计师 7日速成

数据流图和数据字典 数据流图 定义 数据流图是一种图形化的工具,用于描述系统中数据的流动情况。它可以帮助我们可视化数据在系统中的处理过程,包括数据的来源、去向、存储位置以及处理方式。 组成元素 数据流图通常包含以下四个基本元素&#xff1…

基于 Vue3、Vite 和 TypeScript 实现开发环境下解决跨域问题,实现前后端数据传递

引言 本文介绍如何在开发环境下解决 Vite 前端(端口 3000)和后端(端口 80)之间的跨域问题: 在开发环境中,前端使用的 Vite 端口与后端端口不一致,会产生跨域错误提示: Access to X…

【Allure】allure装饰器函数

**allure装饰器**​作用:用于将测试用例的数据展示到测试报告中 1.需要将这些装饰器函数添加**测试方法或测试类的开头**。2.同一个类或者一个方法可以添加多个装饰器函数 ,这样此用例就具有了个作用属性 。 allure.epic() 敏捷中的概念 项目名称 allu…

python验证码滑块图像识别

文章目录 1、案例图片1、需求说明2、代码实现总结 1、案例图片 1、需求说明 python 3.10,写一个滑块验证码的自动化程序。需要一个opencv的函数,能准确的计算,在这同一张图片上,滑块形状和缺口形状的坐标位置及两个形状之间在X轴上的距离。请…

Linux基础-常用操作命令详讲

Linux基础-常用操作命令详讲 一、openssl加密简单介绍 1. 生成加密的密码散列(password hash)​编辑 1.1 常见的选项总结表 1.2 加密参数详解 2. 自签名证书 3. 证书转换 二、文件管理 1. 创建空文件 ​编辑 2. 删除文件 4. 新建目录 ​编辑…

【RAG系列】KG-RAG 用最简单的方式将知识图谱引入RAG

目录 前言 一、引入知识图谱的作用 二、引入知识图谱的挑战 三、KG-RAG的理论 query多跳有限性 知识局部密集性 四、KG-RAG的方法 向量入库 向量相似搜索 扩展子图 LLM Rerank LLM response 五、效果比对 六、源码 总结 前言 本文介绍一种比较新颖的RAG范式&am…

编程语言越来越多,为什么C/C++还没有被现在的时代淘汰呢?

近年来,随着人工智能、大数据等领域的兴起,各种新兴编程语言层出不穷,例如Python、Go等,它们以更简洁的语法、更丰富的库以及更友好的开发体验,吸引了大量开发者。 在这样的背景下,不少人开始质疑C/C这类“…

Docling:开源的文档解析工具,支持多种格式的解析和转换,可与其他 AI 工具集成

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号&#xff…

学习笔记:Spring框架源码Part.2——核心

学习视频链接:https://www.bilibili.com/video/BV1zd4y1L7YD Spring学习笔记——核心 前言第三章 容器和上下文一、认识bean工厂1、基础能力2、更强的枚举能力3、灵活的分层能力4、构建和自动装配的能力5、更强的配置能力6、更多配置项7、工厂的生命周期 二、bean工…

linux守护进程与后台进程的区别

守护进程与后台进程有以下区别: 1. 概念与定义 后台进程: 是指在操作系统后台运行的进程,它不与用户直接交互(没有连接到用户的终端)。用户在终端中启动一个程序并让其在后台运行(如通过在命令后加“&…

【360】基于springboot的志愿服务管理系统

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装志愿服务管理系统软件来发挥其高效地信息处理的作用&#x…

【LLM Agents体验】Dify框架的安装指南

Dify简介: 核心功能‌12 ‌Dify是一款开源的大语言模型(LLM)应用开发平台,融合了后端即服务(Backend as a Service, BaaS)和LLMOps的理念,使开发者可以快速搭建生产级的生成式AI应用。LLMOps涵盖了大型语言模型的开发、…

TODO Error occurred while trying to proxy:【】

文章目录 场景异常解决 场景 使用 Ant Disign Pro 连接本地接口。 异常 Error occurred while trying to proxy: localhost:8000/api/login/account?token%20%20123[HPM] Error occurred while proxying request localhost:8000/api/login/account?token%20%20123 to http…

Linux 文件基本属性

1.Linux 文件基本属性 Linux 系统是一种典型的多用户系统,不同用户处于不同地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。Linux 通常使用以下两…

数据结构-归并排序笔记

【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 看这个学思路 一 归并排序介绍: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解&#xf…

关于使用python pptx生成或“复制”PPT页面的问题

先说两个结论: 对于主题不完全相同的页面,pptx 无法完全复制PPT页面,文字图片可以复制,但是背景之类的无法复制pptx 无法直接在指定页码或者指定页面后插入页面 今天做项目的时候,需要根据PPT模板使用python生成相应…

Uniapp底部导航栏设置(附带PS填充图标教程)

首先需要注册和登录ifconfont官网,然后创建项目添加需要的图标 创建和添加图标库请参考:Uniapp在Vue环境中引入iconfont图标库(详细教程) 打开iconfont官网,找到之前添加的图标库,下载png图片 如果需要的…

算法——双指针

目录 前言一、什么是双指针二、算法特点三、算法实现步骤四、常见形式五、应用场景与示例六、优势与注意事项七、双指针算法动态图解八、经典例题[1. 回文判定](https://www.lanqiao.cn/problems/1371/learning/?page1&first_category_id1&name%E5%9B%9E%E6%96%87%E5%…

L6.【LeetCode笔记】合并两个有序链表

1.题目 https://leetcode.cn/problems/merge-two-sorted-lists/ 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2&…