背景分析

今早同事突然说,hive在服务器登录不上去了,报权限问题。集群一直好好的怎么报权限问题呢个?笔者问了问情况,了解到原来该同事是看tmp目录下存储的较多的数据觉得浪费空间所以清理了/tmp。为了帮助新同事萌了解问题提供解决思路,首先这个问题比较简单,添加权限就可以,明白tmp下目录信息,特此记录

tmp中究竟存储了什么?

我们登录hdfs web ui发现/tmp目录下存储了如下信息:

hive 表权限丢失 启动hive权限不够_hive 表权限丢失


我们发现首先,里面会有一个hadoop-yarn的目录,很显然这些信息是集群yarn工作的临时存储目录,也就是作mapreduce操作期间的临时存储,里边存储了job的staging。 Mapreduce工件,中间数据等将保存在该目录下。 mapreduce作业执行完成后,这些文件将自动清除。如果删除此临时文件,则可能会影响当前正在运行的mapreduce作业。

hive 表权限丢失 启动hive权限不够_mapreduce_02


其次,我们发现tmp目录下有一个名为hive的目录,那么这个目录是什么呢?我们进入目录进行查看发现存储的是db信息。

hive 表权限丢失 启动hive权限不够_mapreduce_03


这样我们想到了hive临时存储设置,我们进入hive查看hive的临时存储设置执行命令如下:

set hive.exec.scratchdir;

hive 表权限丢失 启动hive权限不够_hive_04


发现该目录确为hive临时存储目录,用于存储Hive的临时输出和计划,在hive client启动时会进行读取,这也是为什么启动client报错的原因。

最后,我们发现我们还有一个logs的目录,查看目录我们不难了解到,这个其实是我们mapreduce的任务日志的存储目录。

hive 表权限丢失 启动hive权限不够_hadoop_05


hive 表权限丢失 启动hive权限不够_hdfs_06


作业运行结束后(无论正常结束与否),将持久化日志到 yarn.nodemanager.remote-app-log-dir,而其默认存储为/tmp/logs。

问题解决

说到这里我们大概了解到了清理/tmp下的数据,也要注意,不能暴力清洗。因为是权限问题,所以我们为盖目录添加权限:

hadoop fs -chmod -R 777 /tmp