启动Hadoop之后jps查看不到相关进程
说在前面
一定要清楚启动hadoop的是root用户还是自建的hadoop用户,linux下面对于不同用户的权限管理是很明确的。为防止胡乱修改一些文件产生一些不可修复的错误(别问为什么,俺就是有问题就百度然后就会改一些自己也不知道是啥的文件),新手还是建议用hadoop用户。
然后清楚一些常用的配置文件和参数,比如说hdfs-site.xml里面的dfs.namenode.name.dir和dfs.datanode.data.dir这两个目录(因为有一个错误就和这个有关系)
然后还有一点,慢慢学着看日志中的错误信息,有针对性的解(bai)决(du)问题。启动的时候会输出日志存放的位置,到那里面看这个文件就行了,也没有多难,就是文件是追加的,可能内容很多,所以建议使用tail命令,在最后用到的命令里面有。
然后俺目前的hadoop版本是2.7.4,正常启动的话namenode上面要有NameNode和ResourceManager进程,datanode上面要有DataNode和NodeManager进程。
唠叨完了,下面正文开始,几个我遇见过的问题,附上解决方法,水平有限,欢迎指教。
1. VERSION文件中的clusterID不一致
这几个错误在启动的时候应该都不会有啥出错信息,如果jps发现没有datanode这个进程的话就去查看一个datanode的日志吧,这个错误是会有明确的说的,就是会告诉你clusterID不一致,然后这个clusterID是在VERSION文件里面的,这个文件在namenode上面是在dfs.namenode.name.dir(hdfs-site.xml文件中配置)这个目录下面的current目录下,然后datanode里面就是在dfs.datanode.data.dir这个配置的目录的current目录下。我的环境里面这俩目录最后的文件夹分别是nn和dd,下面用到的时候就直接这么写了。
解决
最痛快的方式,清空nn和dd目录
2. 端口号占用
如果错误是提示端口号占用问题,那么首先我们要看一下是哪个进程在占用这个端口,然后保险起见再去看一下这个进程的详细信息,我遇见的一般就是上个用户启动了集群然后关闭的时候没有遗留的进程,这种情况直接kill掉就行了。如果是最开始装的时候自己设的端口和系统的一些进程端口冲突了,建议换一下端口哈。
解决
杀掉遗留进程,重新启动。
3. 文件权限问题
这个问题就是最开始说的,权限,很重要,比如说我用root用户建了个文件夹,然后把它配成了dfs.namenode.name.dir的路径,可能用hadoop用户启动集群的时候就会出问题,我遇到的问题好像就是这里,因为配置异构存储的时候要配置多个路径,有的时候用root登录上建了文件夹之后会忘记改一下权限。
解决
修改权限就好了。
4. 终极解决方案
清空nn和dd目录,然后重启。除了这俩之外还有一个core-site.xml文件里的hadoop.tmp.dir这个配置的目录,有的时候也会出问题,如果是发现日志中有关于这个的错误或者百度错误的时候发现有这个相关的,知道是到这个文件里找就行了,然后一般重新配置或者清空就行了。
5. hadoop和本机配置了不同的jvm
这个问题我觉得可能大家一般遇不到,我是实验室里面的服务器,然后感觉找遍了所有的办法可还是jps不到进程,请教了师兄才知道,hadoop的JAVA_HOME配置了openj9,而默认的是hotspot的,所以hotspot的jps是看不到openj9的进程的,要用openj9的路径下面的jps
对于这个hadoop的JAVA_HOME在hadoop-env.sh文件里面。
用到的一些命令
查看指定文件的最后200行
cat 文件 | tail -n 200
查看指定端口的占用情况
netstat -nltp | grep 端口号
查看进程的完整启动路径和参数
ps aux
杀掉进程
kill -9 PID
递归修改文件夹属主和组
chown -R 用户名:组名 要修改的文件夹
修改文件夹权限
chmod 想要改成的权限 文件夹
eg:chmod 700 /home/xy/data
最后,问一下markdown如何做到既能让它是标题又标注然后目录里面不出现那俩横杠杠呀,好别扭…