HDFS JAVA API
API预运用是,我们先创建java类,然后将java了打成jar包,然后在终端运行命令即可完成相应的操作
首先简单介绍下java类打包步骤:
选中java类,右键单击,选择Export(导出)à选择JavaàJAR fileàNext
点击Browseà选择打成的包的存储位置ànextà点击Browse(选择类的入口方法)à最后点击Finish即可完成打包
1, 在HDFS中创建文件系统::
Java类代码:
package xja.com;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HdfsApiTest {
public static void main(String[] args) throws Exception {
if(args.length<1){
System.out.println("Usage:HdfsApiTest <input>...");
System.exit(0);
}
Path path = new Path(args[0]);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
fs.mkdirs(path);
}
}
将java类打包成HdfsApiTest.jar包;
在终端中运行:
a,找到打的包的目录:(路径不唯一,我的是/home/cloudera/)
命令:[root@quickstart ~]# cd /home/cloudera/
b, 查看hdfs的文件系统:
命令:[root@quickstart ~]# hadoop fs -ls /
c, 运行jar包文件:
命令:[root@quickstart cloudera]# hadoop jar HdfsApiTest.jar /HdfsApiTest
2, 在HDFS中删除文件或文件系统
Java类代码:
package xja.com;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class DelHdfaApiTest {
public static void main(String[] args) throws Exception {
if(args.length<1){
System.out.println("Usage:HdfsApiTest <input>...");
System.exit(0);
}
Path path = new Path(args[0]);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
fs.deleteOnExit(path);
fs.close();
}
}
将java类打包成DelHdfaApiTest.jar包;
在终端中运行:
a, 查看hdfs的文件系统:
命令:[root@quickstart ~]# hadoop fs -ls /
c, 运行jar包文件:
命令:[
root@quickstart cloudera]# hadoop jar DelHdfaApiTest.jar /HdfsApiTest
[root@quickstart cloudera]# hadoop fs -ls /
3, 将本地文件上传到HDFS文件系统中:
Java类代码:
package xja.com;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileHdfsApiTest {
public static void main(String[] args) throws Exception {
if(args.length<2){
System.out.println("Usage:HdfsApiTest <input>...");
System.exit(0);
}
Path pathIn = new Path(args[0]);
Path pathOut = new Path(args[1]);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(pathIn, pathOut);
}
}
将java类打包成FileHdfsApiTest.jar包;
在终端中运行:
a, 查看hdfs的文件系统:
命令:[root@quickstart ~]# hadoop fs -ls /
(我们将文件上传到HdfsApiTest文件系统上)
b,创建一个文件:wang.txt文件:
命令:[root@quickstart cloudera]# gedit wang.txt
文件内容:(内容自己定义即可,只用于测试)
Hello world!!!!
name = Xiaokang Wang;
c, 运行jar包文件:
命令:
[root@quickstart cloudera]# hadoop jar FileHdfsApiTest.jar wang.txt /HdfsApiTest
[root@quickstart cloudera]# hadoop fs -ls /
4, 将HDFS文件系统中的文件下载到本地虚拟机中:
Java类代码:
package xja.com;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileLocalHdfsApiTest {
public static void main(String[] args) throws Exception {
if(args.length<2){
System.out.println("Usage:HdfsApiTest <input>...");
System.exit(0);
}
Path pathIn = new Path(args[0]);
Path pathOut = new Path(args[1]);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
fs.copyToLocalFile(pathIn, pathOut);
}
}
将java类打包成FileLocalHdfsApiTest.jar包;
在终端中运行:
a, 查看hdfs的文件系统:
命令:[root@quickstart /]# hadoop fs -ls /HdfsApiTest
c, 运行jar包文件:(将/HdfsApiTest/wang.txt下载到本地目录/home/cloudera/wang)
命令:[root@quickstart cloudera]# hadoop jar FileLocalHdfsApiTest.jar /HdfsApiTest/wang.txt /home/cloudera/wang
下载完成我们可以在本地/home/cloudera/wang目录下看到多了一个wang.txt文件
5, 读取HDFS文件系统中的文件数据:
Java类代码:
package xja.com;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class ReadFileHdfsApiTest {
public static void main(String[] args) throws Exception {
if(args.length<1){
System.out.println("Usage:HdfsApiTest <input>...");
System.exit(0);
}
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FSDataInputStream fsin = fs.open(new Path(args[0]));
byte[] buff = new byte[128];
//long ln = 0;
int length = 0;
while((length = fsin.read(buff,0,128)) !=-1){
System.out.println(new String(buff,0,length-1));
System.out.println(fsin.getPos());
}
}
}
将java类打包成ReadFileHdfsApiTest.jarr包;
在终端中运行:
a, 查看hdfs的文件系统有什么文件:
命令:[root@quickstart /]# hadoop fs -ls /HdfsApiTest
b, 运行jar包文件:(将/HdfsApiTest/wang.txt文件读取出来)
命令:[root@quickstart cloudera]# hadoop jar ReadFileHdfsApiTest.jar /HdfsApiTest/wang.txt