操作步骤
- IDEA + MAVEN 创建JAVA工程
本地安装maven,IDEA配置maven并创建相应的maven项目
- 添加HDFS相关依赖
复制代码
1
2
3
4<properties> <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>//指定hadoop版本 </properties>
复制代码
1
2
3
4
5
6
7<repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>//指定仓库地址 </repository> </repositories>
复制代码
1
2
3
4
5
6<dependency> <groupId>org.apache.hadoop</groupId> //添加hadoop依赖 <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> </dependency>
- 开发Java api 操作HDFS文件
准备工作
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25import 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; import org.apache.hadoop.io.IOUtils; public static final String HDFS_PATH = "hdfs://192.168.247.100:9000"; //hdfs路径 FileSystem fileSystem = null; //操作Hdfs核心类 Configuration configuration = null; //配置类 @Before public void setUp() throws Exception{ System.out.println("set up"); configuration = new Configuration(); fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration); //如用户无权限,可加用户参数 } @After public void tearDown() throws Exception { configuration = null; fileSystem = null; System.out.print("tearDowm"); }
创建HDFS文件目录
复制代码
1
2
3
4
5@Test public void mkdir() throws Exception{ fileSystem.mkdirs(new Path("/hdfsapi/test")); }
创建HDFS文件
复制代码
1
2
3
4
5
6
7
8@Test public void create() throws Exception{ FSDataOutputStream outputStream = fileSystem.create(new Path("/hdfsapi/test/test.txt")); outputStream.write("Hello World".getBytes()); outputStream.flush(); outputStream.close(); }
查看HDFS文件内容
复制代码
1
2
3
4
5
6
7@Test public void cat() throws Exception{ FSDataInputStream inputStream = fileSystem.open(new Path("/hdfsapi/test/test.txt")); IOUtils.copyBytes(inputStream, System.out, 1024); inputStream.close(); }
文件重命名
复制代码
1
2
3
4
5@Test public void rename() throws Exception{ fileSystem.rename(new Path("/hdfsapi/test/test.txt"), new Path("/hdfsapi/test/test1.txt")); }
上传本地文件
复制代码
1
2
3
4
5@Test public void copyFromLocalFile() throws Exception{ fileSystem.copyFromLocalFile(new Path("E://U盘/test.sql"), new Path("/hdfsapi/test/")); //Windows系统和Linux系统都可以,写法不一样 }
上传本地大文件带进度条
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20@Test public void copyFromLocalFileWithProgress() throws Exception{ InputStream is = new BufferedInputStream( new FileInputStream( new File("E://game.tgz") ) ); FSDataOutputStream outputStream = fileSystem.create( new Path("/hdfsapi/test/zookeeper.tar.gz"), new Progressable() { @Override public void progress() { System.out.print("."); //自定义进度条显示 } } ); IOUtils.copyBytes(is,outputStream,4096); } }
下载HDFS文件
复制代码
1
2
3
4
5
6
7@Test public void copyToLocalFile() throws Exception{ fileSystem.copyToLocalFile(false, new Path("/hdfsapi/test/test.txt"), new Path("F://test.txt"), true); //public void copyToLocalFile(boolean delSrc, Path src, Path dst, boolean useRawLocalFileSystem) //使用java io流 而不使用本地文件系统,windows会报空指针异常 }
查看HDFS目录
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18@Test public void listFiles() throws Exception{ FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/hdfsapi/test")); Arrays.stream(fileStatuses).forEach(fileStatus -> { String isDir = fileStatus.isDirectory()? "文件夹" : "文件"; Short replication = fileStatus.getReplication(); //副本系数 /** *如果采用HDFS Shell put的方式上传文件,采用服务器设置的默认副本系数 *如果采用java api 方式上传文件,本地没有设置副本系数,默认采用hadoop默认副本系数3 **/ Long blockSize = fileStatus.getBlockSize(); Long len = fileStatus.getLen(); String path = fileStatus.getPath().toString(); System.out.println(isDir+"t"+replication+"t"+blockSize+"t"+len+"t"+path); }); }
删除
复制代码
1
2
3
4
5@Test public void delete() throws Exception{ fileSystem.delete(new Path("/hdfsapi/test/zookeeper.tar.gz"),true);//是否递归删除 }
最后
以上就是单身大碗最近收集整理的关于java操作HDFS的全部内容,更多相关java操作HDFS内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复