从hdfs中读取数据到标准输出流,相当与linux下的cat。
import java.io.InputStream;
import java.net.URL;//
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;
public class Urlcat {
static {
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}
public static void main(String[]args){
InputStream in=null;
try {
in=new URL(args[0]).openStream();
IOUtils.copyBytes(in, System.out, 4096,false);
} catch (Exception e) {
e.printStackTrace();
}
finally {
IOUtils.closeStream(in);
}
}
}
设置hadoop-env.xml中的classpath为当前路径 ,也可以在环境变量中设置HADOOP_CLASSPATH,否则会出现找不到或无法加载主类的错误。
使用eclipse的时候在workspace相应的工程文件夹下bin目录下已经生成了相应的类文件,可以直接拿来用,省去命令行编译的步骤,命令行编译的话要添加相应的包,比较麻烦。
hadoop Urlcat hdfs://localhost:9000/output/服务器
可以将本地hdfs文件系统路径为 /output/服务器 的内容读到控制台,这里要指定端口9000,虽然我们在core-site.xml中指定了fs.default.name 指定了默认端口号,但是在命令行中不显式指定端口号的话,会调用core.default.xml的默认端口8020,导致无法连接。