当前位置:   article > 正文

HDFS shell命令的使用,HDFS Web管理页面的查看使用以及HDFS Java API的练习使用。_利用hdfs的web管理界面

利用hdfs的web管理界面

# 1、目标

    通过练习掌握,HDFS常用的Shell命令以及HDFS的常用Java Api调用。

# 2、内容:

    主要包括HDFS shell命令的使用,HDFS Web管理页面的查看使用以及HDFS Java API的练习使用。

## 2.1 HDFS shell命令的使用   

  1. 查看hdfs相关shell命令
  2.     hdfs dfs
  3.     hdfs dfs -help put #查看具体某个命令的使用方法
  4.     创建用户目录
  5.         cd /usr/local/hadoop
  6.         hdfs dfs -mkdir -p /user/hadoop
  7.     查看目录
  8.         hdfs dfs -ls /
  9.     本地文件系统文件上传至HDFS中
  10.         hdfs dfs -put /本地文件系统文件的存储路径 /hdfs中某目录
  11.     HDFS中的文件下载到本地
  12.         hdfs dfs -get /hdfs某目录中的某文件 /本地文件系统存储路径
  13.     HDFS中的文件从一个目录下复制到另个HDFS文件目录下
  14.         hdfs dfs -cp /hdfs某目录下文件 /hdfs另一目录文件

## 2.2 HDFS Web页面的使用

    master:9780

## 2.3 HDFS Java API调用

    http:hadoop.apache.org/docs/stable/api/ 提供了完整的Hadoop API文档

    准备:

    eclipse下载安装/或者vs code;

    右键项目,选择build path 选择 Configure build path  选择Libraries 选择bbbbb    classpath 右侧add external jars

    添加HDFS相关jar包:

        /usr/local/hadoop/share/hadoop/common 目录下的所有jar包,注意不包括子级目录中的jar包;

        /usr/local/hadoop/share/hadoop/common/lib 目录下所有的jar包;

        /usr/local/hadoop/share/hadoop/hdfs 目录下的所有jar包,注意不包括子级目录中的jar包;

        /usr/local/hadoop/share/hadoop/hdfs/lib目录下所有jar包;

### 2.3.1 HDFS文件查找

```   

  1. import org.apache.hadoop.conf.Configuration;
  2.     import org.apache.hadoop.fs.FileSystem;
  3.     import org.apache.hadoop.fs.Path;
  4.     public class HDFSFileIfExist {
  5.         public static void main(String[] args){
  6.             try{
  7.                 String fileName = "10.txt";
  8.                 Configuration conf = new Configuration();
  9.                 conf.set("fs.defaultFS", "hdfs://master:9000"); //core-site.xml中
  10.                 conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
  11.                 FileSystem fs = FileSystem.get(conf);
  12.     //            System.out.println(fs.getHomeDirectory());
  13.     //            fs.create(new Path("/user/hadoop/3334.txt"));
  14.                 Path path = new Path(fileName);
  15.                 System.out.println(path.toString());
  16.                 if(fs.exists(path)){
  17.                     System.out.println("文件存在");
  18.                 }else{
  19.                     System.out.println("文件不存在");
  20.                 }
  21.             }catch (Exception e){
  22.                 e.printStackTrace();
  23.             }
  24.         }
  25.     }

```

    默认的查找方法:fs.exits(path) 会默认在用户目录下查找 即 /user/hadoop

### 2.3.2 HDFS文件融合

    整体流程:

        创建文件过滤器;

        HDFS的初始化过程;

        获取指定目录下过滤后的文件信息;

        读取文件信息,并将内容输出到同一个文件内;


 

    正则表达式:

    表达式 .* 就是单个字符匹配任意次,即贪婪匹配。

```

  1. import java.io.IOException;
  2. import java.io.PrintStream;
  3. import java.net.URI;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.fs.*;
  6. /**
  7.  * 过滤掉文件名满足特定条件的文件
  8.  */
  9. class MyPathFilter implements PathFilter {
  10.      String reg = null;
  11.      MyPathFilter(String reg) {
  12.           this.reg = reg;
  13.      }
  14.      @Override
  15.      public boolean accept(Path path) {
  16.         if (!(path.toString().matches(reg)))
  17.             return true;
  18.         return false;
  19.     }
  20. }
  21. /***
  22.  * 利用FSDataOutputStream和FSDataInputStream合并HDFS中的文件
  23.  */
  24. public class MergeFile {
  25.     Path inputPath = null; //待合并的文件所在的目录的路径
  26.     Path outputPath = null; //输出文件的路径
  27.     public MergeFile(String input, String output) {
  28.         this.inputPath = new Path(input);
  29.         this.outputPath = new Path(output);
  30.     }
  31.     public void doMerge() throws IOException {
  32.         Configuration conf = new Configuration();
  33.         conf.set("fs.defaultFS","hdfs://master:9000");
  34.         conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
  35.         FileSystem fsSource = FileSystem.get(URI.create(inputPath.toString()), conf);
  36.         FileSystem fsDst = FileSystem.get(URI.create(outputPath.toString()), conf);
  37.                
  38.         //下面过滤掉输入目录中后缀为.abc的文件
  39.         FileStatus[] sourceStatus = fsSource.listStatus(inputPath,
  40.                 new MyPathFilter(".*\\.txt"));
  41.         FSDataOutputStream fsdos = fsDst.create(outputPath);
  42.         PrintStream ps = new PrintStream(System.out);
  43.         //下面分别读取过滤之后的每个文件的内容,并输出到同一个文件中
  44.         for (FileStatus sta : sourceStatus) {
  45.             //下面打印后缀不为.abc的文件的路径、文件大小
  46.             System.out.print("路径:" + sta.getPath() + "    文件大小:" + sta.getLen()
  47.                     + "   权限:" + sta.getPermission() + "   内容:");
  48.             FSDataInputStream fsdis = fsSource.open(sta.getPath());
  49.             byte[] data = new byte[1024];
  50.             int read = -1;
  51.             while ((read = fsdis.read(data)) > 0) {
  52.                 ps.write(data, 0, read);
  53.                 fsdos.write(data, 0, read);
  54.             }
  55.             fsdis.close();          
  56.         }
  57.         ps.close();
  58.         fsdos.close();
  59.     }
  60.     public static void main(String[] args) throws IOException {
  61.         MergeFile merge = new MergeFile(
  62.                 "hdfs://master:9000/user/hadoop/",
  63.                 "hdfs://master:9000/user/hadoop/merge.txt");
  64.         merge.doMerge();
  65.     }
  66. }

```

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/896374
推荐阅读
相关标签
  

闽ICP备14008679号