spark踩坑日记——ctrl+c强制终止导致的端口占用

95 阅读2分钟

报错信息

1.png Error: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 65674.0 failed 1 times, most recent failure: Lost task 1.0 in stage 65674.0 (TID 731972, localhost, executor driver): java.io.FileNotFoundException: /tmp/blockmgr-e919a06f-12b4-4dbf-954a-d66a56d9ba11/23/temp_shuffle_d792d883-9605-40c3-abff-a7a1b9eec268 (没有那个文件或目录)

使用spark查询hive数据库报错。 起初报错内容推测有两种可能:

  • 因为找不到这个临时文件,推测/tmp的权限问题
  • 之前遇到过类似的报错内容,怀疑是executor内存溢出

踩坑历程:

  1. 赋予当前用户对临时文件夹/tmp的读写权限
  2. 更改yarn-site.xml中的yarn.nodemanager.resource.memory-mb的值
  3. 修改spark-default.conf中spark.executor.memory的值,默认大小为1G

修改完配置,并重启,查询sql发现还是报同样的错误。网上的关于这类的报错信息大多数都指向/tmp的权限问题以及内存。

解决:

  1. 尝试直接通过hive进行查询👇,查询成功,说明问题出在spark上

2.png

  1. 查看spark的日志,发现端口6068被占用👇,然后查看该占用该端口的进程并kill掉

3.png 3. 但是sql查询同样还是报错,查看日志还是存在端口占用,但不知道是哪个。于是尝试将spark各服务kill掉并重启,企图解决端口占用问题。在关掉并重启spark的thritfserver之后,发现已经可以正常查询sql,问题结局。

原因: 之前的Beeline会话直接通过ctrl+c进行了强制终止,但进程没有退,也就是没有正确释放端口,则下次启动Beeline时可能会发生端口冲突,所以最好还是通过输入!quit来进行退出。