2024.1.2 Spark 简介,架构,环境部署,词频统计

news2024/12/23 22:49:57

目录

一. Spark简介 

二 . Spark 框架模块

三. 环境准备

3.1 Spark Local模式搭建 

3.2 通过Anaconda安装python3环境

3.3 PySpark库安装

 四 . Spark集群模式架构介绍

五. pycharm远程开发环境 

 六. Spark词频统计


一. Spark简介 

        1. Spark 和MapReduce

MR:大量的磁盘反复写入,运行是基于进程进行数据处理,创建和销毁的过程比较消耗资源,并且速度较慢

Spark:基于线程执行任务,引入新的数据结构RDD(弹性分布式数据集),让spark基于内存进行运行,比磁盘速度快很多 

        2. 进程与线程

进程:app,不同软件

线程:微信里的每个聊天对话

        3. 四大特点

高效性 (快), 易用性(多语言), 通用性(提供了多个工具库), 兼容性(任何地方运行)


二 . Spark 框架模块

 

 Spark Core:实现Spark的基本功能

Spark Sql : 使用Sql处理结构化数据

Strctured Streaming :基于Spark SQL进行流式/实时的处理组件,主要处理结构化数据


三. 环境准备

三台虚拟机 的快照恢复到spark阶段

主机做ip地址映射

3.1 Spark Local模式搭建 

local模式 指的是在本地一个进程中,创建多个线程来模拟Spark程序分布式运行

 1.把包放到虚拟机中

 

2. cd命令进到目录中,然后命令解压  

tar -zxf spark-3.1.2-bin-hadoop3.2.tgz  -C /export/server/

解压后重命名一下

mv spark-3.1.2-bin-hadoop3.2 spark

之后 进到bin目录

cd /export/server/spark/bin

使用命令开启spark

./spark-shell

 

Spark context available as 'sc' (master = local[*], app id = local-1704164639145).
Spark session available as 'spark'.

其中''sc ''是SparkContext实例对象

''spark'' 是SparkSession 实例对象

3.2 通过Anaconda安装python3环境

Spark是一个独立的框架

PySpark是Python的库,由Spark官方提供

1.下载好包

 

2.上传到三台虚拟机中

 3.执行脚本

bash Anaconda3-2021.05-Linux-x86_64.sh

运行后阅读一堆注意事项,然后yes,回车,开始下载库,会有点久,三台都需要运行 

 4.配置环境变量

配置anaconda的环境变量,三个节点都需要进行相同的操作:

vim /etc/profile

##增加如下配置

export ANACONDA_HOME=/root/anaconda3/bin

export PATH=$PATH:$ANACONDA_HOME

重新加载环境变量: source /etc/profile

修改bashrc文件,三个节点都需要进行相同的操作:

sudo vim ~/.bashrc

在最上面添加如下内容:

export PATH=~/anaconda3/bin:$PATH

添加完后,node1重新连接一下,如果命令前面出现了(base),就再去到 vim ~/.bashrc ,在最后一行插入conda deactivate

最后输入python,版本为3.8.8就是安装完了 

3.3 PySpark库安装

1.把这个包传到虚拟机中

2.传好后不用解压,在software文件路径里直接敲命令运行

pip install pyspark-3.1.2.tar.gz

 py4j: 将python代码转换成java代码

运行Spark 

 cd /export/server/spark/bin

./pyspark

测试圆周率

cd /export/server/spark/bin

./spark-submit /export/server/spark/examples/src/main/python/pi.py 100

 四 . Spark集群模式架构介绍

一个主角色 Master的职责:

        1.管理众多的从角色

        2.负责资源管理和任务的分配

        3.将Driver进程分配给到Worker进行运行

        4.接收Spark任务的请求

多个从角色 Worker的职责 :

        1. 负责具体任务的执行

        2.向Master汇报心跳,汇报任务运行的状态

        3.Driver随机选择一个Worker从角色进行启动和运行

        4.接收执行来自Driver分配来的任务

Zookeeper高可用环境下为了防止单点故障,会有多个Master,主节点的角色分为Active和Standby

五. pycharm远程开发环境 

    远程连接方案, 允许所有的程序员都去连接远端的测试环境, 确保大家的环境都是统一的, 避免各种环境问题的发生,而且由于是连接的远程环境, 所有在pycharm编写代码 都会自动上传到远端服务器中, 在执行代码的时候, 相当于是直接在远端环境上进行执行操作

1.创建新项目是连接ssh

2.选择python解释器在虚拟机里的位置

3.pycharm里勾选tools的deployment 的automatic upload

4.pycharm里tools选择最下面的browse remote host,就可以在pycharm里显示虚拟机的文件目录了

 

 六. Spark词频统计

1.需求描述

