首页 > 编程语言 >Spark安装(黑马程序员文档)

Spark安装(黑马程序员文档)

时间:2023-08-10 21:55:30浏览次数:41  
标签:bin -- 程序员 文档 https master Spark spark

Spark Local环境部署

下载地址

Spark

https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.4.1/

Anaconda

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=A

条件

  • PYTHON 推荐3.8
  • JDK 1.8

Anaconda On Linux 安装

本次课程的Python环境需要安装到Linux(虚拟机)和Windows(本机)上

参见最下方, 附: Anaconda On Linux 安装

解压

解压下载的Spark安装包

tar -zxvf spark-3.4.1-bin-hadoop3.tgz -C /export/server/

环境变量

配置Spark由如下5个环境变量需要设置

  • SPARK_HOME: 表示Spark安装路径在哪里
  • PYSPARK_PYTHON: 表示Spark想运行Python程序, 那么去哪里找python执行器
  • JAVA_HOME: 告知Spark Java在哪里
  • HADOOP_CONF_DIR: 告知Spark Hadoop的配置文件在哪里
  • HADOOP_HOME: 告知Spark Hadoop安装在哪里

这5个环境变量 都需要配置在: /etc/profile中

PYSPARK_PYTHON和 JAVA_HOME 需要同样配置在: /root/.bashrc中

上传Spark安装包

上传这个文件到Linux服务器中

将其解压, 课程中将其解压(安装)到: /export/server内.

tar -zxvf spark-3.4.1-bin-hadoop3.tgz -C /export/server/

由于spark目录名称很长, 给其一个软链接:

ln -s /export/server/spark-3.4.1-bin-hadoop3 /export/server/spark



测试

bin/pyspark

bin/pyspark 程序, 可以提供一个 交互式的 Python解释器环境, 在这里面可以写普通python代码, 以及spark代码

如图:

在这个环境内, 可以运行spark代码

图中的: parallelize 和 map 都是spark提供的API

sc.parallelize([1,2,3,4,5]).map(lambda x: x + 1).collect()

WEB UI (4040)

Spark程序在运行的时候, 会绑定到机器的4040端口上.

如果4040端口被占用, 会顺延到4041 ... 4042...

4040端口是一个WEBUI端口, 可以在浏览器内打开:

输入:服务器ip:4040 即可打开:

打开监控页面后, 可以发现 在程序内仅有一个Driver

因为我们是Local模式, Driver即管理 又 干活.

同时, 输入jps

可以看到local模式下的唯一进程存在

这个进程 即是master也是worker

bin/spark-shell - 了解

同样是一个解释器环境, 和bin/pyspark不同的是, 这个解释器环境 运行的不是python代码, 而是scala程序代码

scala> sc.parallelize(Array(1,2,3,4,5)).map(x=> x + 1).collect()
res0: Array[Int] = Array(2, 3, 4, 5, 6)

这个仅作为了解即可, 因为这个是用于scala语言的解释器环境

bin/spark-submit (PI)

作用: 提交指定的Spark代码到Spark环境中运行

使用方法:

对比

功能

bin/spark-submit

bin/pyspark

bin/spark-shell

功能

提交java\scala\python代码到spark中运行

提供一个python

 

解释器环境用来以python代码执行spark程序

提供一个scala

   

解释器环境用来以scala代码执行spark程序

     

特点

提交代码用

解释器环境 写一行执行一行

解释器环境 写一行执行一行

使用场景

正式场合, 正式提交spark程序运行

测试\学习\写一行执行一行\用来验证代码等

测试\学习\写一行执行一行\用来验证代码等

Local模式将是我们7天Spark课程的主力使用模式

Spark StandAlone环境部署

新角色 历史服务器

历史服务器不是Spark环境的必要组件, 是可选的.

回忆: 在YARN中 有一个历史服务器, 功能: 将YARN运行的程序的历史日志记录下来, 通过历史服务器方便用户查看程序运行的历史信息.

Spark的历史服务器, 功能: 将Spark运行的程序的历史日志记录下来, 通过历史服务器方便用户查看程序运行的历史信息.

