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());
}
}