Jupyter与Spark开发环境配置指南

 

 

什么是Spark?

Spark是使用大量数据进行计算的框架。为什么需要Spark?比如,一个易于读入内存的小型数据集,Gb级的,你可能会使用Pandas,R或其他工具加载整个数据集,并且之后进行一些清洗和可视化,如果使用合适的计算机(或云计算基础设施),你将轻松完成而没有计算性能相关的麻烦。

现在你必须处理1Tb(或更大)的数据集,并训练一个机器学习算法。即使使用强大的电脑也是疯狂的。Spark 提供了处理这些数据怪物所需的两个功能:

  • 并行计算:你使用的不是一台而是多台计算机来加速
  • 容错:如果某台计算机在处理过程中间挂起,则必须能够恢复。

Spark如何在内部工作原理超出了本教程的范围,假设你已经熟悉了。无论如何,你不需要Spark的知识来设置并运行自己的集群。

什么是Spark集群,“独立”是什么意思?

Spark集群

Spark集群是一些运行Spark并且一起工作的计算机。一个集群包括:

  • Master:是安排一切工作的电脑之一。它分配工作并管理一切。
  • Slaves:是完成工作的电脑。他们按照Map Reduce模式处理大量数据集的块。任一计算机可以同时成为Master和 Slaves。

独立

这意味着集群中每台计算机都安装了Spark。正在使用中的集群管理器由Spark提供。还有其他的集群管理器,如Apache Mesos和Hadoop YARN。

要求

按照本教程,你需要:

  • 至少两台电脑:这就是一个集群。
  • Linux:它也适用于OSX,你必须能够运行shell脚本。到目前为止,还没有看到Spark在传统Windows上运行。

对于本教程,我已经使用了带有Ubuntu 17.04的MacBook Air,以及运行Ubuntu 16.04 LTS的Linux子系统的Windows 10。

如果不符合这些要求,请不要担心,请按照以下步骤操作:

  • 下载Oracle Virtualbox。
  • 下载Linux。
  • 在Virtualbox中创建虚拟机,并在其上安装Linux。

就是这样,你有2台Linux系统运行集群。

警告:同时运行2台虚拟机在同一台计算机上,可以用于学习和原型设计,但是将失去在真实集群中的性能提升!

教程

步骤1:安装Java

注意:必须对所有计算机执行此步骤。

Spark需要Java来运行。我的建议使用OPEN JDK8。在终端中运行如下命令:

1

测试Java安装类型:

2

可以看到以下输出:

3

步骤2:安装Spark

下载Spark。在本教程中使用了2.2.0 pre-built。可以去Spark下载页面并从那里下载,如果无法访问图形桌面,并且必须使用命令行才能运行:

4

之后,主目录中有Spark压缩包。解压并移动到home文件夹(推荐但不是必需的),以防将其下载到「下载」文件夹中。

解压缩:

5

移动(可选):

6

最后设置所需的环境变量SPARK_HOME

转到主目录,并使用文本编辑器打开「.bashrc」文件:

7

在文件末尾添加如下内容。当打开计算机或开始交互时,它将设置变量。将来该文件夹​​的名称可能会更改,并且与此处写入的文件夹名称不匹配,但过程是类似的。

8

保存文件。如果你正在使用nano做ctrl+x,键入y并按return下来完成它。

现在可以检查Spark安装。去Spark文件夹并执行pyspark:

9

如果一切正常安装,可以看到类似于此的输出:

10

到目前为止,你可能会在Spark初始化时看到此警告:

11

要解决这个问题,必须安装Hadoop。这是可选的,因为Spark可以运行,但是我猜使用Hadoop可能会有某些性能改进。

步骤3(可选):安装Hadoop

安装Hadoop的过程和Spark几乎是一样的,我会快速完成。这是一个可选步骤,并不需要运行集群。你也可以稍后决定。安装Hadoop的步骤是:

  • 下载Hadoop。可以自由安装任何喜欢的版本,但版本应当高于2.7,因为它是Spark的要求。这和我们安装Spark一样。等效的命令行表达式。
  • 在home目录中解压缩。
  • .bashrc文件末尾添加以下内容:

12

  • 通过启动pyspark测试Hadoop安装,确保警告没有再次出现。

步骤4:启动master服务器

