Spark环境搭建(保姆级教程)-程序员宅基地

技术标签: 大数据环境搭建  spark  Spark环境搭建  Spark搭建  pyspark环境配置  # Spark  

一、环境准备

  • 虚拟机安装

    虚拟机软件:VMware

    操作系统 :Ubuntu1804

    参考:https://blog.csdn.net/tangyi2008/article/details/120311293

  • JDK1.8

  • Hadoop安装

    版本:2.7.7

    参考:https://blog.csdn.net/tangyi2008/article/details/121908766

二、Spark环境搭建

1. Spark部署方式

  • Local模式:单机模式
  • 集群模式:
    • Standalone模式:使用Spark自带的简单集群管理器
    • YARN模式:使用YARN作为集群管理器
    • Mesos模式:使用Mesos作为集群管理器
    • Kubernetes模式:实验阶段

2. 安装spark

1) 下载Spark

Spark官网的Download界面https://spark.apache.org/downloads.html可选版本较少,比较这里打开的网页,只有三个版本可选。

在这里插入图片描述

可以在下载页面的下方进入它的release archives:https://archive.apache.org/dist/spark/ 选择想要的版本。

关于版本的选择

这里以2.4.8版本为例,我们下载的安装文件应该是形如:spark-2.4.8-bin-xxxxxx.tgz的文件,很多人很困惑如何选择这些版本。

在这里插入图片描述

之所以会有这么多版本的选择,是因为Spark需要一些Hadoop客户端的依赖包(需要访问HDFS和YARN), 这些版本主要分为两类:

  • pre-packaged binary,将Hadoop客户端的依赖包编译到所下载的压缩包当中,比如spark-2.4.8-bin-hadoop2.6.tgz 和spark-2.4.8-bin-hadoop2.7.tgz ,

  • “Hadoop free” binary,需要自己通过配置 SPARK_DIST_CLASSPATH 变量,以便可以包含指定版本的Hadoop的相关jar包,比如:spark-2.4.8-bin-without-hadoop-scala-2.12.tgz、spark-2.4.8-bin-without-hadoop.tgz 。

我们这里选择“Hadoop free” binary形式的spark-2.4.8-bin-without-hadoop.tgz进行下载,直接使用浏览器下载过慢,可以使用迅雷加速下载,也可以去后面的网盘资源进行下载。

2)安装Spark

这里约定虚拟机主机名为node1,用户名为xiaobai, 安装路径为/home/xiaobai/opt,如果不是,请自行修改相应配置文件。

上传安装包

将下载好的安装包上传至虚拟机(当然你也可以直接在虚拟机中下载,省得上传文件)

解压并创建软链接
tar -xvf spark-2.4.8-bin-without-hadoop.tgz -C ~/opt
cd ~/opt
ln -s spark-2.4.8-bin-without-hadoop  spark
Spark的目录结构
ls ~/opt/spark

在这里插入图片描述

  • bin: 可执行脚本,比如常用的spark-shell, pyspark等。
  • data:示例程序使用数据
  • jars:依赖的jar包
  • R:R API包
  • yarn:整合yarn相关内容
  • conf:配置文件目录
  • examples:示例程序
  • kubernetes:K8S相关内容
  • licenses:许可文件
  • python:python API包
  • sbin:管理使用的脚本,比如: start-all.sh、start-master.sh等。
配置环境变量

vi ~/.bashrc修改 .bashrc 文件,在文件末尾添加Spark的PATH路径

export SPARK_HOME=/home/xiaobai/opt/spark
export PATH=$SPARK_HOME/bin:$PATH

运行下面的命令使配置生效

source ~/.bashrc
配置Hadoop信息

因为我们下载的是“Hadoop free” 版本,所以要配置SPARK_DIST_CLASSPATH 变量才能正常运行。

cd ~/opt/spark/conf
cp spark-env.sh.template  spark-env.sh
vi spark-env.sh

在文件末尾添加配置如下信息

export SPARK_DIST_CLASSPATH=$(/home/xiaobai/opt/hadoop/bin/hadoop classpath)
修改日志级别

这一步可选,将日志级别调整至WARN级别,不至于看到过多的无效打印信息

cd ~/opt/spark/conf
cp log4j.properties.template log4j.properties #日志配置文件
vi log4j.properties

修改如下配置:

log4j.rootCategory= WARN, console

日志也可以通过代码进行调整,假设SparkContext对象为sc,则可以通过方法setLogLevel进行级别调整

sc.setLogLevel("WARN")

3)测试安装

到此,Spark安装完成,此时便可使用Spark的local模式了。

注意

我们下载的Spark版本是基于scala 2.11.12,这时会报如下错误,但不影响使用.

[ERROR] Failed to construct terminal; falling back to unsupported
java.lang.NumberFormatException: For input string: "0x100"

