Hadoop 2.6.0修改配置PID文件路径

修改原因


Hadoop启动后的PID文件默认配置是保存在 /tmp 目录下的,而linux下 /tmp 目录会定时清理,所以在集群运行一段时间后如果在停Hadoop相关服务是会出现类似:no datanode to stop 的错误提示,一般生产环境中我们需要重新修改PID的保存路径。关于Linux定期清理tmp目录参考我之前的文章:http://openskill.cn/article/413
 

Hadoop修改


1、HDFS
增加或修改:$HADOOP_HOME/etc/hadoop/hadoop-env.sh如下:
# 修改为你想存放的路径
export HADOOP_PID_DIR=/data/hadoop/pids
export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}

2、MapReduce
增加或修改:$HADOOP_HOME/etc/hadoop/mapred-env.sh如下:
# 修改mapred的pid存放路径
export HADOOP_MAPRED_PID_DIR=/data/hadoop/pids
**ps: 自定义存储目录需要先创建好。
 

Hbase 修改


增加或修改:$HBASE_HOME/conf/hbase-env.sh 如下:
#hbase PID存放路径配置
export HBASE_PID_DIR=/data/hadoop/pids

命名规则说明


我阅读了一下stop-all.sh stop-dfs.sh,stop-yarn.sh脚本,发现原理都是通过一个pid文件来停止集群的。
 
这些进程的pid文件默认都是保存在系统的/tmp目录下面,Linux系统(Centos/RHEL等)每个一段时间就会清楚/tmp下面的内容,如果/tmp下没有相关的pid文件停止就会出错“no datanode to stop”
 
当我重启出现问题的时候我怕强制kill -9杀进程的话会破坏集群,于是我想到一个方法,按照pid文件的命名规则重新在/tmp目录下面创建这些pid文件,在翻看了一堆sbin目录下的脚本之后,找到了它们的命名规则。

比如hadoop相关进程的pid文件命名规则为:
pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid
Yarn进程相关的PID文件:
pid=$YARN_PID_DIR/yarn-$YARN_IDENT_STRING-$command.pid
默认情况下$HADOOP_PID_DIR和$YARN_PID_DIR都为/tmp,$HADOOP_IDENT_STRING和$YARN_IDENT_STRING都为当前系统登录的用户名,比如我的用户名为root,$command为当前执行的命令:
 
比如执行了一个 hadoop-daemon.sh stop namenode,这时候就会去找/tmp/hadoop-root-namenode.pid文件拿到namenode进程的pid号,来停止namenode进程。
 
了解原理之后,于是我就开始手动创建这些文件,我首先jps把所有进程的pid都记录下来了,然后在/tmp目录按照命名规则创建好了这些进程的pid文件,然后再重新执行stop-all.sh命令,ok可以成功关闭集群了。这是我处理的一个过程,最后为了避免这种情况,我就做了如上修改的操作!

0 个评论

要回复文章请先登录注册