读取文本文件,文件内容是一行一行的文本,每行文本含有多个单词,单词间使用空格分隔。统计文本中每个单词
出现的总次数。 WordCount 词频统计。
文本内容如下:
hello hello spark
hello heima spark

 

代码流程步骤:

创建Spark Context对象

数据输入

数据处理

        文件内容切分

        数据格式转换

        分组和聚合

数据输出

释放资源

 需要自己建一个文件先,存储要统计的词语,路径为

'file:///export/data/2024.1.2_Spark/1.2_day01/content.txt'

import os
from pyspark import SparkConf, SparkContext
# 指定远端的环境地址
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
# pyspark程序运行需要有main函数入口
if __name__ == '__main__':
    print("PySpark入门案例:WordCount词频统计")
    # 创建SparkContext对象(Spark基础的顶级对象)
    """
    setAppName:设置Spark程序运行时的名称
    setMaster:设置Spark程序运行模式,这里是设置的本地模式
    """
    conf = SparkConf().setAppName('spark_wordcount_demo').setMaster('local[*]')
    sc = SparkContext(conf=conf)
    # 数据输入
    """
    textFile:读取文件。支持本地文件系统和HDFS文件系统
    本地文件系统:file:///路径
    HDFS文件系统:hdfs://node1:8020/路径
    """
    init_rdd =sc.textFile('file:///export/data/2024.1.2_Spark/1.2_day01/content.txt')
    # 数据处理
    # 文本内容切分:flatMap
    # 输出结果:['hello', 'hello', 'spark', 'hello', 'heima', 'spark']
    flatmap_rdd = init_rdd.flatMap(lambda line: line.split(' '))
    # 数据格式转换:map hello -> (hello,1)
    # 输出结果:[('hello', 1), ('hello', 1), ('spark', 1), ('hello', 1), ('heima', 1),('spark', 1)]
    map_rdd = flatmap_rdd.map(lambda word: (word,1))
    # 分组和聚合:reduceByKey
    # 输出结果:[('hello', 3), ('spark', 2), ('heima', 1)]
    """
    reduceByKey:该算子是先对数据按照key进行分组,分组的时候会将value放到一个List列表当中。然
    后对value形成的List列表进行聚合处理
    lambda agg,curr: agg+curr 这个自定义的lambda表达式的实际含义是:agg是中间临时聚合结果,
    默认值是列表中的第一个元素,
    curr是当前遍历到的元素,默认值是列表中的第二个元素。agg+curr实际上是等同于agg=agg+curr
    底层运行过程说明,以hello为例,首先是分组
    输入的是:[('hello', 1), ('hello', 1), ('spark', 1), ('hello', 1), ('heima', 1),
    ('spark', 1)]
    分组后的结果: hello [1,1,1]
    spark [1,1]
    heima [1]
    2-接着是聚合操作
    第一次聚合:agg的值是1,curr的值是1,聚合结果是1+1=2,并且会将结果赋值给agg,所以第一次聚合
    之后agg的就变成了2
    第二次聚合:agg的值是2,curr的值是1,聚合结果是2+1=3,并且会将结果赋值给agg。由于已经将
    value形成的List列表中元素遍历完成了,所以最终hello的结果就是3
    """
    result_rdd = map_rdd.reduceByKey(lambda agg, curr: agg + curr)
    # 数据输出
    print(result_rdd.collect())
    # 释放资源
    sc.stop()

结果:

 

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

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

相关文章

vmware安装龙蜥操作系统

vmware安装龙蜥操作系统 1、下载龙蜥操作系统 8.8 镜像文件2、安装龙蜥操作系统 8.83、配置龙蜥操作系统 8.83.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载龙蜥操作系统 8.8 镜像文件 这里选择 2023年2月发布的 8.8 版本 官方下载链接 https://mirro…

使用拉普拉斯算子的图像锐化的python代码实现——数字图像处理

原理 拉普拉斯算子是一个二阶导数算子,用于图像处理中的边缘检测。它通过计算图像亮度的二阶空间导数来工作,能够突出显示图像中的快速变化区域,如边缘。 图像锐化的原理: 图像锐化是指增强图像中的边缘和细节,使图像…

VMware 虚拟机 ubuntu 20.04 硬盘扩容方法

前言 最近由于需要编译 【RK3568】的 Linux SDK,发现 虚拟机默认的 200G 空间不足了,因此想增加这个 200G 空间的限制,通过网络上查找了一些方法,加上自己亲自验证,确认 硬盘扩容 正常,方法也比较的容易&a…

微服务-OpenFeign-工程案例

Ribbon 前置知识 是NetFlix的开源项目,主要来提供关于客户端的负载均衡能力。从多个服务提供方,选取一个节点发起调用。 Feign:NetFlix,SpringCloud 的第一代LB(负载均衡)客户端工具包。 OpenFeign:SpringCloud自研&#xff0c…

