因工作上的需要,尝试在一台Ubuntu16.04部署Spark,因为之前没有了解过Spark,故踩坑时部署了Local版和Standalone单机伪分布式版,现记录如下。
因为在部署Spark之前并未明确出Spark是什么,踩了相应的坑,故在此一并说明:Spark的目标是做一个分布式计算框架,因为是分布式所以它需要通讯(故需要安装SSH),有因为只是一个计算框架,所以其分布式数据来源需要由Hadoop的HDFS提供(故需要安装Hadoop),缺少SSH和HDFS,哪怕跑通,也是Local版。
1. Spark部署简介
网上有很多资料说Spark有n(n不定)种搭建方式,但是本质上只有2大类,一种是单机部署,一种是集群部署,说明如下:
- 单机部署:即Local模式,仅在一台机器上部署,没有安装Hadoop,通过多线程来处理数据;
- 集群部署:
- 含网上说的Standalone,Mesos,YARN三种分布式模式,实际上是用不同的分布式资源管理框架来管理集群内的机器;
- 在>=1台机器上部署,需要安装Hadoop,如果有多台机器时,数据在多台机器上处理,如果仅有一台机器,数据使用多进程来模拟多台机器进行处理:
- 为什么要安装Hadoop,因为Spark只是一个计算框架,它需要依赖于Hadoop的HDFS来为其分布式提供原始数据(注:HDFS分布式提供原始数据,Spark在执行任务时,可以通过shuffle来为自己分布式提供中间数据);
接下来根据我部署过的Local版和Standalone单机伪分布式版进行说明
2. Spark部署说明
-
Spark依赖于Java和Scala,所以不管安装什么版本都要提前安装好这两个;
-
因为我是在Python环境下进行编程,所以还需要安装Python,又因为安装Spark的机器是服务器,所以只能远程编程,故需要安装Jupyter Notebook;
-
对于Local模式,直接安装Spark即可,故其所需安装配置如下:
- Ubuntu 16.04;
- Python3.5 + Jupyter Notebook;
- Jdk8(java8开发环境);
- Scala 2.11;
- Spark2.4.6(Pre-built for Apache Hadoop2.7);
-
对于standalone单机伪分布式版,还需要多安装hadoop,故其所需安装配置如下:
- Ubuntu 16.04;
- Jdk8(java8开发环境);
- Scala 2.11;
- Hadoop 2.7.7;
- Spark2.4.6(Pre-built for Apache Hadoop2.7);
-
注意:
- Hadoop版本应该跟Spark的预编译Hadoop版本一致;
- 我的所有安装都是在个人账户下安装,没有用root账号;
3. 共用软件的安装
不管是Local,还是Standalone单机伪分布式都必须安装Python3.5 + Jupyter Notebook,Jdk8,Scala 2.11,故优先说明这三款软件的安装方法。
- Python3.5 + Jupyter Notebook;
- Jdk8(java8开发环境);
- Scala 2.11;
软件的安装都是基于个人账号,没有使用root账号;
3.1. Python3.5 + Jupyter Notebook
因为服务器之前已经安装过Python3.5,故在此省略其安装的说明,直接说明Jupyter Notebook。
如果不需要Jupyter Notebook则可跳过。
- 以下内容简介:
- Jupyter Notebook的2种安装方式;
- 在服务器为Python安装Jupyter Notebook的具体操作;
- 远程登录Jupyter Notebook的具体操作;
- Python调用Spark的方法;
- 可能存在的异常情况的处理方式;
3.1.1. Jupyter Notebook的安装种类
- 安装Anaconda,使用Anaconda自带的Jupyter Notebook;
- 安装Python,然后为该Python虚拟环境安装Jupyter Notebook(本次采用此种方法);
3.1.2. Python安装Jupyter Notebook的方法
以下均在命令行环境进行
- 激活Python3.5虚拟环境,然后运行
pip3 install jupyter notebook
为该虚拟环境安装Jupyter Notebook; - 输入
jupyter notebook --generate-config
生成jupyter的配置文件; - 输入
ipython
进入Ipython模式; - 在Ipython模式下,输入
from notebook.auth import passwd; passwd()
进入密码配置环节; - 在Ipython模式下,按照要求输入原始密码,Ipython会返回如
argon2:$argon2id$v=19$m=10240,t=10,p=xxxx
的密文; - 打开
/home/usr/.jupyter/jupyter_notebook_config.py
,在其最开始增加以下5行:
c.NotebookApp.ip='*' # 意思是任意IP都可以访问
c.NotebookApp.password = u'此处填写前面原始密码对应的整条密文'
c.NotebookApp.open_browser = False # 意思是默认不打开浏览器,如果该服务器没有对应显示器,此处必须修改,否则一运行即会因为没有显示器用于打开浏览器导致出错
c.NotebookApp.port =8888 # 随便指定一个你想要的端口,后面可以从这个端口使用
c.NotebookApp.allow_remote_access = True # 允许远程访问
- 完成以上配置后,回到命令行,在处于激活Python3.5虚拟环境的前提下