背景分析
今早同事突然说,hive在服务器登录不上去了,报权限问题。集群一直好好的怎么报权限问题呢个?笔者问了问情况,了解到原来该同事是看tmp目录下存储的较多的数据觉得浪费空间所以清理了/tmp。为了帮助新同事萌了解问题提供解决思路,首先这个问题比较简单,添加权限就可以,明白tmp下目录信息,特此记录
tmp中究竟存储了什么?
我们登录hdfs web ui发现/tmp目录下存储了如下信息:
我们发现首先,里面会有一个hadoop-yarn的目录,很显然这些信息是集群yarn工作的临时存储目录,也就是作mapreduce操作期间的临时存储,里边存储了job的staging。 Mapreduce工件,中间数据等将保存在该目录下。 mapreduce作业执行完成后,这些文件将自动清除。如果删除此临时文件,则可能会影响当前正在运行的mapreduce作业。
其次,我们发现tmp目录下有一个名为hive的目录,那么这个目录是什么呢?我们进入目录进行查看发现存储的是db信息。
这样我们想到了hive临时存储设置,我们进入hive查看hive的临时存储设置执行命令如下:
set hive.exec.scratchdir;
发现该目录确为hive临时存储目录,用于存储Hive的临时输出和计划,在hive client启动时会进行读取,这也是为什么启动client报错的原因。
最后,我们发现我们还有一个logs的目录,查看目录我们不难了解到,这个其实是我们mapreduce的任务日志的存储目录。
作业运行结束后(无论正常结束与否),将持久化日志到 yarn.nodemanager.remote-app-log-dir,而其默认存储为/tmp/logs。
问题解决
说到这里我们大概了解到了清理/tmp下的数据,也要注意,不能暴力清洗。因为是权限问题,所以我们为盖目录添加权限:
hadoop fs -chmod -R 777 /tmp