一、交互式工具的启动
进入Spark部署目录,基于单机模式启动spark-shell应用,在命令行提示符$后面输入命令./bin/spark-shell--master。如下所示:
之后出现如下信息,这些信息中包含了交互式工具运行的环境信息(如是否带Hive等)以及预构建的一些实例(如预构建的SparkContext和SQLContext实例等):
最后会生成SparkContext和SQLContext两个实例,这两个实例对应的名称分别为sc和sqlContext。Spark 1.3版本在交互式工具spark-shell启动后,自动构建了这两个实例,通常用SparkContext代表Driver Program。
在实例中将直接使用sqlContext进行操作,生成SparkContext和SQLContext两个实例见下面日志信息:
回车后就可以进入Spark应用程序的交互式界面,可以进行Spark应用程序的交互式开发、调试了。交互式界面上,输入命令的提示以scala>开头,执行输入的命令后会给出命令执行的日志和反馈信息。
当前交互式工具spark-shell使用了默认值--deploy-mode,即以客户端(Client)部署模式启动,因此,启动的Driver Program在提交节点上运行。通过启动节点的http://driv-er:4040地址可以打开Driver的Web Interface界面。
二、交互式工具的多次启动
(一)在Spark 1.3之前的版本
在Spark1.3之前的版本时,若要在相同节点上启动多个Spark应用程序时(特指部署模式为“Client”的情况下,Spark应用程序的Driver Program在启动节点上运行),比如用交互式工具的方式多次启动Spark应用程序时,系统会报以下错误,如图2.3所示:
这种情况下,后启动的Spark应用程序的Driver仍然使用了默认的4040端口,以致启动时地址被占用,进而最终Spark应用程序启动失败。
对应的解决方法如下:
1.查看代码:SparkUI.scala
图2.3 Driver Program启动时地址被占用的界面
2.修改配置,添加spark.ui.port属性。如提交时,添加:--conf"spark.ui.port"=4041即可。
注意:Spark的属性配置可以通过三种方式进行设置:
1)可以在程序部署时的提交命令的--conf选项中通过设置Spark的配置文件(如conf/spark-defalut.conf)进行设置。
2)可以在Spark的环境变量文件中的java启动选项(如在conf/spark-env.sh文件中的环境变量Spark_DAEMON_JAVA_OPTS)里添加Spark的属性配置。
3)可以通过指定配置文件等方式进行设置。
如果spark.ui.port的值设置为0,系统就会随机选取一个端口号。参考源码:java.net.ServerSocket:ServerSocket对象的绑定端口为0,getLocalPort方法返回一个随机的端口(这类端口被称为匿名端口)。
(二)Spark 1.3版本
Spark1.3版本可在一个节点上多次启动Spark应用程序,如多次运行交互式工具spark-shell。具体方式是,Spark1.3在已启动应用程序的计算机上再次启动应用时,如果启动应用的命令没有指定Driver Progam的Web Interface的端口号的话,启动的应用会先从默认的端口4040开始启动,由于该端口已经被占用,因此首次启动时会报错,如下面的日志所示:
当默认端口4040绑定失败后,提交应用程序会递增端口号(4041、4042、……),尝试重新启动Spark应用,直到找到一个可用的端口号为止,这时候,启动Driver Program成功,进入交互式界面。下列代码所示为已经成功绑定了4041端口号,成功启动Spark应用,代码执行结果如下:
三、DriverProgram的WebInterface界面
Driver Program的Web Interface界面用于查看该Driver Program的信息,包括Driver Pro-gram的Jobs信息、Stages信息、Storage信息、Environment信息和Executors信息。
(一)打开Web Interface页面(www.xing528.com)
Web Interface地址:http∶//driverhost∶4040/jobs/,界面内容如图2.4所示。
图2.4 Driver Program监控界面
其中,driverhost为交互式工具启动节点的hostname。
Web Interface界面包含Spark版本信息,以及当前Driver Program中的Jobs、Stages、Storage、Environment以及Executors信息。
注意:当使用hostname时,需要保证已经在系统的hosts配置文件中添加了hostname与IP地址的对应关系。在Linux系统上,hosts的配置方法如下:
1.使用vim工具打开hosts文件:vim/etc/hosts。
2.在文件中添加配置的hostname与IP的映射关系,比如:
(二)Web Interface界面内容解析
Driver Program的Web Interface界面中各个Tab页包含的详细信息如下:
1.Jobs页。打开driver program监控界面时的默认页,如图2.5所示。
在Jobs页中,包含了当前Driver Program运行持续的时间,当前Jobs的调度模式(默认调度模式为FIFO)以及全部Jobs的具体信息。
注意:由于当前未提交任何Job,界面的Jobs内容为空。
2.Stages页。显示当前Driver Program所有Jobs的Stages信息,包含的具体内容如图2.6所示。
图2.5 Driver Program监控界面的Jobs页
图2.6 Driver Program监控界面的Stages页
在Stages页面,包含了当前Driver Program运行持续的时间,当前Stages的调度模式(默认调度模式为FIFO)以及全部Jobs的Stages的具体信息。
3.Storage页。显示当前Driver Program所有Jobs的Storage信息,包含的具体内容如图2.7所示。
图2.7 Driver Program监控界面的Storage页
在Stages页面,包含了当前Driver Program的存储信息,存储信息包含了RDD的名字、存储级别、缓存的分区数、缓存分区占全部分区的比例、缓存在内存的数据大小、缓存在Tachyon中的数据大小、存储在磁盘的数据大小。
4.Environment页。显示当前Driver Program的Environment信息,包含的具体内容如图2.8所示。
在Environment页面,包含了当前Driver Program的环境配置信息,具体包含四大类:Runtime Information、Spark Properties、System Properties以及Classpath Entries。
5.Executors页。显示当前Driver Program的Executors信息,包含的具体内容如图2.9所示。
在Environment页面,包含了当前Spark应用程序用到的Executors信息,包含当前Spark应用程序分配的总内存大小,使用的磁盘大小以及Executor的具体信息。
Executor的信息包含:Executor的ID、执行的地址(host:port)、RDD的分块数(Blocks)、内存使用大小、磁盘使用大小、当前Active状态的任务数、失败的任务数、总的任务数等信息。
由于当前Spark应用程序仅启动了Driver Program,故只分配了一个Executor,并且Exec- utor ID为<driver>。
图2.8 Driver Program监控界面的Environment页
图2.9 Driver Program监控界面的Executors页
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。