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

目录

一. 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()

结果:

 

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

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

相关文章

LiveGBS流媒体平台GB/T28181常见问题-国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道

LiveGBS国标GB28181中国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道 1、什么是国标编号?2、国标设备ID和通道ID3、ID 统一编码规则4、搭建GB28181视频直播平台 1、什么是国标编号? 国标GB28181对接过程中,可能有的小…

Vue入门一(前端发展史|Vue介绍|Vue插值语法|Vue指令|style与class使用|条件渲染)

文章目录 一、前端的发展史二、Vue介绍 和 基本使用1) Vue介绍2) Vue特点3) M-V-VM思想1.MVVM介绍2.MVVM的特性3.MVVM逻辑 4) 组件化开发、单页面开发组件化开发单页面开发 5) 引入方式6) 补充解释型的语言是需要解释器的 nodejs:一门后端语言7) 快速使用 三、Vue之…

JavaScript异常处理详解

前言 本文将带你了解 JavaScript 中常见的错误类型,处理同步和异步 JavaScript代码中错误和异常的方式,以及错误处理最佳实践! 1. 错误概述 JavaScript 中的错误是一个对象,在发生错误时会抛出该对象以停止程序。在 JavaScript…

代码随想录刷题题Day26

刷题的第二十六天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C Day26 任务 ● 动态规划理论基础 ● 斐波那契数 ● 爬楼梯 ● 使用最小花费爬楼梯 1 动态规划理论基础 对于动态规划问题&#x…

小白入门基础 - spring Boot 入门

1.简介 spring Boot是为了简化java的开发流程而构建的,即使是使用springMVC框架,也依然需要大量配置和依赖导入, 这无疑是繁琐的,spring Boot采用了”习惯由于配置“的原则,进行一键化部署,这样极大…

【建议收藏】一文全面解读Linux最常用的解压缩命令(tar、zip、unzip、gzip、guznip、bzip2、bunzip2)

一文全面解读Linux最常用的解压缩命令(tar、zip、unzip、gzip、guznip、bzip2、bunzip2),建议收藏 文章目录 一文全面解读Linux最常用的解压缩命令(tar、zip、unzip、gzip、guznip、bzip2、bunzip2),建议收…

2017年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

昨天,六分成长给大家了做了一套2024年AMC8比赛的全真模拟试题,40分钟,25道题,并且提供了答案,所有试题来自过去20年的真题,不知道你做对了多少?一定要让孩子抽40分钟,认真的做一做&a…

mnn-llm: 大语言模型端侧CPU推理优化

在大语言模型(LLM)端侧部署上,基于 MNN 实现的 mnn-llm 项目已经展现出业界领先的性能,特别是在 ARM 架构的 CPU 上。目前利用 mnn-llm 的推理能力,qwen-1.8b在mnn-llm的驱动下能够在移动端达到端侧实时会话的能力,能够在较低内存…

数字人克隆:人类科技进步的里程碑

数字人克隆,作为一项引起广泛争议和关注的科技创新,正在逐渐走向我们的生活。它是将人的意识和思想复制到数字化的实体中,从而使之与真正的人类无异。数字人克隆的出现不仅引发了人们对道德伦理问题的讨论,也给人类社会带来了巨大…

频率域图像增强之理想低通滤波器的python实现——数字图像处理

原理 理想低通滤波器(Ideal Low-Pass Filter, ILPF)是数字图像处理中一个重要的概念,尤其在频率域滤波中扮演着关键角色。 定义: 理想低通滤波器是一种在频率域内工作的滤波器,旨在通过允许低频信号通过同时阻止高频信…

mysql5.7安装-windwos免安装版本

下载地址 官网地址:https://www.mysql.com/官网下载地址:https://dev.mysql.com/downloads/mysql/阿里云镜像站下载:https://mirrors.aliyun.com/mysql/华为云镜像站地址:https://mirrors.huaweicloud.com/home华为云镜像站下载:https://mirrors.huaweicloud.com/mysql/Downlo…

MSVCP140_1.dll文件丢失的解决方法指南,MSVCP140_1.dll最快捷的修复手段

在近些年里,随着电脑技术的迅猛进步,我们对操作系统变得越来越依赖。然而,在使用过程中,我们也可能偶遇一些技术挑战,比如遇到 MSVCP140_1.dll 文件丢失的问题。本文旨在深入探讨这个常见的技术难题,并为大…

跑通大模型领域的 hello world

跑通书生浦语大模型的 3 个趣味 demo(InternLM-Chat-7B 智能对话、Lagent工具调用解简单数学题、浦语灵笔多模态图文创作和理解)视频和文档。 1、两个框架 InternLM 是⼀个开源的轻量级训练框架,旨在⽀持⼤模型训练⽽⽆需⼤量的依赖。 Lage…

瞧瞧别人家的电商【淘宝1688京东】API接口,那叫一个优雅

淘宝、京东等电商平台的API接口确实非常强大和优雅,它们提供了丰富的功能和数据,使得开发者可以轻松地与平台进行交互,实现各种应用和功能。 以下是一些可能会让你感到优雅的淘宝、京东等电商平台的API接口特点: 接口设计简洁明…

力扣:15.三数之和

1.做题链接:. - 力扣(LeetCode) 2.做题前须: 两数之和降低复杂度: 1.问题描述:一个数组中找到两个数字之和是taeget 例如:[2,7,11,15,19,21],target30 2.解法一:暴力枚举时间复…

【致远FAQ】V8.0_甘特图能不能实现行表头一级一级显示(树形结构)

问题描述 甘特图能不能实现行表头一级一级显示(树形结构) 问题解决 设置统计时把合并同类型和显示行合计都勾选上就可以了 效果参考

element中Tree 树形控件实现多选、展开折叠、全选全不选、父子联动、默认展开、默认选中、默认禁用、自定义节点内容、可拖拽节点、手风琴模式

目录 1.代码实现2. 效果图3. 使用到的部分属性说明4. 更多属性配置查看element官网 1.代码实现 <template><div class"TreePage"><el-checkboxv-model"menuExpand"change"handleCheckedTreeExpand($event, menu)">展开/折叠&l…

非接触式红外测温MLX90614

1.MLX90614简介 MX90614是一款由迈来芯公司提供的低成本&#xff0c;无接触温度计。输出数据和物体温度呈线性比例&#xff0c;具有高精度和高分辨率。TO-39金属封装里同时集成了红外感应热电堆探测器芯片MLX81101&#xff08;温度是通过PTC或是PTAT元件测量&#xff09;和信号…

vue简单实现滚动条

背景&#xff1a;产品提了一个需求在一个详情页&#xff0c;一个form表单元素太多了&#xff0c;需要滚动到最下面才能点击提交按钮&#xff0c;很不方便。他的方案是&#xff0c;加一个滚动条&#xff0c;这样可以直接拉到最下面。 优化&#xff1a;1、支持滚动条&#xff0c;…

uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)

云数据表的时间类型设计 推荐使用时间戳 timestamp "createTime": {"bsonType": "timestamp","label": "创建时间&#xff1a;" }时间生成 获取当前时间 Date.now() .add({createTime: Date.now() })时间格式化渲染 下载安…