0 前言

搞了大约2天时间终于把Linux下面Java API的使用给弄清楚了。做个笔记方便以后参考。环境如下所示
Hadoop:2.5.1
Linux:Ubuntu kylin
eclipse:luna

1 步骤

首先是要去下载一个eclipse,这里使用的是Luna。名字比较好听,代表月亮消灭你们...
然后发现自带了maven,太棒了!Luna牛掰,毫无疑问创建maven工程,修改pom.xml文件为下面的内容
[html] view plaincopy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>maven</groupId>
  5. <artifactId>maven</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>maven</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>3.8.1</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.apache.hadoop</groupId>
  22. <artifactId>hadoop-minicluster</artifactId>
  23. <version>2.5.1</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.apache.hadoop</groupId>
  27. <artifactId>hadoop-client</artifactId>
  28. <version>2.5.1</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.apache.hadoop</groupId>
  32. <artifactId>hadoop-assemblies</artifactId>
  33. <version>2.5.1</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.apache.hadoop</groupId>
  37. <artifactId>hadoop-maven-plugins</artifactId>
  38. <version>2.5.1</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.apache.hadoop</groupId>
  42. <artifactId>hadoop-common</artifactId>
  43. <version>2.5.1</version>
  44. </dependency>
  45. <dependency>
  46. <groupId>org.apache.hadoop</groupId>
  47. <artifactId>hadoop-hdfs</artifactId>
  48. <version>2.5.1</version>
  49. </dependency>
  50. </dependencies>
  51. </project>

然后等待eclipse maven自动下载依赖的包。等啊等就好了,下一步是配置jvm运行的参数,因为运行的时候需要本地的库所以必须配置下。我的Hadoop是放在/home/hadoop-master/hadoop-2.5.1下的。

[html] view plaincopy
  1. -Djava.library.path=/home/hadoop-master/hadoop-2.5.1/lib/native

