定制化开发Spark的Windows本地化部署完整方案

前言

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

借鉴文章

环境

  • 操作系统: 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环境由下面四个工程组成:

ProjectDownload Url
Sparkhttps://spark.apache.org/downloads.html
Hadoophttps://archive.apache.org/dist/hadoop/common/
Scalahttps://www.scala-lang.org/download/all.html
winutils-masterhttps://github.com/cdarlint/winutils

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

决定
决定
决定
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\dfsme

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>
  • 1
  • 2
  • 3
  • 4

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
    • 1
  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

四、配置修改

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

     PYSPARK_PYTHON = D:\WorkShop\python\.env\Scripts\python.exe # 我的解释器放在虚拟环境里,和默认路径不一样
    • 1
  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>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  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>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  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>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  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>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  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
    • 1
    • 2
    • 如果java是装在C:\Program Files文件夹下面,这时候由于路径含有空格,是无法供Hadoop使用的。这时候可以用progra~1替换Program Files。参考文章: 。

六、格式化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 win32Type "help", "copyright", "credits" or "license" for more information.Using Spark's default log4j profile: org/apache/spark/log4j-defaults.propertiesSetting 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:4040Spark context available as 'sc' (master = local[*], app id = local-1661958484812).SparkSession available as 'spark'.>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

>>> from pyspark import sql>>> spark = sql.SparkSession.builder.enableHiveSupport().getOrCreate()>>> l = [('Alice', 1)]>>> spark.createDataFrame(l).collect()[Row(_1='Alice', _2=1)]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发