搭建集群环境, 我们一般推荐将历史服务器也配置上, 方面以后查看历史记录

集群规划

课程中 使用三台Linux虚拟机来组成集群环境, 非别是:

node1\ node2\ node3

node1运行: Spark的Master进程 和 1个Worker进程

node2运行: spark的1个worker进程

node3运行: spark的1个worker进程

整个集群提供: 1个master进程 和 3个worker进程

安装

在所有机器安装Python(Anaconda)

参考 附1内容, 如何在Linux上安装anaconda

同时不要忘记 都创建pyspark虚拟环境 以及安装虚拟环境所需要的包pyspark jieba pyhive

在所有机器配置环境变量

参考 Local模式下 环境变量的配置内容

确保3台都配置

配置配置文件

进入到spark的配置文件目录中, cd $SPARK_HOME/conf

配置workers文件

# 改名, 去掉后面的.template后缀
mv workers.template workers

# 编辑worker文件
vim workers
# 将里面的localhost删除, 追加
node1
node2
node3
到workers文件内

# 功能: 这个文件就是指示了  当前SparkStandAlone环境下, 有哪些worker

配置spark-env.sh文件

# 1. 改名
mv spark-env.sh.template spark-env.sh

# 2. 编辑spark-env.sh, 在底部追加如下内容

## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk

## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop

## 指定spark老大Master的IP和提交任务的通信端口
# 告知Spark的master运行在哪个机器上
export SPARK_MASTER_HOST=node1
# 告知sparkmaster的通讯端口
export SPARK_MASTER_PORT=7077
# 告知spark master的 webui端口
SPARK_MASTER_WEBUI_PORT=8080

# worker cpu可用核数
SPARK_WORKER_CORES=1
# worker可用内存
SPARK_WORKER_MEMORY=1g
# worker的工作通讯地址
SPARK_WORKER_PORT=7078
# worker的 webui地址
SPARK_WORKER_WEBUI_PORT=8081

## 设置历史服务器
# 配置的意思是  将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

注意, 上面的配置的路径 要根据你自己机器实际的路径来写

在HDFS上创建程序运行历史记录存放的文件夹:

hadoop fs -mkdir /sparklog
hadoop fs -chmod 777 /sparklog

配置spark-defaults.conf文件

# 1. 改名
mv spark-defaults.conf.template spark-defaults.conf

# 2. 修改内容, 追加如下内容
# 开启spark的日期记录功能
spark.eventLog.enabled 	true
# 设置spark日志记录的路径
spark.eventLog.dir	 hdfs://node1:8020/sparklog/ 
# 设置spark日志是否启动压缩
spark.eventLog.compress 	true

配置log4j.properties 文件 [可选配置]

这个文件的修改不是必须的, 为什么修改为WARN. 因为Spark是个话痨

会疯狂输出日志, 设置级别为WARN 只输出警告和错误日志, 不要输出一堆废话.

将Spark安装文件夹 分发到其它的服务器上

不要忘记, 在node2和node3上 给spark安装目录增加软链接

ln -s /export/server/ spark-3.4.1-bin-hadoop3 /export/server/spark

检查

检查每台机器的:

JAVA_HOME

SPARK_HOME

PYSPARK_PYTHON

等等 环境变量是否正常指向正确的目录

启动历史服务器

sbin/start-history-server.sh

启动Spark的Master和Worker进程

查看Master的WEB UI

默认端口master我们设置到了8080

如果端口被占用, 会顺延到8081 ...;8082... 8083... 直到申请到端口为止

可以在日志中查看, 具体顺延到哪个端口上:

Service 'MasterUI' could not bind on port 8080. Attempting port 8081.

连接到StandAlone集群

切换到spark目录下的bin

cd /export/server/spark/bin

bin/pyspark

执行:

./pyspark --master spark://node1:7077
# 通过--master选项来连接到 StandAlone集群
# 如果不写--master选项, 默认是local模式运行

bin/spark-shell

./spark-shell --master spark://node1:7077
# 同样适用--master来连接到集群使用

bin/spark-submit (PI)

