Livy使用 - 关于Session的操作
官网案例:http://livy.incubator.apache.org/examples/
REST API:http://livy.incubator.apache.org/docs/latest/rest-api.html
通过REST API的方式去获取到会话,返回活的交互式会话
打开Postman,在其上面进行操作:
1 | GET 192.168.26.131:8998/sessions |
在Postman上进行操作(操作失败):POST 192.168.26.131:8998/sessions
1 | 1. 选择Body --> from-data |
使用以下方式创建Session
1 | [hadoop@hadoop001 conf]$ curl -X POST --data '{"kind":"spark"}' -H "Content-Type:application/json" 192.168.26.131:8998/sessions |
启动失败,打印如下日志:
1 | 18/06/09 06:35:27 WARN SparkEntries: SparkSession is not supported |
解决方案:启动HDFS
重新启动,启动成功,打印日志
1 | 18/06/09 06:42:56 INFO LineBufferedStream: stdout: 18/06/09 06:42:56 INFO SparkEntries: Spark context finished initialization in 6153ms |
启动成功之后,返回如下JSON信息
1 | { |
创建Seesion成功之后,再去查看活的Seesion信息:
2种方式:
1 | 1. Postman的方式,上面已经有操作 |
返回的JSON信息
1 | { |
Livy基本使用 — 提交简单的作业
查询session的状态
打开Postman,在其上面进行操作
1 | GET 192.168.26.131:8998/sessions/0/state |
执行代码片段,简单的加法操作(一)
1 | [hadoop@hadoop001 livy-0.5.0-incubating-bin]$curl -X POST 192.168.26.131:8998/sessions/0/statements -H "Content-Type:application/json" -d '{"code":"1+1"}' |
查询代码片段执行是否成功
打开Postman,在其上面进行操作
1 | GET 192.168.26.131:8998/sessions/0/statements/0 |
执行代码片段,简单的加法操作(二)
- 打开Postman,在其上面进行操作:
POST 192.168.26.131:8998/sessions/0/statements
- 点击Body –> raw –> JSON{application/json}
输入信息
1
2
3
4{
"kind":"spark",
"code":"1+2"
}点击Send,返回以下信息
1
2
3
4
5
6
7{
"id": 1,
"code": "1+2",
"state": "waiting",
"output": null,
"progress": 0
}
查询代码片段执行是否成功
打开Postman,在其上面进行操作
1 | GET 192.168.26.131:8998/sessions/0/statements/1 |
如果想执行wordcount操作的话,就直接把代码贴在code处就行了
通过web ui查看代码片段执行结果
代码片段与其执行结果都在图中进行了显示
删除session状态
打开Postman,在其上面进行操作:
1 | DELETE 192.168.26.131:8998/sessions/0 |
Livy架构解读
如下图所示
有个客户端client,中间有个livy server,后面有spark interactive session和spark batch session(在这2个里面的底层都是有一个SparkContext的)
client发请求过来(http或rest)到livy server,然后会去spark interactive session和spark batch session分别去创建2个session;与spark集群交互打交道,去创建session的方式有2种:http或rpc,现在用的比较多的方式是:rpc
livy server就是一个rest的服务,收到客户端的请求之后,与spark集群进行连接;客户端只需要把请求发到server上就可以了
这样的话,就分为了3层:
- 最左边:其实就是一个客户单,只需要向livy server发送请求
- 到livy server之后就会去spark集群创建我们的session
- session创建好之后,客户端就可以把作业以代码片段的方式提交上来就OK了,其实就是以请求的方式发到server上就行
这样能带来一个优点,对于原来提交作业机器的压力可以减少很多,我们只要保障Livy Server的HA就OK了
对于这个是可以保证的
对比:
- 使用spark-submit(yarn-client模式)必须在客户端进行提交,如果客户端那台机器挂掉了(driver跑在客户端上,因此driver也就挂了),那么作业全部都完成不了,这就存在一个单点问题
- 在提交作业的时候,很多监控,可以通过UI搞的定,可以获取相应的接口,自己定制化的去开发监控界面
- 通过rest api去把接口拿到、去把数据拿到,这样就可以自己定制化出来了,是很方便的
总体执行的流程
1 | 客户端发一个请求到livy server |
多用户的特性
上述是一个用户的操作,如果第二个、第三个用户来,可以这样操作:
1 | 提交过去的时候,可以共享一个session |
安全性的扩展思路
中间过程,在Livy Server这里,是可以做安全框架的