4.HDFs之java接口簡單示例

HDFS是文件系統,就可以對其文件進行操作,比如說新建、刪除、讀取文件內容等操作。下面使用JAVA API對HDFS中的文件進行操作的過程。

  對分HDFS中的文件操作主要涉及一下幾個類:

  Configuration類:該類的對象封轉了客戶端或者服務器的配置。

  FileSystem類:該類的對象是一個文件系統對象,可以用該對象的一些方法來對文件進行操作。

                          FileSystem fs = FileSystem.get(conf);通過FileSystem的靜態方法get獲得該對象,此類是抽象類得到的是DistributedFileSystem。

  FSDataInputStream和FSDataOutputStream:這兩個類是HDFS中的輸入輸出流。分別通過FileSystem的open方法和create方法獲得。

簡單示例:

package com.test.hadoop.hdfs;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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;
import org.junit.Before;
import org.junit.Test;

public class HDFSDemo {

	private FileSystem fs = null;

	/**
	 * 首先創建filesystem的實現類,他是一個工具類,僞裝爲root用戶,否則沒有權限
	 */
	@Before
	public void init(){
		try {
			URI uri = new URI("hdfs://hadoop:9000");
			Configuration conf = new Configuration();
			fs = FileSystem.get(uri, conf ,"root");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 文件上傳
	 */
	@Test
	public void testUpload(){
		try {
			//讀取本地文件系統
			InputStream in = new FileInputStream("G://scrt73-x64.exe");
			//上傳到hdfs中的文件位置,名稱
			Path path = new Path("/test.exe");
			//返回輸出流
			OutputStream out = fs.create(path);
			//將輸入拷貝到輸出,
			IOUtils.copyBytes(in, out, 4096, true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 文件下載,不適用輸入輸出流的形式
	 */
	@Test
	public void testDownls(){
		Path src = new Path("/test.exe");
		Path dst = new Path("G://aa.ext");
		try {
			//將hdfs中的src拷貝到本地文件新dst,實現下載
			fs.copyToLocalFile(src, dst);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 刪除文件
	 */
	@Test
	public void delete(){
		Path path = new Path("/jdkjdk");
		try {
			//false,true是否遞歸刪除
			boolean status = fs.delete(path, false);
			System.out.println(status);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 創建文件夾
	 */
	@Test
	public void testMkdir(){
		Path path = new Path("/temp");
		try {
			boolean status = fs.mkdirs(path);
			System.out.println(status);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	
	/**
	 * 文件下載
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		URI uri = new URI("hdfs://hadoop:9000");
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(uri, conf);
		Path path = new Path("/log");//hdfs中
		InputStream in = fs.open(path);
		//linux中--window
		OutputStream out = new FileOutputStream("G://xx.xx");
		IOUtils.copyBytes(in, out, 4096, true);
		
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章