在这里插入图片描述

可以修改环境变量TERM的值为xterm-color解决:

vi ~/.bashrc

在文件末尾添加

export TERM=xterm-color

使配置生效

source ~/.bashrc
进入scala交互界面

使用如下命令进入scala交互界面:

spark-shell
运行代码
var r = sc.parallelize(Array(1,2,3,4))
r.map(_*10).collect()

在这里插入图片描述

4)配置pyspark

安装python

如果是ubuntu18+版本,系统已经默认安装Python3;在ubuntu16以前,系统默认安装python2

为了避免Python环境带来不必要的麻烦,这里将介绍两种安装Python环境的方式,建议选择安装Anaconda的方式。

所谓的Python环境主要包括Python解释器、Scripts目录(包含比如pip.exe)以及Lib目录(标准库和包安装目录site-pakages),在指定Python环境时,其实主要就是指定运行哪个目录下的Python解释器。

在安装之前,要注意python的版本问题,比如在使用Python3.8版本时,运行pyspark会出现如下错误,本文将安装Python 3.6版本。

在这里插入图片描述

  • 安装官方的Python

    (1)安装所需依赖

    sudo apt-get install -y gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
    

    (2)去官网下载对应版本源代码,这里以3.6.15为例

    https://www.python.org/downloads/source/

    wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tar.xz
    

    (3)安装Python

    tar -xvf Python-3.6.15.tar.xz
    cd Python-3.6.15
    ./configure  --prefix=/opt/python3 --enable-optimizations
    sudo make && make install
    

    注意,如果在安装过程中出现如下错误

    subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1
    

    可以执行以下命令解决

    rm -rf /usr/bin/lsb_release
    

    (4)设置环境变量

    为了使用刚才安装的Python版本,可以将包含python解释器的目录加入到path路径的最前面,所以在.bashrc的文件末尾添加如下设置,并使用source ~/.bashrc使配置生效。

    export PATH=/opt/python3/bin:$PATH
    
  • 安装Anaconda

    (1)下载相应版本的Anaconda

    可以在网页https://repo.anaconda.com/archive/上选择相应版本进行下载,这里将下载Anaconda3-5.1.0-Linux-x86_64.sh ,其python对应版本为3.6。

    在这里插入图片描述

    cd ~/soft
    wget https://repo.anaconda.com/archive/Anaconda3-5.1.0-Linux-x86_64.sh
    

    (2)安装anaconda

    bash Anaconda3-5.1.0-Linux-x86_64.sh
    

    在这里插入图片描述

然后一路回车,等出现接受许可界面,输入yes接收许可。

接着可以配置anacoda的安装目录,这里配置的安装目录是:/home/xiaobai/opt/anaconda3

在这里插入图片描述

然后配置是否自动配置PATH路径,这里输入的yes,让其自动配置

在这里插入图片描述

最后提示是否安装VSCode,这里输入的no,拒绝安装。

在这里插入图片描述

(3)使配置生效

刚才在安装过程中已经自动配置了PATH路径,可以查看添加的配置内容:

tail ~/.bashrc

在这里插入图片描述

source ~/.bashrc
安装pyspark开发包

注意,这里的Pyspark指的是在使用python编程时需要使用的pyspark模块,类似Mysql与pymysql的关系。

可以使用pip在线安装或者基于Spark的环境配置PYTHONPATH环境变量,建议选择后者。

  • pip在线安装
sudo apt install python3-pip  #安装pip3
sudo pip install pyspark==2.4.8 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 配置PYTHONPATH环境变量
vi ~/.bashrc

.bashrc的文件末尾添加如下设置,并使用source ~/.bashrc使配置生效。

export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:SPARK_HOME/python/lib/pyspark.zip:$PATHONPATH
export PYSPARK_PYTHON=python3

注意:py4j-0.10.7-src.zip一定要与$SPARK_HOME/python/lib目录下的实际文件名一致,设置好后可以通过命令python -c "import sys; print(sys.path)"查看Python的Import Path。

5) 配置Spark伪Standalone模式

这里配置Standalone模式,为了方便初学者,这里只配置一台从节点,所以将其称为"伪Standalone模式"

切换至配置文件目录
cd ~/opt/spark/conf
spark-env.sh
vi spark-env.sh

添加如下配置信息

export SPARK_MASTER_HOST=node1          #设置主节点地址
export SPARK_WORKER_MEMORY=2g           #设置节点内存大小,此处为4G。
export SPARK_WORKER_CORES=2              #设置节点参与计算的核心数
export SPARK_WORKER_INSTANCES=1          #设置节点实例数
export JAVA_HOME=/home/xiaobai/opt/jdk
export HADOOP_CONF_DIR=/home/xiaobai/opt/hadoop/etc/hadoop
slaves
vi slaves

