前言

对于Spark,网上涉及到Windows平台搭建的资料不多。大多资料不全,而且很少说明注意事项,存在一定的挖坑行为。对于不是很熟悉spark环境搭建过程,但是又非常想在自己的电脑上搭建一个本地环境的小伙伴来说存在一定的绕路行为。本文借鉴了网上大部分的资料,在整理集成的同时,会以一次完整的环境搭建过程为演示内容。

借鉴文章

  • vscode配置spark
  • Windows7-8-10安装部署hadoop-2.7.5(最详细的步骤,不需要cygwin
  • windows平台下安装配置Hadoop
  • windows10上配置pyspark工作环境

环境

  • 操作系统: Windows 10 x64
  • 集成环境: 管理员模式运行的VSCode
  • Python版本: 3.10.4 (env)
  • JAVA SDK: 1.8.0
    • 注意本文默认已安装JAVA,如未安装JAVA请提前安装。安装时注意路径不要有空格。
    • 安装spark环境之前,需要检查环境变量JAVA_HOME以及path内java路径一定不要有空格。如果有空格,就需要修改JDK路径。具体方法本文不再赘述,请查阅JAVA改路径相关资料。改完之后还要记得更新path。
    • 注意,本文是在本地环境部署Spark。

步骤

Spark环境强调版本依赖,所以搭建最重要的一环就是版本管理。Spark环境由下面四个工程组成:

Project Download Url
Spark https://spark.apache.org/downloads.html
Hadoop https://archive.apache.org/dist/hadoop/common/
Scala https://www.scala-lang.org/download/all.html
winutils-master https://github.com/cdarlint/winutils

这里面,Spark会决定Scala和Hadoop的版本;而Hadoop又会受到winutils-master版本的影响。他们的关系可以用下图表示:

#mermaid-svg-rUQmdSCFXdCNq8G9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .error-icon{fill:#552222;}#mermaid-svg-rUQmdSCFXdCNq8G9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rUQmdSCFXdCNq8G9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .marker.cross{stroke:#333333;}#mermaid-svg-rUQmdSCFXdCNq8G9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rUQmdSCFXdCNq8G9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .cluster-label text{fill:#333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .cluster-label span{color:#333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .label text,#mermaid-svg-rUQmdSCFXdCNq8G9 span{fill:#333;color:#333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .node rect,#mermaid-svg-rUQmdSCFXdCNq8G9 .node circle,#mermaid-svg-rUQmdSCFXdCNq8G9 .node ellipse,#mermaid-svg-rUQmdSCFXdCNq8G9 .node polygon,#mermaid-svg-rUQmdSCFXdCNq8G9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rUQmdSCFXdCNq8G9 .node .label{text-align:center;}#mermaid-svg-rUQmdSCFXdCNq8G9 .node.clickable{cursor:pointer;}#mermaid-svg-rUQmdSCFXdCNq8G9 .arrowheadPath{fill:#333333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rUQmdSCFXdCNq8G9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-rUQmdSCFXdCNq8G9 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-rUQmdSCFXdCNq8G9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rUQmdSCFXdCNq8G9 .cluster text{fill:#333;}#mermaid-svg-rUQmdSCFXdCNq8G9 .cluster span{color:#333;}#mermaid-svg-rUQmdSCFXdCNq8G9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rUQmdSCFXdCNq8G9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

决定
决定
决定
Spark
Hadoop
Scala
winutils-master

一、确定版本


1.1 确定winutils-master版本

通过访问winutils-masterdownload url,可获取目前为止所有的winutils-master版本。

假定我们选择最新的版本:

  • Hadoop 3.2.2/bin

它的名称就是所兼容的Hadoop版本,是不是很贴心。


1.2 确定Hadoop版本

上一步给出了兼容的Hadoop版本为version<=3.2.2。

  • Hadoop 3.2.2

接下来由它确定兼容的Spark版本。注意,暂时不要下载任何文件,因为我们不确定这个版本是不是最终需要的版本。


1.3 确定Spark版本

Spark主页用多个关联控件的形式帮助我们确定版本。

  • Spark release = 3.1.3

上面是我选择的版本,主页显示它兼容Hadoop3.2 and later。注意,暂时不要下载任何文件,因为我们不确定这个版本是不是最终需要的版本。


1.4 确定Scala版本

先不要关闭上一步的页面,留意页面中的这句话:

Note that Spark 3 is pre-built with Scala 2.12 in general and Spark 3.2+ provides additional pre-built distribution with Scala 2.13

他提示我们兼容的的Scala version = 2.12。这就方便了我们寻找最后一个工程的版本号码。注意,暂时不要下载任何文件,因为我们不确定这个版本是不是最终需要的版本。

  • Scala release = 2.12

二、下载各个版本

通过访问上文列表中各个工程的download url,将全部工程下载到本地的某个文件夹里面。

  • winutils-master下载办法:点击github右上角的Code,选择Download ZIP,将整个仓库文件夹下下来,然后取需要的版本。

我假设所有文件都存放于C:\Users\zhhony\Downloads\,这个路径无所谓,记得就行。

三、安装

准备工作

  • 首先准备一个文件夹,用于存储Spark的环境文件。注意路径不要有中文,不要有空格:

    • Spark环境建议路径: D:\Spark_env
  • 其次给Hadoop工程准备一组文件夹,用于存储Hadoop运行产生的文件。注意路径不要有中文,不要有空格:
    • Hadoop仓库建议路径: D:\tmp
    • Hadoop仓库建议子路径: D:\tmp\dfs\data
    • Hadoop仓库建议子路径: D:\tmp\dfs\name

3.1 安装Scala

  1. 按照本文步骤下载的Scala将是一个.msi文件,直接双击安装,把默认安装路径改到环境文件夹D:\Spark_env的下面。

  2. 在操作系统环境变量中新添加一个变量SCALA_HOME = D:\Spark_env\scala\bin

  3. 同时修改操作系统的Path变量,新增一个D:\Spark_env\scala\bin。如果系统已经建好了这个值就不用再建了:

安装完成之后,重新开启一个CMD,输入scala命令,如果显示如下,则表示安装成功:

Welcome to Scala 2.12.0 (OpenJDK 64-Bit Server VM, Java 1.8.0_332).
Type in expressions for evaluation. Or try :help.scala>

3.2 安装Spark

  1. 将下载的spark-3.1.3-bin-hadoop3.2.tgz直接解压,解压后会有一个spark-3.1.3-bin-hadoop3.2文件夹,将这个文件夹整体搬运到D:\Spark_env下。

  2. 去到文件夹下面的python里,将pyspark搬运到python库目录里(pyspark.egg-info存在则也搬过去)。库目录的寻找方法本文不再赘述,可以查阅相关资料。库目录一般路径是:

     C:\Users\{youraccount}\AppData\Local\Programs\Python\Python38\Lib\site-packages
    
  3. 在操作系统环境变量中新添加一个变量SPARK_HOME = D:\Spark_env\spark-3.1.3-bin-hadoop3.2

  4. 同时修改操作系统的Path变量,新增一个%SPARK_HOME%\bin

  5. 这一步,如果电脑用户名含有下划线_,则需要多加一个环境变量SPARK_LOCAL_HOSTNAME = localhost。加的方法参考上文。

    同时,去spark的bin文件夹下寻找spark-shell.cmd,右键编辑,在@echo off下面加一行SPARK_LOCAL_IP=127.0.0.1

3.3 安装Hadoop

  1. 将下载的hadoop-3.2.2.tar.gz直接解压,解压后会有一个hadoop-3.2.2文件夹,将这个文件夹整体搬运到D:\Spark_env下。

  2. 在操作系统环境变量中新添加一个变量HADOOP_HOME = D:\Spark_env\hadoop-3.2.2,加的方法可以参考Spark环节。

  3. 同时修改操作系统的Path变量,新增一个%HADOOP_HOME%\bin,加的方法可以参考Spark环节。

3.4 安装winutils-master

将下载的winutils-master.zip直接解压,解压后寻找hadoop-3.2.2\bin文件夹,将这个文件夹里面的文件,整体搬运到D:\Spark_env\hadoop-3.2.2\bin下,直接覆盖原文件。

winutils-master\hadoop-3.2.2\bin  --copy-->   D:\Spark_env\hadoop-3.2.2\bin

四、配置修改

  1. 在操作系统环境变量中新添加一个变量PYSPARK_PYTHON,用于指定python解释器路径,这一步请参考上文环境变量的修改方法来。下面是我的例子:

     PYSPARK_PYTHON = D:\WorkShop\python\.env\Scripts\python.exe # 我的解释器放在虚拟环境里,和默认路径不一样
    
  2. 通过pip install py4j命令在python中安装py4j库,pip的使用这里不再赘述。

五、Hadoop配置专项修改

  1. 编辑hadoop-3.2.2\etc\hadoop文件夹下的core-site.xml文件,将下列文本放入<configuration> </configuration>标签内并保存:

     <property><name>hadoop.tmp.dir</name><value>/D:/tmp</value></property><property><name>dfs.name.dir</name><value>/D:/tmp/name</value></property><property><name>fs.default.name</name><value>hdfs://localhost:9000</value></property>
    
  2. 编辑hadoop-3.2.2\etc\hadoop文件夹下的mapred-site.xml文件,将下列文本放入<configuration> </configuration>标签内并保存:

     <property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapred.job.tracker</name><value>hdfs://localhost:9001</value></property>
    
  3. 编辑hadoop-3.2.2\etc\hadoop文件夹下的hdfs-site.xml文件,将下列文本放入<configuration> </configuration>标签内并保存:

     <property><name>dfs.replication</name><value>1</value></property><property><name>dfs.data.dir</name><value>/D:/tmp/data</value></property>
    
  4. 编辑hadoop-3.2.2\etc\hadoop文件夹下的yarn-site.xml文件,将下列文本放入<configuration> </configuration>标签内并保存:

     <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property>
    
  5. 鼠标右键编辑hadoop-3.2.2\etc\hadoop文件夹下的hadoop-env.cmd文件,将JAVA_HOME@rem注释掉,改为系统环境变量中JAVA_HOME变量的路径,然后保存。类似于下面这样:

    @rem set JAVA_HOME=%JAVA_HOME%
    set JAVA_HOME=D:\Java\jdk1.8.0_181
    
    • 如果java是装在C:\Program Files文件夹下面,这时候由于路径含有空格,是无法供Hadoop使用的。这时候可以用progra~1替换Program Files。参考文章: 为什么文件路径 Program Files 可以写成 Progra~1。

六、格式化Hadoop

  1. 管理员模式运行cmd窗口,执行hdfs namenode -format。如果提示是否重新格式化,输入y
  2. 管理员模式运行cmd窗口,切换到hadoop的sbin目录,执行start-all,启动Hadoop。弹出的四个窗口不出现shutdown说明启动成功。
    到这一步实际上环境就已经搭建完毕了。需要hive的小伙伴可以继续尝试搭建hive。

七、尝试在python中启动spark

管理员模式运行cmd窗口,键入命令pyspark,显示如下内容表示启动成功

Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to____              __/ __/__  ___ _____/ /___\ \/ _ \/ _ `/ __/  '_//__ / .__/\_,_/_/ /_/\_\   version 3.1.3/_/Using Python version 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022 23:13:41)
Spark context Web UI available at http://localhost:4040
Spark context available as 'sc' (master = local[*], app id = local-1661958484812).
SparkSession available as 'spark'.
>>>

也可以按导入包的模式启动spark

>>> from pyspark import sql
>>> spark = sql.SparkSession.builder.enableHiveSupport().getOrCreate()
>>> l = [('Alice', 1)]
>>> spark.createDataFrame(l).collect()
[Row(_1='Alice', _2=1)]

Spark的Windows本地化部署完整方案相关推荐

  1. 深度学习模型部署技术方案

    深度学习模型部署技术方案 训练好的深度学习模型如何进行部署的相关技术方案 1 什么是模型部署? 2 数据科学项目整个开发流程 3 使用flask 将 Keras深度学习模型部署为Web应用程序 4 T ...

  2. 企业的Windows活动目录规划方案集合(附学习视频)

    企业的Windows活动目录规划方案集合(附学习视频) 活动目录(Active Directory)是面向Windows Standard Server.Windows terprise Server ...

  3. APISIX 助力中东社交软件,实现本地化部署

    Beeto 是一款面向中东市场主打阿拉伯语言的社交软件,在产品设计和技术架构上都是本地化落地实施的.曾在沙特 iOS 应用商店 Top Charts 榜单中超过老牌社交巨头 Facebook,位列第 ...

  4. ad域控如何建立在云端_呼叫中心哪家好?选择云端呼叫中心还是本地化部署呼叫中心好?...

    呼叫中心哪家比较好? 适用于企业的呼叫中心主要可分为3种方案:自建型呼叫中心系统.Saas云端呼叫中心和混合云呼叫中心.这三种部署方案分别是:本地化部署.Saas云部署.混合云部署.对于这三种部署方式 ...

  5. 文件服务器文件多备份方案,windows文件服务器冗余备份方案.doc

    windows文件服务器冗余备份方案目的: ??? 1.实现两台文件服务器实时同步,两台文件服务器上的文件能够实时同步: ??? 2.服务器故障自动切换,当其中一台服务器出现故障时能够自动切换: ?? ...

  6. TIANCHI-全球城市计算挑战赛-完整方案及关键代码分享(季军)

    TIANCHI-全球城市计算挑战赛--参赛者将根据主办方提供的地铁人流相关数据,挖掘隐藏在背后的出行规律,准确预测各个地铁站点未来流量的变化.主办方希望通过这次挑战赛,用大数据和人工智能等技术助力未来 ...

  7. kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)

    继上一篇kvm虚拟化管理平台WebVirtMgr部署-完整记录(1),接下来说说WebVirtMgr的日常配置:添加宿主机,创建虚机,磁盘扩容,快照等 具体操作记录如下: 一.配置宿主机 1.登录We ...

  8. Spark HA高可用部署、基于文件系统单点恢复、基于zookeeper的Standby Master、如何恢复到上一次活着master挂掉之前的状态 03

    1. Spark HA高可用部署 Spark Standalone集群时Master-Slaves架构的集群模式,和大部分的Master-Slaves结果集群一样,存在着Master单点故障的问题.如 ...

  9. windows mobile数据同步方案

    距离上篇博客似乎又过了一段日子了,这段日子应该算是挣扎着过来的,从寻找同步错误的过程到使用新的解决方案,总共花了近3个星期,我想自己有必要总结下这次的经历. 项目是使用C#+VS2008开发的,客户端 ...

  10. 本地化部署大语言模型 ChatGLM

    本地化部署大语言模型 ChatGLM 本地化部署大语言模型 ChatGLM 前期筹备 GitHub 基础包 语言模型文件 基础配置 显存查看方法 Anaconda 模块 ChatGLM-6B 网页部署 ...

最新文章

  1. 周永亮 《我是职业人》
  2. 在 Shell 脚本中跟踪调试命令的执行
  3. php安全配置总结,php安全配置详细说明(1/2)_PHP教程
  4. [TCP/IP] HTTPS的工作原理
  5. 函数参数和函数返回值
  6. 再谈 retain,copy,mutableCopy(官方SDK,声明NSString都用copy非retain)
  7. VC,一条会被鼠标移动的直线
  8. Java输入输出流和文件操作
  9. 「2017 山东一轮集训 Day6」子序列(矩阵快速幂)
  10. java原生的ajax怎么写,用原生js实现 ajax方法
  11. SEO策略几个常见现象
  12. 记录——《C Primer Plus (第五版)》第八章编程练习第二题
  13. Spyder has encountered an internal problem!问题解决过程
  14. 学计算机要6选3选什么学科,新高考选科6选3的学科及专业对应表查询系统
  15. nyoj 523 亡命逃窜 【BFS】
  16. 大批驱动管理软件(免安装版)
  17. iOS移动开发1x 、2x 、3x图片介绍
  18. html一键打包注册表,离线修改或批量导入目标系统注册表工具(支持PE和挂载系统操作)...
  19. uni-app的video禁止快进及seek()上的小坑
  20. Photoshop 2023 v24.2 for Mac 中英文版有哪些新功能呢 支持M1 M2机型 增加了哪些新相机配 解决另存为黑屏的问题

热门文章

  1. matlab 广义特征,特征值 特征向量 广义特征值 matlab
  2. CSS3-3D变换 transform-style:preserve-3d
  3. 【95】太空射击游戏——玩家代码
  4. 落户雄安,千方科技助力新区打造智慧出行样板
  5. 基于Ogre1.9开发的3D场景编辑器
  6. buuctf--CrackRTF
  7. PS打不开webp格式图片的解决方法
  8. 常见网络厂商Mib库文件
  9. Android仿人人客户端(v5.7.1)——个人主页(三)
  10. php图片虚化处理 api PHP实现生成模糊图片