HDFS FileSystemの一般的な方法

5154 ワード


  
エンジニアリングに依存するjarパッケージ、hadoop-1.1.2/*jar、hadoop-1.1.2/lib/*.jar
 
Javaプログラム作成URL経由HDFSアクセス
public class HDFSTest {
	public static final String HDFSPATH ="hdfs://centos:9000/hello.txt";
	@Test
	public void testAcceHDFSForURL() throws IOException{
		URL url = new URL(HDFSPATH);
		InputStream inputStream = url.openStream();
		IOUtils.copyBytes(inputStream, System.out, 1024, true);
	}
}
java.net.MalformedURLException: unknown protocol: hdfs

このようにアクセスするだけで、プログラムに異常があり、奇形のURLは、HDFSというプロトコルを解析できないことであり、seturlstreamHandlerFactory()を使用してURLがhdfsプロトコルを認識できるようにする
public class HDFSTest {
	//URL IP , , hosts IPd 
	public static final String HDFSPATH ="hdfs://192.168.56.101:9000/hello.txt";
	@Test
	public void testAcceHDFSForURL() throws IOException{
		URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
		URL url = new URL(HDFSPATH);
		InputStream inputStream = url.openStream();
		/**
			InputStream: 			OutputStream: 			int: 			boolean: 
		**/
		IOUtils.copyBytes(inputStream, System.out, 1024, true);
	}
}

 
HDFSの提供するインタフェースを使ってHDFSにアクセスして、機能は更に強大で、操作類FileSystem
HDFSのすべてのファイル、ディレクトリを削除
[root@centos Downloads]# hadoop fs -rmr hdfs://centos:9000/*
Warning: $HADOOP_HOME is deprecated.
Deleted hdfs://centos:9000/file1
Deleted hdfs://centos:9000/hello.txt
Deleted hdfs://centos:9000/usr

[root@centos Downloads]# hadoop fs -lsr /
Warning: $HADOOP_HOME is deprecated.
[root@centos Downloads]# hadoop fs -lsr /
Warning: $HADOOP_HOME is deprecated.
 
file 1というディレクトリを作成
        public static final String HDFSURIPATH ="hdfs://192.168.56.101:9000/";
	@Test
	public void testFileSystemForUploadFile() throws IOException, URISyntaxException{
		FileSystem fileSystem = getFileSystem();
		fileSystem.mkdirs(new Path("/file1"));
	}

	private FileSystem getFileSystem() throws IOException, URISyntaxException {
		//Configuration 
		FileSystem fileSystem = FileSystem.get(new URI(HDFSURIPATH), new Configuration());
		return fileSystem;
	}

コマンドによるファイルの表示に成功しました
[root@centos Downloads]# hadoop fs -lsr /
Warning: $HADOOP_HOME is deprecated.
drwxr-xr-x   - Administrator supergroup          0 2015-05-22 03:49 /file1

 
ディレクトリの削除
	@Test
	public void testFileSystemForDelete() throws IOException, URISyntaxException{
		FileSystem fileSystem = getFileSystem();
		fileSystem.delete(new Path("/file1"),true);
	}

コマンド表示
[root@centos Downloads]# hadoop fs -lsr /
Warning: $HADOOP_HOME is deprecated.

 
ファイルのアップロード
	@Test
	public void testFileSystemForCreate() throws IOException, URISyntaxException{
		// file1 
		testFileSystemForMkdir();
		// 
		FSDataOutputStream fsOutputStream = getFileSystem().create(new Path("/file1/hello.txt"));
		// 
		FileInputStream fInputStrea = new FileInputStream("E:/Linux/Linux.txt");
		// E:/Linux/Linux.txt hdfs /file/hello.txt 
		IOUtils.copyBytes(fInputStrea, fsOutputStream, 1024, true);
	}

別のファイルをアップロードする方法
FileSystem fs = HDFSUtils.getFileSystem();
Path s = new Path("E:/Linux/201207141451233056.png");
Path d = new Path("/file1/");
fs.copyFromLocalFile(s, d); 

コマンド表示
[root@centos Downloads]# hadoop fs -lsr /
Warning: $HADOOP_HOME is deprecated.
drwxr-xr-x   - Administrator supergroup          0 2015-05-22 04:14 /file1
-rw-r--r--   3 Administrator supergroup       4617 2015-05-22 04:14 /file1/hello.txt

 
ファイルを読み込むと、中国語の内容が文字化けします
	@Test
	public void testFileSystemForOpen() throws IOException, URISyntaxException{
		 FSDataInputStream fsInputStream = getFileSystem().open(new Path("/file1/hello.txt"));
		IOUtils.copyBytes(fsInputStream, System.out, 1024, true);
	}

 
ディレクトリおよびファイルの表示
	@Test
	public void testFileSystemForListStatus() throws IOException, URISyntaxException{
		 FileStatus[] listStatus = getFileSystem().listStatus(new Path("/file1"));
		for (FileStatus fs : listStatus) {
			System.out.println(fs.getLen());
			System.out.println(fs.isDir());
			System.out.println(fs.getPath());
			System.out.println(fs.getPermission());
			System.out.println(fs.getReplication());
		}
	}