eclipse远程连接Hadoop遇到的一些问题
网上的教程很多,但是大部分并不详细,省略了很多过程,导致配置不成功。目前看到的最好的一篇配置博客是最详细云服务器Centos7下搭建Hadoop伪分布式集群(防各种坑)
在这里对这篇博客进行一些补充(也算是自己踩的几个坑)
环境:hadoop-2.7.5、jdk-1.8、阿里云服务器、伪分布式、eclipse远程连接
1.JDK版本
写下本文的时候,Apache官网已经可以下载jdk14了.如果使用该版本的jdk,那么在配置好Hadoop相关文件后,对HDFS进行操作,如:
hdfs dfs -ls /
这样的查看命令,会出现各种warning.虽然不影响使用,但是每次运行命令的时候看起来会很烦,所以最好还是使用JDK8吧。
2.DataNode无法启动
在运行start-dfs.sh
后,发现NameNode和SecondaryNameNode都启动了,但是DataNode却启动不了。
这是因为DataNode与NameNode的clusterID不同导致的该问题。需要将./hadoop/tmp/dfs/name/current/VERSION中NameNode的clusterID复制到./hadoop/tmp/dfs/data/current/VERSION中的clusterID,再次启动,就可以看到DataNode也启动了。
也可以将./hadoop/tmp/dfs中的文件都删除(name、data等)然后hadoop namenode -format
再启动.
ps.这些错误信息是可以在log中看到的,log的位置在./hadoop/tmp/dfs下的.log文件。也可以在远程使用浏览器(使用ip+50070端口号连接)在Utilities-Logs中可以阅读这些log文件。
3.NameNode的位置
需要注意的是,在配置core-site.xml时,
<name>fs.defaultFS</name>
<value>hdfs://yourname:9000</value>
</property>
这里的yourname是阿里云的私网ip,不可以设置成localhost或127.0.0.1.
4.上传或下载的文件为0kb
这有很多原因。
a.最详细云服务器Centos7下搭建Hadoop伪分布式集群(防各种坑)中描述了一种,此处不再赘述.
b.防火墙没有开放.这里的防火墙,不仅仅要开放NameNode节点的防火墙,更需要开放DataNode节点的防火墙.因为客户端在访问NameNode后,NameNode会返回相应的DataNode节点的地址,如果DataNode节点的地址没有开放的话,则客户端无法访问到DataNode节点.
c.本机无法解析DataNode节点的地址.由于NameNode返回的是DataNode节点的私网ip,所以客户端是无法解析该ip的.为了解决这个问题,首先需要在配置hdfs-site.xml的时候,如下设置(参考博客中已经这样配置了)
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
这样的话,NameNode返回给客户端的ip就不是私网ip,而是DataNode节点的主机名.此时,需要在客户端中配置C:\Windows\System32\drivers\etc\hosts中添加一行为:
DataNode公网ip地址 DataNode主机名
配置好了后,重启电脑或命令行里用
ipconfig /displaydns
ipconfig /flushdns
刷新所有dns内容.这样就可以让客户端解析出DataNode的公网ip并访问了.
d.端口没有开放.客户端访问NameNode是通过访问NameNode节点的9000端口,但是在于DataNode进行传输的时候,访问的是DataNode节点的50010端口.如果是在阿里云上,需要设置50010的白名单,否则也将无法上传/下载文件.
其他问题可以通过log或者wireshark抓包自行分析.