Spark REST API接口介绍
功能简介
Spark的REST API以JSON格式展现Web UI的一些指标,提供用户一种更简单的方法去创建新的展示和监控的工具,并且支持查询正在运行的app和已经结束的app的相关信息。开源的Spark REST接口支持对Jobs、Stages、Storage、Environment和Executors的信息进行查询,MRS版本中添加了查询SQL、JDBC/ODBC Server和Streaming的信息的REST接口。开源REST接口完整和详细的描述请参考官网上的文档以了解其使用方法:https://spark.apache.org/docs/2.2.2/monitoring.html#rest-api。
准备运行环境
安装客户端。在节点上安装客户端,如安装到“/opt/client”目录。
- 确认服务端Spark组件已经安装,并正常运行。
- 客户端运行环境已安装1.7或1.8版本的JDK。
- 获取并解压缩安装包“MRS_Spark_Client.tar”。执行如下命令解压。
tar -xvf MRS_Spark_ClientConfig.tar
由于不兼容老版本客户端,建议用户获取与服务端集群相同版本的客户端安装包进行安装部署。
- 进入解压文件夹,即“MRS_Spark_ClientConfig”,执行下列命令安装客户端
其中“/opt/client”为用户自定义路径,此处仅为举例。
- 进入客户端安装目录“/opt/client”,执行下列命令初始化环境变量。
REST接口
通过以下命令可跳过REST接口过滤器获取相应的应用信息。
- 获取JobHistory中所有应用信息:
- 命令:
curl https://192.168.227.16:18080/api/v1/applications?mode=monitoring --insecure
其中192.168.227.16为JobHistory节点的业务IP,18080为JobHistory的端口号。
- 结果:
[ { "id" : "application_1478570725074_0042", "name" : "Spark-JDBCServer", "attempts" : [ { "startTime" : "2016-11-09T16:57:15.237CST", "endTime" : "2016-11-09T17:01:22.573CST", "lastUpdated" : "2016-11-09T17:01:22.614CST", "duration" : 247336, "sparkUser" : "spark", "completed" : true } ] }, { "id" : "application_1478570725074_0047-part1", "name" : "SparkSQL::192.168.169.84", "attempts" : [ { "startTime" : "2016-11-10T11:57:36.626CST", "endTime" : "1969-12-31T07:59:59.999CST", "lastUpdated" : "2016-11-10T11:57:48.613CST", "duration" : 0, "sparkUser" : "admin", "completed" : false } ] }]
- 结果分析:
通过这个命令,可以查询当前集群中所有的Spark应用(包括正在运行的应用和已经完成的应用),每个应用的信息如下表 1 。
- 命令:
- 获取JobHistory中某个应用的信息:
- 命令:
curl https://192.168.227.16:18080/api/v1/applications/application_1478570725074_0042?mode=monitoring --insecure
其中192.168.227.16为JobHistory节点的业务IP,18080为JobHistory的端口号,application_1478570725074_0042为应用的id。
- 结果:
{ "id" : "application_1478570725074_0042", "name" : "Spark-JDBCServer", "attempts" : [ { "startTime" : "2016-11-09T16:57:15.237CST", "endTime" : "2016-11-09T17:01:22.573CST", "lastUpdated" : "2016-11-09T17:01:22.614CST", "duration" : 247336, "sparkUser" : "spark", "completed" : true } ] }
- 结果分析:
通过这个命令,可以查询某个Spark应用的信息,显示的信息如表1所示。
- 命令:
- 获取正在执行的某个应用的Executor信息:
- 针对alive executor命令:
curl https://192.168.169.84:26001/proxy/application_1478570725074_0046/api/v1/applications/application_1478570725074_0046/executors?mode=monitoring --insecure
- 针对全部executor(alive&dead)命令:
curl https://192.168.169.84:26001/proxy/application_1478570725074_0046/api/v1/applications/application_1478570725074_0046/allexecutors?mode=monitoring --insecure
其中192.168.195.232为ResourceManager主节点的业务IP,26001为ResourceManager的端口号,application_1478570725074_0046为在YARN中的应用ID。
- 结果:
[{ "id" : "driver", "hostPort" : "192.168.169.84:23886", "isActive" : true, "rddBlocks" : 0, "memoryUsed" : 0, "diskUsed" : 0, "activeTasks" : 0, "failedTasks" : 0, "completedTasks" : 0, "totalTasks" : 0, "totalDuration" : 0, "totalInputBytes" : 0, "totalShuffleRead" : 0, "totalShuffleWrite" : 0, "maxMemory" : 278019440, "executorLogs" : { } }, { "id" : "1", "hostPort" : "192.168.169.84:23902", "isActive" : true, "rddBlocks" : 0, "memoryUsed" : 0, "diskUsed" : 0, "activeTasks" : 0, "failedTasks" : 0, "completedTasks" : 0, "totalTasks" : 0, "totalDuration" : 0, "totalInputBytes" : 0, "totalShuffleRead" : 0, "totalShuffleWrite" : 0, "maxMemory" : 555755765, "executorLogs" : { "stdout" : "https://XTJ-224:26010/node/containerlogs/container_1478570725074_0049_01_000002/admin/stdout?start=-4096", "stderr" : "https://XTJ-224:26010/node/containerlogs/container_1478570725074_0049_01_000002/admin/stderr?start=-4096" } } ]
- 结果分析:
通过这个命令,可以查询当前应用的所有Executor信息(包括Driver),每个Executor的信息包含如下表 2所示的常用信息。
- 针对alive executor命令:
REST API增强
- SQL相关的命令:获取所有SQL语句和执行时间最长的SQL语句
- SparkUI命令:
curl https://192.168.195.232:26001/proxy/application_1476947670799_0053/api/v1/applications/Spark-JDBCServerapplication_1476947670799_0053/SQL?mode=monitoring --insecure
其中192.168.195.232为ResourceManager主节点的业务IP,26001为ResourceManager的端口号,application_1476947670799_0053为在YARN中的应用ID,Spark-JDBCServer是Spark应用的name。
- JobHistory命令:
curl https://192.168.227.16:22500/api/v1/applications/application_1478570725074_0004-part1/SQL?mode=monitoring --insecure
其中192.168.227.16为JobHistory节点的业务IP,22500为JobHistory的端口号,application_1478570725074_0004-part1为应用ID。
- 结果:
SparkUI命令和JobHistory命令的查询结果均为:
{ "longestDurationOfCompletedSQL" : [ { "id" : 0, "status" : "COMPLETED", "description" : "getCallSite at SQLExecution.scala:48", "submissionTime" : "2016/11/08 15:39:00", "duration" : "2 s", "runningJobs" : [ ], "successedJobs" : [ 0 ], "failedJobs" : [ ] } ], "sqls" : [ { "id" : 0, "status" : "COMPLETED", "description" : "getCallSite at SQLExecution.scala:48", "submissionTime" : "2016/11/08 15:39:00", "duration" : "2 s", "runningJobs" : [ ], "successedJobs" : [ 0 ], "failedJobs" : [ ] }] }
- 结果分析:
通过这个命令,可以查询当前应用的所有SQL语句的信息(即结果中“sqls”的部分),执行时间最长的SQL语句的信息(即结果中“longestDurationOfCompletedSQL”的部分)。每个SQL语句的信息如下表3。
表3 SQL的常用信息 参数
描述
id
SQL语句的ID
status
SQL语句的执行状态,有RUNNING、COMPLETED、FAILED三种
runningJobs
SQL语句产生的job中,正在执行的job列表
successedJobs
SQL语句产生的job中,执行成功的job列表
failedJobs
SQL语句产生的job中,执行失败的job列表
- SparkUI命令:
- JDBC/ODBC Server相关的命令:获取连接数,正在执行的SQL数,所有session信息,所有SQL的信息
- 命令:
curl https://192.168.195.232:26001/proxy/application_1476947670799_0053/api/v1/applications/application_1476947670799_0053/sqlserver?mode=monitoring --insecure
其中192.168.195.232为ResourceManager主节点的业务IP,26001为ResourceManager的端口号,application_1476947670799_0053为在YARN中的应用ID。
- 结果:
{ "sessionNum" : 1, "runningSqlNum" : 0, "sessions" : [ { "user" : "spark", "ip" : "192.168.169.84", "sessionId" : "9dfec575-48b4-4187-876a-71711d3d7a97", "startTime" : "2016/10/29 15:21:10", "finishTime" : "", "duration" : "1 minute 50 seconds", "totalExecute" : 1 } ], "sqls" : [ { "user" : "spark", "jobId" : [ ], "groupId" : "e49ff81a-230f-4892-a209-a48abea2d969", "startTime" : "2016/10/29 15:21:13", "finishTime" : "2016/10/29 15:21:14", "duration" : "555 ms", "statement" : "show tables", "state" : "FINISHED", "detail" : "== Parsed Logical Plan ==\nShowTablesCommand None\n\n== Analyzed Logical Plan ==\ntableName: string, isTemporary: boolean\nShowTablesCommand None\n\n== Cached Logical Plan ==\nShowTablesCommand None\n\n== Optimized Logical Plan ==\nShowTablesCommand None\n\n== Physical Plan ==\nExecutedCommand ShowTablesCommand None\n\nCode Generation: true" } ] }
- 结果分析:
通过这个命令,可以查询当前JDBC/ODBC应用的session连接数,正在执行的SQL数,所有的session和SQL信息。每个session的信息如下表 4,每个SQL的信息如下表5。
- 命令:
- Streaming相关的命令:获取平均输入频率,平均调度时延,平均执行时长,总时延平均值
- 命令:
curl https://192.168.195.232:26001/proxy/application_1477722033672_0008/api/v1/applications/NetworkWordCountapplication_1477722033672_0008/streaming?mode=monitoring --insecure
其中192.168.195.232为ResourceManager主节点的业务IP,26001为ResourceManager的端口号,application_1477722033672_0008为在YARN中的应用ID,NetworkWordCount是Spark应用的name。
- 结果:
{ "avgInputRate" : "0.00 events/sec", "avgSchedulingDelay" : "1 ms", "avgProcessingTime" : "72 ms", "avgTotalDelay" : "73 ms" }
- 结果分析:
- 命令: