问题一:
一键停止hdfs相关进程,主节点提示 no namenode to stop。
懵。。。。。
参考了一些资料,得出的结论是stop-dfs.sh找不到主节点的namenode的PID。pid是啥?就是输入jps命令后显示的进程号。各个进程的pid都默认保存在/tmp 目录下。
具体参考hadoop-daemon.sh中的信息。
大意就是找不到pid就打印 no namenode/datanode.. to stop。
ll /tmp
查看该目录下的文件。没有找到namenode对应的pid。
既然hadoop不知道关闭哪些进程,只能手动关闭了。
输入命令kill -9 进程号
再重启hadoop,查看/tmp目录,有对应的pid文件。
你以为这里就完了,太天真了。
~~~~~~我是分割线~~~~~~~~~~~~~分割线~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
各节点进程全部启动完毕,hdfs上传文件也执行成功,打开浏览器用 web UI 访问主节点的namenode情况。
???啥情况?
打开日志文件
50070端口被占用
lsof -i:50070
占用namenode的进程号就是输入jps指令后显示的进程号。查看/tmp目录下的namenode的pid文件,发现两个地方的pid不一致。
搜索了很多资料没有找到类似的情况,即使修改了pid文件的内容,执行在sbin/stop-dfs.sh的时候,仍然提醒no namenode to stop。
在各种尝试下,只想出了一种笨拙的方法。
1.sbin/stop-dfs.sh //一键停止hdfs相关进程
2.kill -9 xxxx //执行jps命令后的namenode进程号
3.rm -rf /home/hadoop/data/tmp/dfs/data //移除data目录下的datanode的数据文件
4.sbin/start-dfs.sh //重新一键启动hdfs相关进程
5.cat /tmp/hadoop-hadoop-namenode.pid //查看pid,与jps下的一致
打开浏览器
至此,问题终于解决。
问题二:
执行hdfs命令时报错:bash:hdfs:commond not found
出现这种错误,首先检查hadoop的环境变量配置是否正确