配置从节点信息

node1

6) 测试standalone模式

standalone启动
~/opt/spark/sbin/start-all.sh

可以使用start-master.shstart-slave.shstart-slaves.sh分别启动Master节点,本机slave节点和所有slave节点

此外,还会经常用到historysever,会用到脚本: start-history-server.sh,需要在spark-env.sh中配置SPARK_HISTORY_OPTS参数:

SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:9000/sparklog/ -Dspark.history.fs.cleaner.enabled=true"
查看进程
jps

在这里插入图片描述

web查看
node1:8080

在这里插入图片描述

测试
pyspark --master spark://node1:7077

运行测试代码

r = sc.parallelize(range(10))
r.map(lambda x:x*2).collect()

在这里插入图片描述

停止
~/opt/spark/sbin/stop-all.sh

可以使用stop-master.shstop-slave.shstop-slaves.sh分别停止Master节点,本机slave节点和所有slave节点

7) 配置Web交互式环境

安装jupyter(如果在安装python时安装的anaconda,则不需要再安装jupyter, 因为anaconda本身包含了jupyter)

sudo pip3 install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple

启动jupyter进入交互界面

jupyter notebook

或者

jupyter lab

尝试运行代码

from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster('local').setAppName("My App")
sc = SparkContext(conf = conf)
logFile = "file:///home/xiaobai/opt/spark/README.md"
logData = sc.textFile(logFile, 2).cache()
numAs = logData.filter(lambda line: 'a' in line).count()
numBs = logData.filter(lambda line: 'b' in line).count()
print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))

3. 代码提交

编写wordcount程序

vi wordcount.py

编写代码:

from pyspark import SparkConf, SparkContext
conf = SparkConf().setAppName("My App")
sc = SparkContext(conf = conf)
logFile = "file:///home/xiaobai/opt/spark/README.md"
logData = sc.textFile(logFile, 2).cache()
numAs = logData.filter(lambda line: 'a' in line).count()
numBs = logData.filter(lambda line: 'b' in line).count()
print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))

提交代码到local

 spark-submit  wordcount.py

提交代码到Standalone

请确保已开启master和worker

 spark-submit  --master spark://node1:7077 wordcount.py

提交代码到YARN

spark-submit  --master yarn wordcount.py

注意

因为我们采用的是伪分布式,主机内存可能不够,可能导致如下错误

ERROR TransportClient: Failed to send RPC RPC 6184886792270084293 to /192.168.206.129:56372: java.nio.channels.ClosedChannelException

在这里插入图片描述

可以修改Hadoop的yarn-site.xml配置,然后重启YARN即可。

<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

spark-submit常用参数,可以使用help命令查看:

spark-submit  --help

常用参数

Options:
--master MASTER_URL         spark://host:port, mesos://host:port, yarn,
                           k8s://https://host:port, or local (Default: local[*]).
--deploy-mode DEPLOY_MODE   Whether to launch the driver program locally ("client") or
                           on one of the worker machines inside the cluster ("cluster"), (Default: client).  
--class CLASS_NAME          Your application's main class (for Java / Scala apps).
--name NAME                 A name of your application.
--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

三、相关资源

链接:https://pan.baidu.com/s/1u3Qbj2VQ8UbuSuGQOWjWCg 
提取码:nuli 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tangyi2008/article/details/123109198

智能推荐

LVS初步学习-程序员宅基地

文章浏览阅读87次。参考网站:http://www.linuxvirtualserver.org一,部分概念服务器集群系统:通过高性能网络或局域网互联的服务器集群正成为实现高可伸缩的、高可用网络服务的有效结构,这种松耦合结构的服务器集群系统有下列优点:性能 网络服务的工作负载通常是大量相互独立的任务,通过一组服务器分而治之,可以获得很高的整体性能。性能/价格比 组成集群系统的PC服..._集群的高可用性,即是在硬件和软件上都有冗余,通过检测软硬件的故障,将故障屏蔽,由

利用VBScript连接mysql数据库_过路老熊_新浪博客-程序员宅基地

文章浏览阅读909次。1.首先需要安装mysql-connector-odbc-3.51.15-win32.msi(安装过程之间下一步就行)(PS:需要注意的是odbc是32位还是64位取决于你计算机/远程计算机上的mysql是32位还是64位,而不取决于你电脑的系统)打开控制面板--》管理工具双击数据源(ODBC)点击添加选择mysqlodbc5.1..._vbscript 读取smysql数据案例

android selector标签详解-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏3次。上一篇详细讲了shape的用法,讲解了怎么用shape自定义矩形、圆形、线形和环形,以及有哪些需要注意的地方。不过,shape只能定义单一的形状,而实际应用中,很多地方比如按钮、Tab、ListItem等都是不同状态有不同的展示形状。举个例子,一个按钮的背景,默认时是一个形状,按下时是一个形状,不可操作时又是另一个形状。有时候,不同状态下改变的不只是背景、图片等,文字颜色也会相应改变。而要处理这些_android selector标签

