记录:
用java通过api读取hdfs上面的文件是,出现了
Failed to connect to /xxx.xxx.xxx:50010 for block, add to deadNodes and continue
这是由于本地测试和服务器不在一个局域网,安装的hadoop配置文件是以内网ip作为机器间通信的ip.在这种情况下,我们能够访问到namenode机器,namenode会给我们数据所在机器的ip地址供我们访问数据传输服务,但是返回的的是datanode内网的ip,我们无法根据该IP访问datanode服务器.
让namenode返回给我们datanode的域名,在开发机器的hosts文件中配置datanode对应的外网ip和域名,并且在与hdfs交互的程序中添加如下代码即可
Configuration conf = new Configuration(); //设置通过域名访问datanode conf.set("dfs.client.use.datanode.hostname", "true");
详情可见:这里