因为hadoop2.5.1自己已经编译好了本地库所以不用在编译一次了(这就是用新不用旧的原因,自己编译太费事儿了。。。。到此一切OK

2 测试代码

是驴子是马,拉出来溜溜。写个小程序跑跑。
[java] view plaincopy
  1. package maven.maven;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.InputStreamReader;
  10. import java.io.OutputStreamWriter;
  11. import java.io.Writer;
  12. import java.util.Date;
  13. import org.apache.hadoop.conf.Configuration;
  14. import org.apache.hadoop.fs.BlockLocation;
  15. import org.apache.hadoop.fs.FSDataInputStream;
  16. import org.apache.hadoop.fs.FSDataOutputStream;
  17. import org.apache.hadoop.fs.FileStatus;
  18. import org.apache.hadoop.fs.FileSystem;
  19. import org.apache.hadoop.fs.Path;
  20. import org.apache.hadoop.hdfs.DistributedFileSystem;
  21. import org.apache.hadoop.hdfs.DFSClient.*;
  22. import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
  23. public class HadoopFSOperations {
  24. private static Configuration conf = new Configuration();
  25. private static final String HADOOP_URL="hdfs://192.168.190.129:9000";
  26. private static FileSystem fs;
  27. private static DistributedFileSystem hdfs;
  28. static {
  29. try {
  30. FileSystem.setDefaultUri(conf, HADOOP_URL);
  31. fs = FileSystem.get(conf);
  32. hdfs = (DistributedFileSystem)fs;
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. /**
  38. * 列出所有DataNode的名字信息
  39. */
  40. public void listDataNodeInfo() {
  41. try {
  42. DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
  43. String[] names = new String[dataNodeStats.length];
  44. System.out.println("List of all the datanode in the HDFS cluster:");
  45. for (int i=0;i<names.length;i++) {
  46. names[i] = dataNodeStats[i].getHostName();
  47. System.out.println(names[i]);
  48. }
  49. System.out.println(hdfs.getUri().toString());
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. /**
  55. * 查看文件是否存在
  56. */
  57. public void checkFileExist() {
  58. try {
  59. Path a= hdfs.getHomeDirectory();
  60. System.out.println("main path:"+a.toString());
  61. Path f = new Path("/user/xxx/input01/");
  62. boolean exist = fs.exists(f);
  63. System.out.println("Whether exist of this file:"+exist);
  64. //删除文件
  65. //          if (exist) {
  66. //              boolean isDeleted = hdfs.delete(f, false);
  67. //              if(isDeleted) {
  68. //                  System.out.println("Delete success");
  69. //              }
  70. //          }
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }
  74. }
  75. /**
  76. *创建文件到HDFS系统上
  77. */
  78. public void createFile() {
  79. try {
  80. Path f = new Path("/user/xxx/input02/file01");
  81. System.out.println("Create and Write :"+f.getName()+" to hdfs");
  82. FSDataOutputStream os = fs.create(f, true);
  83. Writer out = new OutputStreamWriter(os, "utf-8");//以UTF-8格式写入文件,不乱码
  84. out.write("你好 good job");
  85. out.close();
  86. os.close();
  87. } catch (Exception e) {
  88. e.printStackTrace();
  89. }
  90. }
  91. /**
  92. * 读取本地文件到HDFS系统<br>
  93. * 请保证文件格式一直是UTF-8,从本地->HDFS
  94. */
  95. public void copyFileToHDFS() {
  96. try {
  97. Path f = new Path("/user/xxx/input02/file01");
  98. File file = new File("E:\\hadoopTest\\temporary.txt");
  99. FileInputStream is = new FileInputStream(file);
  100. InputStreamReader isr = new InputStreamReader(is, "utf-8");
  101. BufferedReader br = new BufferedReader(isr);
  102. FSDataOutputStream os = fs.create(f, true);
  103. Writer out = new OutputStreamWriter(os, "utf-8");
  104. String str = "";
  105. while((str=br.readLine()) != null) {
  106. out.write(str+"\n");
  107. }
  108. br.close();
  109. isr.close();
  110. is.close();
  111. out.close();
  112. os.close();
  113. System.out.println("Write content of file "+file.getName()+" to hdfs file "+f.getName()+" success");
  114. } catch (Exception e) {
  115. e.printStackTrace();
  116. }
  117. }
  118. /**
  119. * 取得文件块所在的位置..
  120. */
  121. public void getLocation() {
  122. try {
  123. Path f = new Path("/user/xxx/input02/file01");
  124. FileStatus fileStatus = fs.getFileStatus(f);
  125. BlockLocation[] blkLocations = fs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
  126. for (BlockLocation currentLocation : blkLocations) {
  127. String[] hosts = currentLocation.getHosts();
  128. for (String host : hosts) {
  129. System.out.println(host);
  130. }
  131. }
  132. //取得最后修改时间
  133. long modifyTime = fileStatus.getModificationTime();
  134. Date d = new Date(modifyTime);
  135. System.out.println(d);
  136. } catch (Exception e) {
  137. e.printStackTrace();
  138. }
  139. }
  140. /**
  141. * 读取hdfs中的文件内容
  142. */
  143. public void readFileFromHdfs() {
  144. try {
  145. Path f = new Path("/user/xxx/input02/file01");
  146. FSDataInputStream dis = fs.open(f);
  147. InputStreamReader isr = new InputStreamReader(dis, "utf-8");
  148. BufferedReader br = new BufferedReader(isr);
  149. String str = "";
  150. while ((str = br.readLine()) !=null) {
  151. System.out.println(str);
  152. }
  153. br.close();
  154. isr.close();
  155. dis.close();
  156. } catch (Exception e) {
  157. e.printStackTrace();
  158. }
  159. }
  160. /**
  161. * list all file/directory
  162. * @param args
  163. * @throws IOException
  164. * @throws IllegalArgumentException
  165. * @throws FileNotFoundException
  166. */
  167. public void listFileStatus(String path) throws FileNotFoundException, IllegalArgumentException, IOException {
  168. FileStatus fileStatus[]=fs.listStatus(new Path(path));
  169. int listlength=fileStatus.length;
  170. for (int i=0 ;i<listlength ;i++){
  171. if (fileStatus[i].isDirectory() == false) {
  172. System.out.println("filename:"
  173. + fileStatus[i].getPath().getName() + "\tsize:"
  174. + fileStatus[i].getLen());
  175. } else {
  176. String newpath = fileStatus[i].getPath().toString();
  177. listFileStatus(newpath);
  178. }
  179. }
  180. }
  181. public static void main(String[] args) {
  182. HadoopFSOperations a = new HadoopFSOperations();
  183. a.listDataNodeInfo();
  184. //      a.checkFileExist();
  185. //      a.createFile();
  186. //      a.copyFileToHDFS();
  187. //      a.getLocation();
  188. //      a.readFileFromHdfs();
  189. try {
  190. a.listFileStatus(HADOOP_URL+"/user");
  191. } catch (FileNotFoundException e) {
  192. // TODO Auto-generated catch block
  193. e.printStackTrace();
  194. } catch (IllegalArgumentException e) {
  195. // TODO Auto-generated catch block
  196. e.printStackTrace();
  197. } catch (IOException e) {
  198. // TODO Auto-generated catch block
  199. e.printStackTrace();
  200. }
  201. }
  202. }

因为我的hadoop是在192.168.190.129上的所以private static final String HADOOP_URL="hdfs://192.168.190.129:9000";,请酌情修改。搞定跑起来,就能看到下面的结果

[html] view plaincopy
  1. List of all the datanode in the HDFS cluster:
  2. hadoopslaver0
  3. hadoopslaver2
  4. hadoopslaver1
  5. hdfs://192.168.190.129:9000
  6. filename:TrustCom2015_CFP.pdf   size:290401
  7. filename:jd.PNG size:16647

可以看到 三个datanode hadoopslaver0,1,2 以及/user下事先放好的文件。小实验成功

3 总结

在Linux下面Java API就可以按照上面的步骤弄起来了。总算是万里之行迈出了第一步。

Linux下Hadoop hdfs Java API使用相关推荐

  1. hadoop hdfs (java api)

    简单介绍使用java控制hdfs文件系统 一.注意namenode端访问权限,修改hdfs-site.xml文件或修改文件目录权限 本次采用修改hdfs-site.xml用于测试,在configura ...

  2. HDFS Java API 操作

    文章目录 HDFS Java API操作 零.启动hadoop 一.HDFS常见类接口与方法 1.hdfs 常见类与接口 2.FileSystem 的常用方法 二.Java 创建Hadoop项目 1. ...

  3. ubuntu linux下解决“no java virtual machine was found after searching the following locations:”的方法

    ubuntu linux下解决"no java virtual machine was found after searching the following locations:" ...

  4. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  5. 离线计算系统之HDFS Java API

    HDFS的java操作:hdfs在生产应用中主要是客户端的开发,其核心步骤是从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件 一.搭建开发 ...

  6. 【hadoop2.6.0】利用Hadoop的 Java API

    Hadoop2.6.0的所有Java API都在 http://hadoop.apache.org/docs/r2.6.0/api/overview-summary.html 里. 下面实现一个利用J ...

  7. 分布式文件系统—HDFS—Java API操作

    原文作者:jiangw-Tony 原文地址:HDFS基础使用 hdfs 在生产应用中主要是客户端的开发,其核心步骤是从 hdfs 提供的 api 中构造一个 HDFS的访问客户端对象,然后通过该客户端 ...

  8. hdfs java api读写

    如果想在win下下载hdfs的文件,需要安装hadoop的win版,因为写入磁盘的程序对linux和win编译结果不同 下载地址是: https://github.com/cdarlint/winut ...

  9. java mapreduce api_Hadoop实战-初级部分 之 Hadoop MapReduce JAVA API

    精品视频课程推荐 Java数据结构和算法精讲版 本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上. 从零开始.全面系统.成体系的讲解数据 ...

最新文章

  1. codeforces #310 div1 C
  2. 数学分析高等代数考研试题荟萃[更新至2017年10月1日]
  3. Drop Down Menu
  4. python中rfind函数_Python rfind()方法
  5. 【LeetCode】0136. 只出现一次的数字
  6. boost::spirit模块实现罗马数字解析器的测试程序
  7. mysql数据表案例_mysql中库和表的简单操作案例
  8. 仿百度文库实现文档在线预览
  9. sqlserver 触发器语法
  10. ERP基础知识100问题,值得收藏
  11. python下载pandas库_Python中的pandas库
  12. Unity Burst 用户指南
  13. 开发在线投票系统过程遇到的问题
  14. 如何给PDF中的内容添加下划线
  15. 大数据变现的九种商业模式
  16. 数字电路的一些基本知识
  17. pr系统兼容性报告不支持视频驱动程序有什么影响?怎么解决?
  18. VHDL硬件描述语言(六)VHDL案例
  19. 图解两部委DSM数据安全管理认证
  20. 使用手机可以在线拍照、翻译图片文字吗?

热门文章

  1. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存
  2. 【设计模式】策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  3. 【商务智能】数据预处理
  4. 【错误记录】Android 应用 release 打包报错处理 ( 关闭语法检查 | 日志处理 | release 配置 )
  5. 【组合数学】排列组合 ( 排列组合示例 )
  6. 2019年六月刷题列表
  7. 没有人比你更在乎你的未来--李开复
  8. windows上安装gcc/g++环境(MinGW,msys64等)
  9. Docker配置mysql互为主从
  10. hdu 1700 (圆的内接三角形 要周长最大)