中英文分词分句-程序员宅基地

文章浏览阅读1k次。1.输入一个段落,分成句子(Punkt句子分割器) import nltk import nltk.data def splitSentence(paragraph): tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') sentences = tokenizer....

Sapera LT++之连续帧图像视频_sapera lt的文档和示例代码-程序员宅基地

文章浏览阅读1.2k次。文章目录Sapera LT ++一、SaperaLT++ 抓取连续帧的配置(vs2017)二、代码1.添加头文件2.所建项目的源文件代码如下结果Sapera LT ++Sapera LT++ 连续帧视频的抓取提示:以下是本篇文章正文内容一、SaperaLT++ 抓取连续帧的配置(vs2017)新建MFC对话框工程,配置环境变量,主要以下两张图的配置,附加包含目录和附加依赖项D:\Program Files\Teledyne DALSA\Sapera\Classes\BasicD:\P.._sapera lt的文档和示例代码

SAP GUI 710 PATCH 14 下载地址-程序员宅基地

文章浏览阅读176次。http://rapidshare.com/files/263511941/gui710_14.exe_sap gui 710下载

随便推点

解决VIM插件出现E492不是编辑器命令 ^M_e492: not an editor command: begin-程序员宅基地

文章浏览阅读1.7w次。最近2天在学习使用“编辑器之神”vim,应用下载的colorscheme时,出现E492不是编辑器命令 ^Mgoogle之发现原来问题处在了file format上,我用的linux,而vim的colorscheme则是windows模式,因此换行符不同造成的。解决方法也很简单:使用vim打开有问题的插件或者主题,输入:set ff=_e492: not an editor command: begin

XPD977 QFN5x5-32支持 XPD-LINK互联 USB 三端口控制器_xpd977应用方案-程序员宅基地

文章浏览阅读141次。当单个接口工作时,USB-A和USB-C接口都支持快充,当连接两个接口时输出5V。XPD977支持QC2.0/3.0/3.0+、AFC、FCP、SCP、HVSCP、PD和PPS等快充协议,还支持小米CHARGE TURBO 27W协议、华为10V高压SCP协议等,支持65W输出功率,充分满足PD快充多协议支持需求。云矽半导体在多款高集成多功能协议芯片的基础上,推出了一款支持一个USB-C、两个USB-A接口,并且每个接口都支持快充输出的的快充协议芯片,解决了协议芯片缺货下的难题。_xpd977应用方案

php打包多个文件下载zip(包含云文件)-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏3次。laravel打包多个文件下载zip(包含云文件)把云服务器文件下载到服务器打包成zip文件,然后下载。下载后对服务器文件进行删除。

HTML5新增语义化布局标签_html5新增标签实现的页面布局代码-程序员宅基地

文章浏览阅读434次,点赞2次,收藏2次。HTML5中新增的布局标签html 1990 html4.0.1 1997 html5 2008 稳定版 2012年新增的结构标签 (更加语义化) header标签 <header>这里是头部区</header> footer标签 <footer>这里是页脚区</footer> main标签 <main>这里是主体区</main> nav标_html5新增标签实现的页面布局代码

ansible:如何在centos 7上重新启动auditd服务得到关于依赖的错误_auditd.service重启-程序员宅基地

文章浏览阅读1k次,点赞22次,收藏20次。在我的剧本中,我有一个更新 audit.rules 的任务,然后通知应该重新启动 auditd 服务的处理程序。在我的剧本中,我有一个更新 audit.rules 的任务,然后通知应该重新启动 auditd 服务的处理程序。在我的剧本中,我有一个更新 audit.rules 的任务,然后通知应该重新启动 auditd 服务的处理程序。当 playbook 运行时,会更新审计规则并请求重新启动 auditd,但这会失败,如下所示。中进行了探索、讨论和解决(大部分)。中进行了探索、讨论和解决(大部分)。_auditd.service重启

[NLP]使用Alpaca-Lora基于llama模型进行微调教程_you are using the legacy behaviour of the <class '-程序员宅基地

文章浏览阅读4.2k次,点赞5次,收藏24次。Stanford Alpaca 是在 LLaMA 整个模型上微调,即对预训练模型中的所有参数都进行微调(full fine-tuning)。但该方法对于硬件成本要求仍然偏高且训练低效。因此, Alpaca-Lora 则是利用 Lora 技术,在冻结原模型 LLaMA 参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅微调的成本显著下降,还能获得和全模型微调(full fine-tuning)类似的效果。_you are using the legacy behaviour of the