1.编写程序如下:
直接使用FileSystem以标准输出格式显示Hadoop文件系统中的文件。
package com.sun.hadoop.filesystem;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
/**
* 直接使用FileSystem以标准输出格式显示 Hadoop文件系统中的文件
*
* @author root 2014-6-25
*/
public class FileSystemCat {
public static void main(String[] args) throws Exception {
//uri文读取的文件路径
String uri = "hdfs://znb:9000/hello1";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
InputStream in = null;
try {
in = fs.open(new Path(uri));
IOUtils.copyBytes(in, System.out, 4096, false);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
IOUtils.closeStream(in);
}
}
}
2.出现如下结果表明正确
hello you,
hello me
3.如果想两次打印文件内容,则只要在copyBytes下面加一点语句,代码如下:
package com.sun.hadoop.filesystem;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
/**
* 直接使用FileSystem以标准输出格式显示 Hadoop文件系统中的文件
*
* @author root 2014-6-25
*/
public class FileSystemCat {
public static void main(String[] args) throws Exception {
String uri = "hdfs://znb:9000/hello1";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
InputStream in = null;
try {
in = fs.open(new Path(uri));
IOUtils.copyBytes(in, System.out, 4096, false);
((FSDataInputStream) in).seek(0);
IOUtils.copyBytes(in, System.out, 4096, false);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
IOUtils.closeStream(in);
}
}
}
这样就打印了两次文件内容