计算机基础面试题 |03.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

c语言内嵌汇编知识点记录

内容在飞书云文档,点击打开即可。 Docshttps://r0dhfl3ujy9.feishu.cn/docx/EaVIdjGVeoS6fUxiKWkcjAq8nWg?fromfrom_copylink

使用定时器setInterval,在Moment.js 时间格式化插件基础上完成当前时间持续动态变化

1、引入插件 npm install moment --save 2、js配置&#xff1a;当前需要使用的文件中直接引入 import moment from moment; 3、代码实现&#xff1a;定义一个变量进行回显 3.1、dom部分 <span> {{ timeData }} </span> 3.2、js代码 <script> import mo…

C++初阶------------------入门C++

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

单片机开发--keil5

一.keil5 Keil uVision5是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于对嵌入式系统中的微控制器进行编程。它是一个软件套件&#xff0c;包括源代码编辑器、项目经理、调试器以及微控制器开发、调试和编程所需的其他工具。Keil uVision5 IDE主要用于对基于A…

python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error

python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error 废话不说&#xff0c;先上代码&#xff0c;根据官网的介绍写的,chatgpt3.5 api简单调用 import os from openai import OpenAI from dotenv import load_dotenv# 加载 .env 文件中的变量 load_…

基于矩阵乘的CUDA编程优化过程

背景&#xff1a;网上很多关于矩阵乘的编程优化思路&#xff0c;本着看理论分析万遍&#xff0c;不如实际代码写一遍的想法&#xff0c;大概过一下优化思路。 矩阵乘的定义如下&#xff0c;约定矩阵的形状及存储方式为: A[M, K], B[K, N], C[M, N]。 CPU篇 朴素实现方法 按照…

阿里云域名外部入库流程

注册商是阿里云&#xff0c;且在阿里云管理的&#xff0c;请使用此教程外部入库。 如您的域名注册商是阿里云但在聚名管理&#xff0c;请参考教程&#xff1a;https://www.west.cn/faq/list.asp?unid2539 在外部入库操作之前&#xff0c;请先登录阿里云获取账号ID。详细的账…

SPSS25软件安装包下载及安装教程

SPSS 25下载链接&#xff1a;https://docs.qq.com/doc/DUlFFZ0dpWVhUZFpW 1.选中下载好的安装包&#xff0c;鼠标右键解压到“SPSS 25 64bit”文件夹 2.选中”SPPS 25 64bit.exe“鼠标右击选择以管理员身份运行 3.点击“下一步” 4.选择“我接受许可协议中的全部条款”&#x…

Hive06_基础查询

HIVE 查询语句 1 查询语句语法&#xff1a; SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMI…

YOLOv8改进:IoU系列篇 | Shape-IoU关注边界框本身的形状和尺度来计算损失 | 2023年12月最新IoU改进

🚀🚀🚀本文改进: 提出了一种新颖的Shape-IoU,小目标检测实现涨点,更加关注边界框本身的形状和尺度来计算损失 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.Shape-IoU原理介绍 论文:https://ar…

window下载安装Mongodb数据库

我们先要访问他的官网 https://www.mongodb.com/zh-cn 然后顶部导航栏 选择 (Products/产品) 下的 (Community Edition/社区版) 进入界面后 找到 MongoDB Community Server Download 点击下面的按钮 Select package 然后会弹到这个位置 第一个版本 用系统默认选择的就好 第二…

第三百四十一回

文章目录 1. 概念介绍2. 使用方法与主要功能2.1 使用方法2.2 主要功能 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取App自身信息"相关的内容&#xff0c;本章回中将介绍一个三方包:open_setting.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念…

mysql报错:can‘t create more than max_prepared_stmt_count statements

max_prepared_stmt_count 参数控制了一个 MySQL 实例能够准备的最大预处理语句&#xff08;prepared statements&#xff09;的数量。 预处理语句是一种优化技术&#xff0c;可以在应用程序发送sql语句到数据库之前先将其编译和缓存起来&#xff0c;以提高sql的执行效率以及防…

【Amazon Bedrock】体验 Bedrock 的基本功能,为构建强大安全的LLM应用而准备

文章目录 一、什么是Amazon Bedrock&#xff1f;二、为什么选择 Amazon Bedrock三、访问Amazon Bedrock UI四、与Amazon Bedrock 聊天五、对比Amazon Bedrock 不同基础模型的返回结果六、让Amazon Bedrock处理文本七、利用Amazon Bedrock生成图片八、参考链接 一、什么是Amazon…

CMake入门教程【基础篇】打印(message)

文章目录 1. 基本用法示例 2. 打印变量的值示例 3. 打印列表的值示例 4. 打印生成器表达式的值示例 5.总结 #mermaid-svg-pXC2tr41PvHonKJa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pXC2tr41PvHonKJa .error-…