/*
*
* 將本地文件或者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");
}
}
Hadoop的HDFS Java pai 讀寫操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.