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
如果一切正常安装,可以看到类似于此的输出:
[图片上传失败...(image-1e8f8f-1511414085008)]
到目前为止,你可能会在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中的值。这是
现在,转到Spark安装目录并输入:
[图片上传失败...(image-4fc397-1511414085008)]
可以看到看到类似的输出:
16
现在,在启动master服务器的计算机中访问localhost:8080,如果无法访问Web浏览器,但是将其他设备连接到同一个专用网络(例如手机),通过
!master_web_ui
在这个网站,你可以看到在Spark Logo后面的一个URL参数类似的spark://
步骤5:连接slaves
现在你有一台master服务器运行,是时候启动几台slave服务器来完成这项工作。要启动slave服务器,必须使用从master服务器Web界面复制的URL,在Spark安装路径键入以下命令:
[图片上传失败...(image-ca004b-1511414085008)]
你应该看到一个非常类似于master的输出。
在要连接到集群的每台计算机上执行此操作。在本教程中,运行2个slaves。
之后,如果再次访问master服务器Web界面,在「Workers」中看到几行,均是启动的slave服务器。还有一些有用的信息,如worker的内存、状态、使用的核心和ip。
[图片上传失败...(image-e5cc5c-1511414085008)]
也可以点击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或
28
要关闭master服务器和slave服务器,请在Spark安装目录下运行以下命令:
29
要关闭jupyter虚拟环境,只需运行以下命令: