先丢点问题小结到这里,免得忘记,有空再弄个详细教程玩,网上的教程要不就是旧版的,要不就是没说到点子上,随便搞搞也能碰上结果是对的时候,但是知其然而不知其所以然,没意思啊。解决问题的方法有很多种,总得找到比较合适的方法才行的。
1.服务器禁用ipV6配置.
2.Could not locate executable null\bin\winutils.exe in the Hadoop binaries
首先,有个exe,要去下载。其次,注意到提示的路径前面的null,路径没有。。。系统变量设置了HADOOP_HOME也不行,程序中直接设定环境变量,还能省去系统配置,更方便。这玩意应该只有windows系统会要了,exe嘛。。。
System.setProperty("hadoop.home.dir","xxxxxxxxx");
3.连接不上服务器的hdfs端口
查看/etc/hosts中,主机名是否绑定到127.0.0.1或127.0.1.1,这样会有问题,ubuntu中这是主要原因,hosts中主机名要绑定IP。
slaves中去掉localhost,加上所有服务器的主机名,一行一个,/etc/hosts中绑定其它服务器的主机名和对应的IP。
只有一台机器的话,也是直接放主机名,localhost本就是和127.0.0.1绑定的,这就会有前面的绑定ip问题了。就算可以,复制文件到从服务器的时候,还是要改配置的,麻烦。全部用主机名,配置也不用改,hosts绑定都能直接复制。
有的教程中,xml中是用IP的,但是个人认为用主机名好,然后在hosts中绑定一下。用IP的话,服务器的IP一换,要改的地方就多了,用主机名时只要改改hosts就好了。
综上所述,为了避免乱七八糟的问题,不要用127.0.0.1,不要用localhost,不要用IP,用主机名加hosts配置,省事还不容易出错。
slaves中的配置是datanode起来的关键,列出的机器,才会有datanode服务。
4.windows连接上hdfs服务器后,安全模式关闭后,java程序可读取但是不能写操作,这是因为默认是用当前用户名去通信的,关闭权限校验?或去改当前用户名?麻烦,直接一行代码搞定!
System.setProperty("HADOOP_USER_NAME","xxxxxxxx");
当然,安全模式开启了的话,肯定是不能写的了。
查看安全模式状态
hadoop dfsadmin -safemode get