./spark-submit --master spark://node1:7077 /export/server/spark/examples/src/main/python/pi.py 100
# 同样使用--master来指定将任务提交到集群运行

查看历史服务器WEB UI

历史服务器的默认端口是: 18080

我们启动在node1上, 可以在浏览器打开:

node1:18080来进入到历史服务器的WEB UI上.

Spark StandAlone HA 环境搭建

步骤

前提: 确保Zookeeper 和 HDFS 均已经启动

先在spark-env.sh中, 删除: SPARK_MASTER_HOST=node1

原因: 配置文件中固定master是谁, 那么就无法用到zk的动态切换master功能了.

在spark-env.sh中, 增加:

SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
# spark.deploy.recoveryMode 指定HA模式 基于Zookeeper实现
# 指定Zookeeper的连接地址
# 指定在Zookeeper中注册临时节点的路径

将spark-env.sh 分发到每一台服务器上

scp spark-env.sh node2:/export/server/spark/conf/
scp spark-env.sh node3:/export/server/spark/conf/

停止当前StandAlone集群

sbin/stop-all.sh

启动集群:

# 在node1上 启动一个master 和全部worker
sbin/start-all.sh
# 注意, 下面命令在node2上执行
sbin/start-master.sh
# 在node2上启动一个备用的master进程

master主备切换

提交一个spark任务到当前alivemaster上:

bin/spark-submit --master spark://node1:7077 /export/server/spark/examples/src/main/python/pi.py 1000

在提交成功后, 将alivemaster直接kill掉

不会影响程序运行:

当新的master接收集群后, 程序继续运行, 正常得到结果.

结论 HA模式下, 主备切换 不会影响到正在运行的程序.

最大的影响是 会让它中断大约30秒左右.

Spark On YARN 环境搭建

部署

确保:

  • HADOOP_CONF_DIR
  • YARN_CONF_DIR

在spark-env.sh 以及 环境变量配置文件中即可

连接到YARN中

bin/pyspark

bin/pyspark --master yarn --deploy-mode client|cluster
# --deploy-mode 选项是指定部署模式, 默认是 客户端模式
# client就是客户端模式
# cluster就是集群模式
# --deploy-mode 仅可以用在YARN模式下

注意: 交互式环境 pyspark 和 spark-shell 无法运行 cluster模式

bin/spark-shell

bin/spark-shell --master yarn --deploy-mode client|cluster

注意: 交互式环境 pyspark 和 spark-shell 无法运行 cluster模式

bin/spark-submit (PI)

bin/spark-submit --master yarn --deploy-mode client|cluster /xxx/xxx/xxx.py 参数

spark-submit 和 spark-shell 和 pyspark的相关参数

参见: 附2

附1 Anaconda On Linux 安装 (单台服务器)

安装

上传安装包:

上传: 将Anaconda3-2023.07-2-Linux-x86_64文件到Linux服务器上

安装:

sh ./Anaconda3-2023.07-2-Linux-x86_64.sh



输入yes后就安装完成了.

安装完成后, 退出SecureCRT 重新进来:

看到这个Base开头表明安装好了.

base是默认的虚拟环境.

国内源

运行下列命令

vim ~/.condarc

追加下列内容

channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

附2 spark-submit和pyspark相关参数

客户端工具我们可以用的有:

  • bin/pyspark: pyspark解释器spark环境
  • bin/spark-shell: scala解释器spark环境
  • bin/spark-submit: 提交jar包或Python文件执行的工具
  • bin/spark-sql: sparksql客户端工具

这4个客户端工具的参数基本通用.

以spark-submit 为例:

bin/spark-submit --master spark://node1:7077 xxx.py

