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.rhkb.cn/news/468242.html

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

相关文章

白杨SEO:百度在降低个人备案类网站搜索关键词排名和流量?怎样应对?【参考】

很久没有写百度或者网站这块内容了,一是因为做百度网站朋友越来越少,不管是个人还是企业;二是百度上用户搜索与百度给到网站的流量都越来越少。 为什么想到今天又来写这个呢?因为上个月有个朋友来咨询我说网站百度排名全没了&…

一个怀旧,俺的第一个共享软件

今天网友说起了 福彩双色球的程序。俺就想起这个来了,这是俺的第一个共享软件,收入大约15000。在当时来说,速度算是最快的。有些地方用了汇编优化(题外话,最近俺看到新闻,FFmpeg的作者也用汇编优化 性能提升…

QCustomPlot添加自定义的图例,实现隐藏、删除功能(二)

文章目录 QCustomPlot初识和基本效果图实现步骤:详细代码示例:实现原理和解释:使用方法:其他参考要实现一个支持复选框来控制曲线显示和隐藏的自定义 QCPLegend 类,可以通过继承 QCPLegend 并重写绘制和事件处理方法来实现,同时发出信号通知曲线的状态变更。 QCustomPl…

96.【C语言】存储体系结构

目录 1.金字塔图 2.形象理解的图 3.分析 4.推荐阅读 1.金字塔图 2.形象理解的图 3.分析 缓存的大小<<内存的大小 缓存分三级:速度:一级>二级>三级 在95.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数文章遗留了一个问题,缓存命…

智能合约在供应链金融中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 智能合约在供应链金融中的应用 智能合约在供应链金融中的应用 智能合约在供应链金融中的应用 引言 智能合约概述 定义与原理 发展…

ODOO学习笔记(4):Odoo与SAP的主要区别是什么?

Odoo 和 SAP 都是知名的企业资源规划&#xff08;ERP&#xff09;软件&#xff0c;它们之间存在以下一些主要区别&#xff1a; Odoo与SAP的区别 一、功能特点 功能广度 Odoo&#xff1a;提供了一整套全面的业务应用程序&#xff0c;涵盖了销售、采购、库存管理、生产、会计、…

Leetcode 买卖股票的最佳时机 Ⅱ

使用贪心算法来解决此问题&#xff0c;通过在价格上涨的每一天买入并在第二天卖出的方式&#xff0c;累计所有上涨的利润&#xff0c;以实现最大收益。关键点是从第二天开始遍历&#xff0c;并且只要当前比前一天价格高&#xff0c;我们就在前一天买入然后第二天卖出去。下面是…

Unity常见问题合集(一)

PS&#xff1a;不定期更新...... 目录 &#xff08;1&#xff09;无法关闭自动编译&#xff08;Edit — Preference — General — Auto Refresh&#xff09; &#xff08;1&#xff09;无法关闭自动编译&#xff08;Edit — Preference — General — Auto Refresh&#xff0…

库打包工具 rollup

库打包工具 rollup 摘要 **概念&#xff1a;**rollup是一个模块化的打包工具 注&#xff1a;实际应用中&#xff0c;rollup更多是一个库打包工具 与Webpack的区别&#xff1a; 文件处理&#xff1a; rollup 更多专注于 JS 代码&#xff0c;并针对 ES Module 进行打包webpa…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析&#xff0c;特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力&#xff0c;以对象为为驱动的模型&#xff0c;主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“

我的个人主页 接下来我将方享四道由易到难的编程题&#xff0c;进入我们的JavaSE复习之旅。 1&#xff1a;大小写转换------题目链接 解题思路&#xff1a; 在ASCII码表中&#xff0c;⼤写字⺟A-Z的Ascii码值为65- 90&#xff0c;⼩写字⺟a-z的Ascii码值为97-122。每个字 ⺟…

基于Zynq FPGA对雷龙SD NAND的性能测试评估

文章目录 一、SD NAND特征1.1 SD卡简介1.2 SD卡Block图 二、SD卡样片三、Zynq测试平台搭建3.1 测试流程3.2 SOC搭建 四、软件搭建五、测试结果六、总结 一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND系列有多种型号&#xff0c;本次测试使用的是CSNP4GCR01-AMW和CSNP32GCR01-A…

使用AT指令通过ESP8266实现TCP/IP服务器的创建、发送数据和接收数据

1. 初始化ESP8266 首先&#xff0c;确保ESP8266模块进入AT指令模式。 AT 2. 设置ESP8266为STA或APSTA模式 首先&#xff0c;确保ESP8266处于正确的模式。为了创建TCP/IP服务器&#xff0c;通常需要设置为STA模式&#xff08;连接到外部路由器&#xff09;或APSTA模式&#x…

Springboot+Vue+mysql前后端分离的Java项目部署教程

参考了网上许多文章&#xff0c;有的使用的是nginx&#xff0c;eclipse&#xff0c;其实只要是数据库或者java的软件基本都大同小异。 本人使用phpstudy对项目进行部署&#xff0c;亲测有效。 需要的软件&#xff1a; 1.Node.js安装&#xff08;ps&#xff1a;这一步我也不知道…

【MySQL】数据库整合攻略 :表操作技巧与详解

前言&#xff1a;本节内容讲述表的操作&#xff0c; 对表结构的操作。 是对表结构中的字段的增删查改以及表本身的创建以及删除。 ps&#xff1a;本节内容本节内容适合安装了MySQL的友友们进行观看&#xff0c; 实操更有利于记住哦。 目录 创建表 查看表结构 修改表结构 …

常用的c++新特性-->day03

断言和异常 断言断言的基本使用 静态断言静态断言的基本使用 异常异常基本使用c98异常案例 noexceptnoexcept简单案例 断言 断言的基本使用 #include <iostream> #include <cassert>// >>>>>>>>>>>>>>>> 断言的…

Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)

数据可视化或者数据绘图是数据分析中最重要的任务之一&#xff0c;是数据探索过程的一部分&#xff0c;数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员&#xff0c;构建基于Web的数据可视化显示也是一种重要的方式。Pyth…

shell中执行hive指令以及hive中执行shell和hdfs指令语法

0. 简介 主要介绍了三种环境命令执行语法&#xff1a; shell中执行hive指令hive中执行shell指令hive中执行hdfs指令 1. shell中执行hive指令 语法&#xff1a;hive [-hiveconf xy]* [<-i filename>]* [<-f filename> | <-e query-string>] [-S] 说明&…

区块链技术入门:以太坊智能合约详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术入门&#xff1a;以太坊智能合约详解 区块链技术入门&#xff1a;以太坊智能合约详解 区块链技术入门&#xff1a;以太…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…