温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github: https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.问题描述
1.使用Hue登录执行Hive查询
2.Hive设置执行引擎为Spark
Hive配置了Spark作为默认执行引擎,在通过Hue执行Hive查询后,退出Hue后Spark的Session并为随着Hue的退出而关闭,操作如下:
登录Hue执行SQL语句,可以看到提交的是一个Spark作业
查看Yarn的界面显示该Spark Session正在运行
此时退出Hue界面,观察0003的作业任然在运行并为随着Hue的退出而关闭
如果不同的用户登录Hue执行Hive的SQL操作,会产生大量的SparkSession未关闭问题,导致占用集群资源。
2.解决方法
针对上述问题,有如下两种方式解决:
1.从CDH5.8版本开始,在Hue上提供一个用来关闭Spark Session的按钮,用户可以使用此功能来关闭当前会话,操作如下:
点击Session,进入如下界面
点击“Close”关闭当前Spark Session
查看Yarn的8080界面,确认该Session是否已关闭
此时可以看到Spark Session已经关闭。
2.通过设置HiveServer2的会话超时参数,默认为12小时,可以将会话超时时间设置的短一些,如果用户在设置的超时时间未使用他创建的会话则会话会自动关闭,设置方式如下:
登录CM进入Hive服务的配置界面
在搜索栏搜索“Idle Session Timeout”,在如下配置项配置会话超时时间
保存配置,回到CM主要根据提示重启相应服务。
3.总结
1.由于Hive使用Spark引擎,所以不同的用户登录Hue执行Hive查询都会创建一个Spark Session会话,如果不关闭会话就会产生大量的未关闭Spark作业占用集资源。
2.同一个用户重复登录Hue不会重复的创建Spark Session
3.上述提供两种方式来关闭会话,一种需要用户手动的操作关闭会话,另一种方式通过HiveServer2服务的会话超时时间来自动结束Spark Session,在使用中可以将两种方式结合起来共同使用。