Hadoop基础-HDFS的API实现增删改查

                   Hadoop基础-HDFS的API实现增删改查

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.将模块添加maven框架支持

1>.点击"Add Frameworks Support"

 

2>.添加Maven框架的支持

 

3>.在pom.xml中添加以下依赖关系

 

4>.启用自动导入

 

5>.等待下载完成

 

6>.手动刷新Maven项目

 

 

二.将Linux服务器端的HDFS文件到项目中的resources目录

1>.查看服务端配置文件

 [yinzhengjie@s101 ~]$ more /soft/hadoop/etc/hadoop/core-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://s101:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/yinzhengjie/hadoop</value>
</property>
</configuration>

<!--

core-site.xml配置文件的作用:
用于定义系统级别的参数,如HDFS URL、Hadoop的临时
目录以及用于rack-aware集群中的配置文件的配置等,此中的参
数定义会覆盖core-default.xml文件中的默认配置。

fs.defaultFS 参数的作用:
#声明namenode的地址,相当于声明hdfs文件系统。

hadoop.tmp.dir 参数的作用:
#声明hadoop工作目录的地址。

-->
[yinzhengjie@s101 ~]$ sz /soft/hadoop/etc/hadoop/core-site.xml 
rz
zmodem trl+C ȡ

100% 850 bytes 85 bytes/s 00:00:10 0 Errors

[yinzhengjie@s101 ~]$ 

2>.将下载的文件拷贝到项目中resources目录下

 

3>.查看下载的core-site.xml 文件内容

三.编写代码

  1 /*
  2 @author :yinzhengjie
  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
  4 EMAIL:[email protected]
  5 */
  6 package cn.org.yinzhengjie.day01.note1;
  7 
  8 import org.apache.hadoop.conf.Configuration;
  9 import org.apache.hadoop.fs.FSDataInputStream;
 10 import org.apache.hadoop.fs.FSDataOutputStream;
 11 import org.apache.hadoop.fs.FileSystem;
 12 import org.apache.hadoop.fs.Path;
 13 import java.io.IOException;
 14 
 15 public class HdfsDemo {
 16     public static void main(String[] args) throws IOException {
 17         insert();
 18         update();
 19         read();
 20         delete();
 21     }
 22 
 23     //删除文件
 24     private static void delete() throws IOException {
 25         //由于我的Hadoop完全分布式根目录对yinzhengjie以外的用户(尽管是root用户也没有写入权限哟!因为是hdfs系统,并非Linux系统!)没有写入
 26         // 权限,所以需要手动指定当前用户权限。使用“HADOOP_USER_NAME”属性就可以轻松搞定!
 27         System.setProperty("HADOOP_USER_NAME","yinzhengjie");
 28         //实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
 29         Configuration conf = new Configuration();
 30         //代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
 31         FileSystem fs = FileSystem.get(conf);
 32         //这个path是指是需要在文件系统中写入的数据,里面的字符串可以写出“hdfs://s101:8020/yinzhengjie.sql”,但由于core-site.xml配置
 33         // 文件中已经有“hdfs://s101:8020”字样的前缀,因此我们这里可以直接写文件名称
 34         Path path = new Path("/yinzhengjie.sql");
 35         //通过fs的delete方法可以删除文件,第一个参数指的是删除文件对象,第二参数是指递归删除,一般用作删除目录
 36         boolean res = fs.delete(path, true);
 37         if (res == true){
 38             System.out.println("====================");
 39             System.out.println(path + "文件删除成功!");
 40             System.out.println("====================");
 41         }
 42         //释放资源
 43         fs.close();
 44     }
 45 
 46     //将数据追加到文件内容中
 47     private static void update() throws IOException {
 48         //由于我的Hadoop完全分布式根目录对yinzhengjie以外的用户(尽管是root用户也没有写入权限哟!因为是hdfs系统,并非Linux系统!)没有写入
 49         // 权限,所以需要手动指定当前用户权限。使用“HADOOP_USER_NAME”属性就可以轻松搞定!
 50         System.setProperty("HADOOP_USER_NAME","yinzhengjie");
 51 
 52         //实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
 53         Configuration conf = new Configuration();
 54         //代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
 55         FileSystem fs = FileSystem.get(conf);
 56         //这个path是指是需要在文件系统中写入的数据,里面的字符串可以写出“hdfs://s101:8020/yinzhengjie.sql”,但由于core-site.xml配置
 57         // 文件中已经有“hdfs://s101:8020”字样的前缀,因此我们这里可以直接写文件名称
 58         Path path = new Path("/yinzhengjie.sql");
 59         //通过fs的append方法实现对文件的追加操作
 60         FSDataOutputStream fos = fs.append(path);
 61         //通过fos写入数据
 62         fos.write("\nyinzhengjie".getBytes());
 63         //释放资源
 64         fos.close();
 65         fs.close();
 66 
 67     }
 68 
 69     //将数据写入HDFS文件系统
 70     private static void insert() throws IOException {
 71        //由于我的Hadoop完全分布式根目录对yinzhengjie以外的用户(尽管是root用户也没有写入权限哟!因为是hdfs系统,并非Linux系统!)没有写入
 72         // 权限,所以需要手动指定当前用户权限。使用“HADOOP_USER_NAME”属性就可以轻松搞定!
 73         System.setProperty("HADOOP_USER_NAME","yinzhengjie");
 74 
 75         //实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
 76         Configuration conf = new Configuration();
 77         //代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
 78         FileSystem fs = FileSystem.get(conf);
 79         //这个path是指是需要在文件系统中写入的数据,里面的字符串可以写出“hdfs://s101:8020/yinzhengjie.sql”,但由于core-site.xml配置
 80         // 文件中已经有“hdfs://s101:8020”字样的前缀,因此我们这里可以直接写文件名称
 81         Path path = new Path("/yinzhengjie.sql");
 82         //通过fs的create方法创建一个文件输出对象,第一个参数是hdfs的系统路径,第二个参数是判断第一个参数(也就是文件系统的路径)是否存在,如果存在就覆盖!
 83         FSDataOutputStream fos = fs.create(path,true);
 84         //通过fos写入数据
 85         fos.writeUTF("尹正杰");
 86         //释放资源
 87         fos.close();
 88         fs.close();
 89     }
 90 
 91     //在HDFS文件系统中读取数据
 92     private static void read() throws IOException {
 93         //实例化一个Configuration,它会自动去加载本地的core-site.xml配置文件的fs.defaultFS属性。(该文件放在项目的resources目录即可。)
 94         Configuration conf = new Configuration();
 95         //代码的入口点,初始化HDFS文件系统,此时我们需要把读取到的fs.defaultFS属性传给fs对象。
 96         FileSystem fs = FileSystem.get(conf);
 97         //这个path是指NameNode中的HDFS分布式系统中的路径映射(注意,我这里写的是主机名,你可以写IP,如果是测试环境的话需要在hosts文件中添加主机名映射哟!)
 98         Path path = new Path("hdfs://s101:8020/yinzhengjie.sql");
 99         //通过fs读取数据
100         FSDataInputStream fis = fs.open(path);
101         int len = 0;
102         byte[] buf = new byte[4096];
103         while ((len = fis.read(buf)) != -1){
104             System.out.println(new String(buf, 0, len));
105         }
106     }
107 }
108 
109 
110 /*
111 以上代码执行结果如下:
112      尹正杰
113 yinzhengjie
114 ====================
115 /yinzhengjie.sql文件删除成功!
116 ====================
117  */

猜你喜欢

转载自www.cnblogs.com/yinzhengjie/p/9093850.html