在启动主服务器之前,必须检查ip以将其作为主机参数传递。键入以下命令:

13

可以看到类似的输出:

14

复制第二个inet中的值。这是<your_master_ip>。在这个例子中应该复制192.168.1.143

现在,转到Spark安装目录并输入:

15

可以看到看到类似的输出:

16

现在,在启动master服务器的计算机中访问localhost:8080,如果无法访问Web浏览器,但是将其他设备连接到同一个专用网络(例如手机),通过<your_master_ip>:8080进行访问。在该URL中,可以访问master服务器Web用户界面。

master_web_ui

在这个网站,你可以看到在Spark Logo后面的一个URL参数类似的spark://<your_master_ip>:7077。这个URL非常重要,因为在将slaves连接到集群时,将需要这个URL,我将其命名<your_master_url>

步骤5:连接slaves

现在你有一台master服务器运行,是时候启动几台slave服务器来完成这项工作。要启动slave服务器,必须使用从master服务器Web界面复制的URL,在Spark安装路径键入以下命令:

17

你应该看到一个非常类似于master的输出。

在要连接到集群的每台计算机上执行此操作。在本教程中,运行2个slaves。

之后,如果再次访问master服务器Web界面,在「Workers」中看到几行,均是启动的slave服务器。还有一些有用的信息,如worker的内存、状态、使用的核心和ip。

18

也可以点击Spark Web应用程序中的链接,然后转到工作页面和任务页面。由于没有任何运行的应用程序连接到集群,那么无法访问正在运行和已完成的任务页面。

到目前为止,我们已经有一个运行完整的Spark集群。

步骤6:连接Jupyter

充分利用Spark是与Jupyter这样的交互式工具集成的好主意。如果您已经安装并运行Jupyter,请跳过以下几行,我将介绍如何设置本地Jupyter服务器。

安装Jupyter

安装Jupyter最简单的方法是使用conda。如果你有Anaconda Python发行版,则计算机中已经安装了conda。如果没有,我强烈建议你试一试Anconda。如果不想安装完整的Anaconda Python(它包含大量库,需要大约350Mb),可以选择Miniconda,一款仅包含Python和conda的轻型版本。

如果使用命令行,只需使用curl下载安装文件(shell脚本)并执行'./'

一旦在计算机中安装了conda,我们将创建一个名为「jupyter」的conda虚拟环境,避免造成混乱:

19

现在有一个干净的虚拟环境来安装Jupyter。要激活此环境类型:

20

在环境激活后,在命令提示符的开始处可以看到(jupyter):

21

这意味着环境已被激活,并且以后所做的更改(安装库等)都将在此环境虚拟环境生效。

要安装Jupyter,请键入以下命令:

22

这个命令将安装Jupyter notebook及其所有的依赖项(IPython,Jupyter等),所以你不必担心设置这些东西。

现在是时候启动Jupyter notebook,并测试安装。键入:

23

如果Jupyter正确安装,那么可以在Web浏览器中访问localhost:8888/tree,并查看Jupyter文件目录。

24

安装 findspark

findspark是一个Python库,可以自动导入和像其他Python库使用PySpark。还有其他选择可以集成(为Spark创建一个jupyter配置文件),但是最新的findspark是更快更简单的一个。

要安装findspark,请运行以下命令:

25

已经在jupyter虚拟环境中安装了findpark。

创建第一个Spark应用

要创建一个Spark应用并使用数据制作酷炫的东西,请在Jupyter单元格中运行以下脚本:

26

这个脚本只是初始化findspark,所以你可以导入PySpark作为一个库,并用你的master URL和应用名称(个人决定)创建一个Spark Context实例。

为了测试效果,你可以在Jupyter notebook中显示sc,并且会看到如下输出:

27

当运行长期的任务,可以点击链接并转到应用网站ui,这是非常有趣的。

还应连接到master服务器Web界面(localhost:8080<your_master_ip>:8080),并在Running Applications部分中查看新内容,如下所示:

28

要关闭master服务器和slave服务器,请在Spark安装目录下运行以下命令:

29

要关闭jupyter虚拟环境,只需运行以下命令:

30
就这样!

更多课程和文章尽在微信号:「datartisan数据工匠」

 

由 Editor 于 2017 年 11 月 23 日 发布在 数据科学 栏目