Usage: spark-submit [options] <app jar | python file | R file> [app arguments]
Usage: spark-submit --kill [submission ID] --master [spark://...]
Usage: spark-submit --status [submission ID] --master [spark://...]
Usage: spark-submit run-example [options] example-class [example args]

Options:
  --master MASTER_URL         spark://host:port, mesos://host:port, yarn,
                              k8s://https://host:port, or local (Default: local[*]).
  --deploy-mode DEPLOY_MODE   部署模式 client 或者 cluster 默认是client
  --class CLASS_NAME          运行java或者scala class(for Java / Scala apps).
  --name NAME                 程序的名字
  --jars JARS                 Comma-separated list of jars to include on the driver
                              and executor classpaths.
  --packages                  Comma-separated list of maven coordinates of jars to include
                              on the driver and executor classpaths. Will search the local
                              maven repo, then maven central and any additional remote
                              repositories given by --repositories. The format for the
                              coordinates should be groupId:artifactId:version.
  --exclude-packages          Comma-separated list of groupId:artifactId, to exclude while
                              resolving the dependencies provided in --packages to avoid
                              dependency conflicts.
  --repositories              Comma-separated list of additional remote repositories to
                              search for the maven coordinates given with --packages.
  --py-files PY_FILES         指定Python程序依赖的其它python文件
  --files FILES               Comma-separated list of files to be placed in the working
                              directory of each executor. File paths of these files
                              in executors can be accessed via SparkFiles.get(fileName).
  --archives ARCHIVES         Comma-separated list of archives to be extracted into the
                              working directory of each executor.

  --conf, -c PROP=VALUE       手动指定配置
  --properties-file FILE      Path to a file from which to load extra properties. If not
                              specified, this will look for conf/spark-defaults.conf.

  --driver-memory MEM         Driver的可用内存(Default: 1024M).
  --driver-java-options       Driver的一些Java选项
  --driver-library-path       Extra library path entries to pass to the driver.
  --driver-class-path         Extra class path entries to pass to the driver. Note that
                              jars added with --jars are automatically included in the
                              classpath.

  --executor-memory MEM       Executor的内存 (Default: 1G).

  --proxy-user NAME           User to impersonate when submitting the application.
                              This argument does not work with --principal / --keytab.

  --help, -h                  显示帮助文件
  --verbose, -v               Print additional debug output.
  --version,                  打印版本

 Cluster deploy mode only(集群模式专属):
  --driver-cores NUM          Driver可用的的CPU核数(Default: 1).

 Spark standalone or Mesos with cluster deploy mode only:
  --supervise                 如果给定, 可以尝试重启Driver

 Spark standalone, Mesos or K8s with cluster deploy mode only:
  --kill SUBMISSION_ID        指定程序ID kill
  --status SUBMISSION_ID      指定程序ID 查看运行状态

 Spark standalone, Mesos and Kubernetes only:
  --total-executor-cores NUM  整个任务可以给Executor多少个CPU核心用

 Spark standalone, YARN and Kubernetes only:
  --executor-cores NUM        单个Executor能使用多少CPU核心

 Spark on YARN and Kubernetes only(YARN模式下):
  --num-executors NUM         Executor应该开启几个
  --principal PRINCIPAL       Principal to be used to login to KDC.
  --keytab KEYTAB             The full path to the file that contains the keytab for the
                              principal specified above.

 Spark on YARN only:
  --queue QUEUE_NAME          指定运行的YARN队列(Default: "default").

附3 Windows系统配置Anaconda

安装

下载Anaconda

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=A

配置国内源

Anaconda默认源服务器在国外, 网速比较慢, 配置国内源加速网络下载.

打开上图中的 Anaconda Prompt程序:
执行:
conda config --set show_channel_urls yes

然后用记事本打开:
C:\Users\用户名\.condarc文件, 将如下内容替换进文件内,保存即可:

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

创建虚拟环境

 

# 创建虚拟环境 pyspark, 基于Python 3.8
conda create -n pyspark python=3.8

# 切换到虚拟环境内
conda activate pyspark

# 在虚拟环境内安装包
pip install pyhive pyspark jieba -i https://pypi.tuna.tsinghua.edu.cn/simple 

标签:bin,--,程序员,文档,https,master,Spark,spark
From: https://www.cnblogs.com/ysk0904/p/17621611.html

相关文章

  • 高级Java程序员值得拥有的10本书
    Java是时下最流行的编程语言之一。市面上也出现了适合初学者的大量书籍。但是对于那些在Java编程上淫浸多时的开发人员而言,这些书的内容未免显得过于简单和冗余了。那些适合初学者的书籍看着真想打瞌睡,有木有。想找高级点的Java书籍吧,又不知道哪些适合自己。别急,雪中送炭的来了:下面......
  • XMLEncoder生成的xml文档的schema分析
    以下文为基础,进行分析LongTermPersistenceofJavaBeansComponents:XMLSchemahttp://java.sun.com/products/jfc/tsc/articles/persistence3/ 1BasicElements每个xml以一个可选的<?xmlversion="1.0"encoding="UTF-8"?>开头,接着是<javaversion="1.4.0&q......
  • 天壤小白v1.1.0版本上线,超实用的大模型文档集功能优化Tips,快来一探究竟!
    Hi!小白的用户伙伴们,你们好!上月,「天壤小白」大模型产品三件套首次亮相2023WAIC。其中,应用开发平台最具特点的文档集功能,集成大模型强大的语义理解和推理技术,不仅有效破解大模型“幻觉”,还助力天壤快速适配企业需求,发布20+企业级智能应用。今天,天壤小白v1.1.0版本上线!除了「模型......
  • 程序员到底该不该找副业?建议你看完这篇再做决定
    最近取关了一些公众号,因为它标题太吸引人了,什么“全包100w……”、“我如何靠副业挣了200w”,看得我心血澎湃,脑子一冲动差点买下全文末尾链接处的课程。看了眼微信余额,发昏的大脑霎那间恢复理智。原先关注这些公众号只是想碎片时间学些东西,好提升自己。谁知我把它们当作精神食粮,它......
  • PageOffice——实现Word文档指定内容可编辑,其他内容只读
    pageoffice实现word文件部分区域可编辑依赖word中的书签1.文件在本地打开将需要用户在线编辑的内容设置为数据区域DateRegion(数据区域:word中以PO_开头的书签)注意:书签的两个中括号是office本地设置的,如果不显示可以手动设置一下2.使用pageoffice的表单提交模式docSubmitForm打......
  • PRD文档简介
    什么是PRD?PRD的作用?怎么写PRD?1.PRD是什么?PRD是ProductRequirementsDocument的简称,意为产品需求文档。简单地说,就是对某一产品的方方面面进行详细的描述,包括产品的特性、功能、用户需求、用户场景等详细的说明。PRD是产品设计、开发、测试、发布过程中的重要准则,为所有人员提......
  • #yyds干货盘点# LeetCode程序员面试金典:添加与搜索单词 - 数据结构设计
    题目:请你设计一个数据结构,支持添加新单词和查找字符串是否与任何先前添加的字符串匹配。实现词典类WordDictionary:WordDictionary()初始化词典对象voidaddWord(word)将word添加到数据结构中,之后可以对它进行匹配boolsearch(word)如果数据结构中存在字符串与 word匹......
  • 【解密】PDF文档忘记编辑密码 照样编辑
    本文目录方式一、打开网站,解除限制方式二、使用“PDF补丁丁”软件在文档编辑过程中,为了防止别人修改我们的文档,常常会给文档设置限制编辑的密码。不过有时也会“聪明反被聪明误”,时间一长,自己设置的密码可能就会忘掉,既不能编辑修改,也不能打印,看着干着急,有什么解决办法吗?如果你......
  • 利用Python批量替换多个word文档中的指定
    需求最近有一个项目方案,涉及到2000多个文档。之前公司有相关案例,但是需要将2000多个文档中的特殊名称改成现有项目,单独操作需要打开每个文档区搜索替换,费事费力。通过python中对文档的操作进行批量替换。方案思路1.获取所有需要替换的word文件路径defgetdocreplace(path):......
  • 转载:用pageOffice控件实现 office 文档在线编辑Word加图片的功能
    用pageOffice控件实现office文档在线编辑Word加图片的功能OA办公中,业务需要多人编辑word文档,需要加图片的功能。怎么实现word文档的编辑加图片呢?2实现方法通过pageOffice实现简单的在线打开编辑word时,通过设置关键代码:DataRegiondataRegion=worddoc.openDataRegion......