/*
*
* 将本地文件或者HDFS上的某个文件内容写入到新的文件中
* 新的文件是HDFS上创建的
*
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.ByteBuffer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class Operate {
/**
* 读取当地的文件内容,并在DFS上面新建一个文件,把读取的内容写到这个上面来
* @param NewHdfsFileName
* @param localSrc
* @throws Exception
*/
public static void localFileToNewHdfsFile(String NewHdfsFileName,String localSrc) throws Exception{
//创建hadoop配置
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://nameserver:9000/");
//创建文件系统
FileSystem fs = FileSystem.get(conf);
Path path = new Path("hdfs://nameserver:9000/oldFile/"+NewHdfsFileName);
FSDataOutputStream fsos = fs.create(path);
BufferedReader bReader = new BufferedReader(new FileReader(new File(localSrc)));
String lineStr;
int lineNum = 1;
while((lineStr = bReader.readLine()) != null){
System.out.println("第"+lineNum+"的内容是:"+lineStr);
// String string = lineStr+"\n";
fsos.write(lineStr.getBytes("utf-8"));
fsos.writeChars("\n");
lineNum++;
}
}
/**
* 读取DFS上面的一个文件的内容,并新建一个文件,吧读取到的内容写到这个新建的文件上面
* @param NewHdfsFileName
* @param OldHdfsFileName
* @throws IOException
*/
public static void HdfsfileToNewHdfsfile(String NewHdfsFileName,String OldHdfsFileName) throws IOException{
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://nameserver:9000/");
FileSystem fs = FileSystem.get(conf);
Path newPath = new Path("hdfs://nameserver:9000/newFile/"+NewHdfsFileName);
Path oldPath = new Path("hdfs://nameserver:9000/oldFile/"+OldHdfsFileName);
FSDataOutputStream fsos = fs.create(newPath);
FSDataInputStream fsis = fs.open(oldPath);
int num = fsis.available()/1024 + 1;
byte[] bytes = new byte[1024];
int lineNum = 1;
while((fsis.read(bytes)) != -1){
System.out.println(new String(bytes));
fsos.write(bytes);
lineNum++;
if(num == lineNum){
bytes = new byte[fsis.available()];
}else{
bytes = new byte[1024];
}
}
}
/**
* main函数测试
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
localFileToNewHdfsFile("laoyang", "D:\\1.txt");
// HdfsfileToNewHdfsfile("laoyang","laoyang");
}
}