BigData——Q&A Notice2
Q&A Notice
Mysql安装遇见问题:
error: Failed dependencies: MySQL conflicts with mysql-5.1.71-1.el6.x86_64
解决办法
ps aux | grep mysql
kill -9 进程号
mysql的相关命令是
/etc/init.d/mysql status/start/stop/..
Hbase挂掉子节点:
子节点的HRegionServer进程挂掉了
查看LOG日志
zookeeper.RecoverableZooKeep er: ZooKeeper delete failed after 4 attempts
首先关闭hbase、zookeeper。
查看hbase自带zookeeper是否占用2181端口。 启动zookeeper
zkCli.sh
ls /
rmr /hbase
quit
zkServer.sh restart
当然也有可能是时间不一致导致的,注意同步各节点的时间 再启动hbase即可。
解决关闭Hadoop时no namenode to stop异常
在实行了hadoop-stop-all.sh命令以后,相关hadoop进程没有关掉。
在$hadoop-2.6.0/sbin/hadoop-daemon.sh中可以发现:
if [ -f $pid ]; then
....#省略n多行
else
echo no $command to stop
fi
这样就很明显了,如果pid文件不存在就会打印:no xxx to stop
那么pid是什么文件,为什么会不存在,找到pid变量的声明语句,在脚本文件的第107行:
pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid #第107行
接着再找HADOOP_PID_DIR变量的声明部分:
首先在脚本注释部分找了很关键的一句话:
# HADOOP_PID_DIR The pid files are stored. /tmp by default.
我们知道了,HADOOP_PID_DIR 变量保存的是pid文件的存储路径。默认存储在/tmp目录中,代码如下:
if [ "$HADOOP_PID_DIR" = "" ]; then //97~99行
HADOOP_PID_DIR=/tmp
fi
那么这个pid文件是啥呢。Hadoop启动后,会把进程的PID号存储在一个文件中,这样执行stop-dfs脚本时就可以按照进程PID去关闭进程了。
现在问题原因很明确了,就是/tmp目录下的hadoop-*.pid的文件找不到了。可以翻看对应的文件夹,除了我们需要的,其他啥都有!
我们知道/tmp是临时目录,系统会定时清理该目录中的文件。显然把pid文件放在这里是不靠谱的,pid文件长时间不被访问,早被清理了!
既然Hadoop不知道需要关闭哪些进程了,那我们只能手动关闭了!
先用ps -ef查看namenode\datanode等进程的PID,然后用kill -9干掉即可!
为了避免以上情况重复发生,我们需要修改pid文件的位置,以免pid文件被清理,从而影响到我们脚本的运行。
修改pid文件存放目录,只需要在hadoop-daemon.sh脚本中添加一行声明即可:
HADOOP_PID_DIR=/root/hadoop/pid #第25行
记住要先关闭Hadoop再修改,不然你修改完又无法关闭了!同样的道理,你还需要修改yarn-daemon.sh
YARN_PID_DIR=/root/hadoop/pid
有时会发现学习是一件很快乐的事情 比一直跑步容易多了 不是嘛