定制软件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

二、环境搭建

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和), 定制软件这些版本主要分为两类:

  • 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 ~/optcd ~/optln -s spark-2.4.8-bin-without-hadoop  spark
  • 1
  • 2
  • 3

Spark的目录结构

ls ~/opt/spark
  • 1

  • 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/sparkexport PATH=$SPARK_HOME/bin:$PATH
  • 1
  • 2

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

source ~/.bashrc
  • 1

配置Hadoop信息

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

cd ~/opt/spark/confcp spark-env.sh.template  spark-env.shvi spark-env.sh
  • 1
  • 2
  • 3

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

export SPARK_DIST_CLASSPATH=$(/home/xiaobai/opt/hadoop/bin/hadoop classpath)
  • 1

修改日志级别

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

cd ~/opt/spark/confcp log4j.properties.template log4j.properties #日志配置文件vi log4j.properties
  • 1
  • 2
  • 3

修改如下配置:

log4j.rootCategory= WARN, console
  • 1

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

sc.setLogLevel("WARN")
  • 1

3)测试安装

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

注意

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

[ERROR] Failed to construct terminal; falling back to unsupportedjava.lang.NumberFormatException: For input string: "0x100"
  • 1
  • 2

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

vi ~/.bashrc
  • 1

在文件末尾添加

export TERM=xterm-color
  • 1

使配置生效

source ~/.bashrc
  • 1

进入scala交互界面

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

spark-shell
  • 1

运行代码

var r = sc.parallelize(Array(1,2,3,4))r.map(_*10).collect()
  • 1
  • 2

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

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

    (3)安装Python

    tar -xvf Python-3.6.15.tar.xzcd Python-3.6.15./configure  --prefix=/opt/python3 --enable-optimizationssudo make && make install
    • 1
    • 2
    • 3
    • 4

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

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

    可以执行以下命令解决

    rm -rf /usr/bin/lsb_release
    • 1

    (4)设置环境变量

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

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

    (1)下载相应版本的Anaconda

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

    cd ~/softwget https://repo.anaconda.com/archive/Anaconda3-5.1.0-Linux-x86_64.sh
    • 1
    • 2

    (2)安装anaconda

    bash Anaconda3-5.1.0-Linux-x86_64.sh
    • 1

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

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

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

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

(3)使配置生效

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

tail ~/.bashrc
  • 1

source ~/.bashrc
  • 1

安装pyspark开发包

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

可以使用在线安装和手动拷贝中的其中一种安装形式,推荐使用手动拷贝的方式。

  • 在线安装
sudo apt install python3-pip  #安装pip3sudo pip install pyspark==2.4.8 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 1
  • 2
  • 手动拷贝

进入python交互界面,查看python的path值

import syssys.path
  • 1
  • 2

将~/opt/spark/python/lib下的py4j-0.10.7-src.zip和pyspark.zip解压拷贝到某一path路径,比如:

cd ~/opt/spark/python/libunzip py4j-0.10.7-src.zip  -d /usr/local/lib/python3.6/dist-packagesunzip pyspark.zip  -d /usr/local/lib/python3.6/dist-packages
  • 1
  • 2
  • 3

5) 配置Spark伪Standalone模式

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

切换至配置文件目录

cd ~/opt/spark/conf
  • 1

spark-env.sh

vi spark-env.sh
  • 1

添加如下配置信息

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/jdkexport HADOOP_CONF_DIR=/home/xiaobai/opt/hadoop/etc/hadoop
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

slaves

vi slaves
  • 1

配置从节点信息

node1
  • 1

6) 测试standalone模式

standalone启动

~/opt/spark/sbin/start-all.sh
  • 1

可以使用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"
  • 1

查看进程

jps
  • 1

web查看

node1:8080
  • 1

测试

pyspark --master spark://node1:7077
  • 1

运行测试代码

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

停止

~/opt/spark/sbin/stop-all.sh
  • 1

可以使用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
  • 1

启动jupyter进入交互界面

jupyter notebook
  • 1

或者

jupyter lab
  • 1

尝试运行代码

from pyspark import SparkConf, SparkContextconf = 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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3. 代码提交

编写wordcount程序

vi wordcount.py
  • 1

编写代码:

from pyspark import SparkConf, SparkContextconf = 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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

提交代码到local

 spark-submit  wordcount.py
  • 1

提交代码到Standalone

请确保已开启master和worker

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

提交代码到YARN

spark-submit  --master yarn wordcount.py
  • 1

注意

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

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

可以修改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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

spark-submit  --help
  • 1

常用参数

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

三、相关资源

链接:https://pan.baidu.com/s/1u3Qbj2VQ8UbuSuGQOWjWCg 提取码:nuli 
  • 1
  • 2
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发