[本文为草稿,代码中很多地方都还没有仔细研究,等明天会补上更多的注释]
这节课的关键就在于课程中提供的3段代码,要会用,会读,更要会改。
hadoop fs -[command] 执行HDFS命令
FilesySystemCat.java 代码分析:
//这段程序用于读取hdfs上的text文件,并把文件中的内容输出到终端上
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
public class FileSystemCat {
public static void main(String[] args) throws Exception {
String uri = args[0]; //uri 文件路径
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); //open后的操作:取字符流输出到System.out
} finally {
IOUtils.closeStream(in);
}
}
}
localFile2HDFS 代码分析:
//这段代码用于读入一个本地的TXT文件并将其第101-120字节的内容写入HDFS成为一个新文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
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;
import org.apache.hadoop.util.Progressable;
public class LocalFile2Hdfs {
public static void main(String[] args) throws Exception {
// 获取读取源文件和目标文件位置参数
String local = args[0];
String uri = args[1];
FileInputStream in = null;
OutputStream out = null;
Configuration conf = new Configuration();
try {
// 获取读入文件数据
in = new FileInputStream(new File(local));
// 获取目标文件信息
FileSystem fs = FileSystem.get(URI.create(uri), conf);
out = fs.create(new Path(uri), new Progressable() {
@Override
public void progress() {
System.out.println("*");
}
});
// 跳过前100个字符
in.skip(100);
byte[] buffer = new byte[20];
// 从101的位置读取20个字符到buffer中
int bytesRead = in.read(buffer);
if (bytesRead >= 0) {
out.write(buffer, 0, bytesRead);
}
} finally {
IOUtils.closeStream(in);
IOUtils.closeStream(out);
}
}
}
HDFS2LocalFile 代码分析:
//这段代码用于读入一个在hdfs上的txt文件,并将其第101-120字节的内容写入本地文件系统成为一个新文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
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;
public class Hdfs2LocalFile {
public static void main(String[] args) throws Exception {
String uri = args[0];
String local = args[1];
FSDataInputStream in = null;
OutputStream out = null;
Configuration conf = new Configuration();
try {
FileSystem fs = FileSystem.get(URI.create(uri), conf);
in = fs.open(new Path(uri));
out = new FileOutputStream(local);
byte[] buffer = new byte[20];
in.skip(100);
int bytesRead = in.read(buffer);
if (bytesRead >= 0) {
out.write(buffer, 0, bytesRead);
}
} finally {
IOUtils.closeStream(in);
IOUtils.closeStream(out);
}
}
}
网友评论