首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

HDFS文件系统JAVA api访问接口(基于hadoop大数据平台)

  • 25-03-07 20:01
  • 3989
  • 10817
blog.csdn.net

        在搭建完hadoop大数据系统(我是使用CDH5.16.1进行安装)后,如何访问hdfs文件系统上的数据呢?那当然是通过构建maven项目 使用java api接口进行文件了。为此,特别进行了hdfs文件系统java api访问的整理。下面就附录上我的CDH5.16.1平台上安装的各组件版本说明。说明:如果需要CDH5.16.1安装教程的,可以给我留言哦~

  1. jdk 版本:1.8.0_211
  2. hadoop 版本:2.6.0
  3. hive 版本:1.1.0
  4. impala 版本:2.12.0
  5. hbase 版本:1.2.0
  6. spark 版本:2.4.0
  7. oozie 版本:4.1.0
  8. hue 版本:3.9.0
  9. zk 版本:3.4.5
  10. kafka 版本:2.1.0

     下面将通过java api进行hdfs的访问,我是通过maven project方式创建的项目,因为这样便于管理。

项目代码原文件链接下载地址:HDFS文件系统JAVA api访问接口(基于hadoop大数据平台)

附上核心代码:

  1. package com.hadoop.hdfs;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.net.URI;
  6. import java.net.URISyntaxException;
  7. import org.apache.commons.lang.StringUtils;
  8. import org.apache.hadoop.conf.Configuration;
  9. import org.apache.hadoop.fs.BlockLocation;
  10. import org.apache.hadoop.fs.FSDataInputStream;
  11. import org.apache.hadoop.fs.FSDataOutputStream;
  12. import org.apache.hadoop.fs.FileStatus;
  13. import org.apache.hadoop.fs.FileSystem;
  14. import org.apache.hadoop.fs.Path;
  15. import org.apache.hadoop.io.IOUtils;
  16. public class HdfsApi {
  17. private static String HDFS_URL = "hdfs://node-01:8020";
  18. private static FileSystem fs = null;
  19. // 获取FS
  20. public static FileSystem getFs() throws IOException {
  21. if (fs != null) {
  22. return fs;
  23. }
  24. // 获取配置文件
  25. Configuration conf = new Configuration();
  26. if (StringUtils.isBlank(HDFS_URL)) {
  27. // 返回默认文件系统 如果在 Hadoop集群下运行,使用此种方法可直接获取默认文件系统
  28. try {
  29. fs = FileSystem.get(conf);
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. } else {
  34. // 返回指定的文件系统,如果在本地测试,需要使用此种方法获取文件系统
  35. try {
  36. URI uri = new URI(HDFS_URL.trim());
  37. fs = FileSystem.get(uri, conf);
  38. } catch (URISyntaxException | IOException e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. return fs;
  43. }
  44. // 关闭hdfs文件系统
  45. public static void closeFs() throws IOException {
  46. if (fs != null) {
  47. fs.close();
  48. }
  49. }
  50. // 判断hdfs文件系统,文件是否存在
  51. public static boolean fileExists(String dirName) throws IOException {
  52. // 获取 FileSystem
  53. FileSystem fs = getFs();
  54. return fs.exists(new Path(dirName));
  55. }
  56. // 读取hdfs文件信息,并打印在控制台
  57. public static void readFile(String src) throws IOException {
  58. // 获取 FileSystem
  59. FileSystem fs = getFs();
  60. // 读的路径
  61. Path readPath = new Path(src);
  62. FSDataInputStream inStream = null;
  63. try {
  64. // 打开输入流
  65. inStream = fs.open(readPath);
  66. IOUtils.copyBytes(inStream, System.out, 4096, false);
  67. } catch (Exception e) {
  68. e.printStackTrace();
  69. } finally {
  70. IOUtils.closeStream(inStream);
  71. }
  72. }
  73. // 上传文件至hdfs文件系统中
  74. public static void copyFileToHDFS(String src, String dst)
  75. throws IOException {
  76. // 获取filesystem
  77. FileSystem fs = getFs();
  78. // 本地路径
  79. File inFile = new File(src);
  80. // 目标路径
  81. Path outFile = new Path(dst);
  82. FileInputStream inStream = null;
  83. FSDataOutputStream outStream = null;
  84. try {
  85. // 打开输入流
  86. inStream = new FileInputStream(inFile);
  87. // 打开输出流
  88. outStream = fs.create(outFile);
  89. IOUtils.copyBytes(inStream, outStream, 4096, false);
  90. } catch (Exception e) {
  91. // TODO: handle exception
  92. } finally {
  93. IOUtils.closeStream(inStream);
  94. IOUtils.closeStream(outStream);
  95. }
  96. }
  97. // 从hdfs文件系统中下载文件
  98. public static void downLoadFromHDFS(String src, String dst)
  99. throws IOException {
  100. FileSystem fs = getFs();
  101. // 设置下载地址和目标地址
  102. fs.copyToLocalFile(false, new Path(src), new Path(dst), true);
  103. }
  104. // 对hdfs文件系统中的文件,进行重命名和移动
  105. public static void renameMV(String src, String dst) throws IOException {
  106. FileSystem fs = getFs();
  107. fs.rename(new Path(src), new Path(dst));
  108. }
  109. // 对hdfs文件系统中的文件,进行删除
  110. public static void delete(String fileName) throws IOException {
  111. FileSystem fs = getFs();
  112. fs.deleteOnExit(new Path(fileName));
  113. }
  114. // 对hdfs文件系统中的文件,获取文件列表
  115. public static FileStatus[] listFile(String dirName) throws IOException {
  116. FileSystem fs = getFs();
  117. FileStatus[] fileStatuses = fs.listStatus(new Path(dirName));
  118. // for (FileStatus fileName : fileStatuses) {
  119. // System.out.println(fileName.getPath().getName());
  120. // }
  121. return fileStatuses;
  122. }
  123. /**
  124. * 查找某个文件在 HDFS集群的位置
  125. *
  126. * @param filePath
  127. * @return BlockLocation[]
  128. */
  129. public static BlockLocation[] getFileBlockLocations(String filePath) {
  130. // 文件路径
  131. Path path = new Path(filePath);
  132. // 文件块位置列表
  133. BlockLocation[] blkLocations = new BlockLocation[0];
  134. try {
  135. // 返回FileSystem对象
  136. FileSystem fs = getFs();
  137. // 获取文件目录
  138. FileStatus filestatus = fs.getFileStatus(path);
  139. // 获取文件块位置列表
  140. blkLocations = fs.getFileBlockLocations(filestatus, 0,
  141. filestatus.getLen());
  142. } catch (IOException e) {
  143. e.printStackTrace();
  144. }
  145. return blkLocations;
  146. }
  147. // 对hdfs文件系统中的文件,创建目录
  148. public static void mkdir(String dirName) throws IOException {
  149. FileSystem fs = getFs();
  150. if (fs.exists(new Path(dirName))) {
  151. System.out.println("Directory already exists!");
  152. fs.close();
  153. return;
  154. }
  155. fs.mkdirs(new Path(dirName));
  156. }
  157. // 对hdfs文件系统中的文件,删除目录
  158. public static void deletedir(String dirName, boolean recursive)
  159. throws IOException {
  160. FileSystem fs = getFs();
  161. // true表示递归删除目录下所有文件
  162. // false就只能删除空目录
  163. fs.delete(new Path(dirName), recursive);
  164. }
  165. public static void main(String[] args) throws IOException {
  166. HdfsApi.getFs();
  167. // boolean fileExist = fileExists("/user/root/spark.txt");
  168. // System.out.println(fileExist);
  169. //
  170. // readFile("/user/root/spark.txt");
  171. // copyFileToHDFS();
  172. // copyFileToHDFS("d://test.jpg", "/user/root/up_test.jpg");
  173. // downLoadFromHDFS("/user/root/up_test.jpg", "d://down_test.jpg");
  174. // renameMV("/user/root/up_test.jpg", "/user/root/up_test_rename.jpg");
  175. // delete("/user/root/up_test_rename.jpg");
  176. listFile("/user/root/");
  177. // BlockLocation[] blockBlockLocations =
  178. // getFileBlockLocations("/user/root/spark.txt");
  179. // for (BlockLocation block: blockBlockLocations){
  180. // System.out.println(block.toString());
  181. // }
  182. // mkdir("/user/root/mkdir_Test");
  183. // deletedir("/user/root/mkdir_Test", true);
  184. HdfsApi.closeFs();
  185. }
  186. }

文章最后,给大家推荐一些受欢迎的技术博客链接:

  1. JAVA相关的深度技术博客链接
  2. Flinak 相关技术博客链接
  3. Spark 核心技术链接
  4. 设计模式 —— 深度技术博客链接
  5. 机器学习 —— 深度技术博客链接
  6. Hadoop相关技术博客链接
  7. 超全干货--Flink思维导图,花了3周左右编写、校对
  8. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  9. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  10. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
  11. 深入聊聊Java 垃圾回收机制【附原理图及调优方法】

欢迎扫描下方的二维码或 搜索 公众号“大数据高级架构师”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

注:本文转载自blog.csdn.net的不埋雷的探长的文章"https://blog.csdn.net/weixin_32265569/article/details/91473453"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top