本篇博主将介绍大家中学习前面的hadoop文章中可能出现的问题。
首先,可能涉及的命令:
#命令:startx启动linux图形界面
#设置时间(或者也可使用ntp做linux时间同步)
sudo date -s "2018-11-06 21:00:00"
#安装tree命令(可用于查看进程、目录等)
yum install -y tree
#递归查看根目录
ll -R /
一、运行mr程序出错
#错误效果
connecting to resoucemanager
retrying ....
retrying .....
#原因是没有启动yarn或者启动失败
二、初始化工作目录结构
hdfs namenode -format 只是初始化了namenode的工作目录,而datanode的工作目录是在第一次将datanode启动后自己初始化的。如果将datanode的原来的工作目录删除掉,再次启动会得到一个全新的datanode。
三、datanode不被namenode识别的问题
namenode在format初始化的时候会形成两个标识:blockPoolId、clusterId;这两个标识会在datanode初始化成功加入集群后记录到namenode的工作空间,标识该namenode所属的hdfs集群的唯一标识。如果namenode重新format后,这两个值会生成新的值,原来的namenode就无法被识别,此时需要删除原来的namenode的工作目录,重新启动。
四、datanode下线后多久看到效果
datanode没有做类似于之前文章中提到的利用zookeeper做成服务动态感知的方式,不是一下线就会被namenode认定为下线的,有一个超时时间。
五、关于副本数量的问题
副本数由客户端的参数dfs.replication决定(优先级: 代码conf.set() > 自定义配置文件 > jar包中的hdfs-default.xml),服务器上配置的那个值 只对命令行客户端生效。
六、HADOOP_HOME or hadoop.home.dir are not set问题
[main] DEBUG org.apache.hadoop.util.Shell - Failed to detect a valid hadoop home directory
java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set
1.在windows中设置环境变量HADOOP_HOME和hadoop.home.dir
2.如果还不行就在代码中初始化hdfs客户端之前设置系统环境变量:
· windows中:System.setProperty("hadoop.home.dir", "E:\\\\hadoop-2.9.1");
linux中:System.setProperty("hadoop.home.dir", "/usr/local/hadoop-2.9.1");
七、windows连接上hdfs服务器后,安全模式关闭后,java程序可读取但是不能写操作,
这是因为默认是用当前用户名去通信的;解决方案:(1)可关闭权限校验或去改当前用户名(2)System.setProperty("HADOOP_USER_NAME","xxx");
八、windos中命令运行hdfs api是报错
检查自己是否已经将hadoop在本机上编译生成的文件放入相应的hadoop目录。
最后寄语,以上是博主本次文章的全部内容,如果大家觉得博主的文章还不错,请点赞;如果您对博主其它服务器大数据技术或者博主本人感兴趣,请关注博主博客,并且欢迎随时跟博主沟通交流。