前几天一直在搞HDFS文件的下载与上传,但是在集群内部可以,在集群外部却出现了错误,照说,HDFS的保密协议应该没那么高吧,不解中。
后来才发现自己网上找的代码,却并未理解其中奥妙。
在集群内实现HDFS的读取与上传,可以通过Configure类来取得集群内部信息,从而与HDFS取得联系。
而在Windows下,则是需要才用URL的方式才可以进行操作。下面贴上成功代码一剂,给自己以回忆和教训。
import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; public class URLTest { static { URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public static void main(String[] args) throws MalformedURLException, IOException { InputStream in = null; try { in = new URL("hdfs://192.168.50.28:8020/user/root/jyl/streaminfo").openStream(); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } }