HDFS的API操作

时间:2021-07-07 01:02:28

1:在Windows下配置Hadoop的运行环境

    第一步:将hadoop2.7.5文件夹拷贝到一个没有中文没有空格的路径下面

    第二步:在windows上面配置hadoop的环境变量: HADOOP_HOME,并将%HADOOP_HOME%\bin添加到path中

    第三步:把hadoop2.7.5文件夹中bin目录下的hadoop.dll文件放到系统盘:C:\Windows\System32 目录

    第四步:关闭windows重启

 

2:获取FileSystem的方式

    @Test

    public void getFileSystem2() throws Exception{

        FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"),

        new Configuration()); //new Configuration()该对象会自动读取haoop的xml配置文件

        System.out.println("fileSystem:"+fileSystem);

    }

 

3:HDFS的API操作

    /*

      创建文件夹和文件

    */

    @Test

    public void mkdirs() throws Exception{

        FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"),new Configuration());

        //boolean mkdirs = fileSystem.mkdirs(new Path("/hello/mydir/test")); //递归创建文件夹

         /*

           1:如果父目录不存在,则会自动创建

           2:创建文件时,文件所属用户是你windows下的用户

         */

        boolean mkdirs = fileSystem.create(new Path("/hello/mydir/test"));

        fileSystem.close();

    }

 

4:HDFS文件流的获取

    //获取hdfs文件的输入流--->读取hdfs文件--->下载

    FSDataInputStream inputStream = fileSystem.open(new Path("/a.txt"));

    //获取hdfs文件的输出流--->向hdfs文件写数据

    FSDataOutputStream outputStream = fileSystem.create(new Path("/a.txt"));

 

 

    //文件上传:

    fileSystem.copyFromLocalFile(new Path("D://set.xml"), new Path("http://www.mamicode.com/"));

    //文件下载:

    fileSystem.copyToLocalFile(new Path("/a.txt"), new Path("D://a4.txt"));

 

5:HDFS的权限问题

  1:如果要让hdfs的权限生效,则需要修改hdfs-site.xml文件,修改如下:

    <property>

            <name>dfs.permissions</name>

            <value>true</value>

    </property>

  2:伪造用户:以某一个用户的身份去访问     //过滤器 Filter

      //最后一个参数root,就是以root身份去访问

      FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), new Configuration(),"root");

 

6:HDFS的高可用(HA)

   1:HDFS高可用是有2个namenode,一个是Active状态,一个是Standby状态

   2:Zookeeper用来解决两个namenode的单点故障问题,Journal Node用来保证两个namenode元数据的同步

 

7:MapReduce的思想

  MpReduce运行在yarn之上

  阶段划分:

      Map阶段: 负责将一个大的任务划分成小的任务,小任务之间不能有依赖关系

      Reduce阶段: 负责将Map阶段的结果进行汇总

 

 

8:MapReduce的步骤

    Map阶段2个步骤

        1. 设置 InputFormat 类, 将数据切分为 Key-Value(K1和V1) 对, 输入到第二步

        2. 自定义 Map 逻辑(自己写代码), 将第一步的结果转换成另外的 Key-Value(K2和V2) 对, 输出结果

    Shuffle 阶段 4 个步骤

        3. 分区(Partition)

        4. 排序(Sort)

        5. 规约(Combiner)

        6. 分组(Group By)    ETL

    Reduce阶段2个步骤

        7. 自定义Reduce逻辑(自己写代码)将新的K2和V2转为新的 Key-Value(K3和V3)输出

        8. 设置 OutputFormat 处理并保存 Reduce 输出的K3和V3 数据

HDFS的API操作

标签:

原文地址:https://www.cnblogs.com/xiaobinggun/p/11595187.html