韩国毛茸茸的丰满妇女

<strike id="j6ksu"></strike>
<th id="j6ksu"></th>
  1. <th id="j6ksu"></th>

    HDFS应用—基于shell操作和基于Java API操作

    Hadoop 潘老师 1个月前 (02-24) 39 ℃ (0) 扫码查看
    文章目录[隐藏]

    1.基于 Shell 的操作

    以下介绍一些我们在 Shell 中操作 HDFS 时经常用到的命令。

    1.1.创建目录命令

    HDFS 创建目录的命令是 mkdir,命令格式如下:

    hdfs dfs -mkdir 文件夹名
    

    例如,在 user 目录下创建 wen 目录。代码如下:

    hdfs dfs -mkdir hdfs://192.168.217.100:9820/wen
    

    可以简写为:

     hdfs dfs -mkdir /user/wen 
    

    1.2.上传文件到

    HDFS 上传文件时,文件首先复制到 DataNode 上,只有所有的 DataNode 都成功接收完数据,文件上传才是成功的。命令格式如下:

    hdfs dfs -put filename newfilename 
    

    例如,通过「-put 文件 1 文件 2」命令将 test1 文件上传到 HDFS 上并重命名为 test2。代码如下:

    hdfs dfs -put test1 test2 
    

    1.3.列出 HDFS 上的文件

    采用-ls 命令列出 HDFS 上的文件,需要注意的是,在 HDFS 中没有「当前工作目录」这个概念。命令格式如下:

     hdfs dfs -ls 
    

    例如,列出 HDFS 特定目录下的所有文件。代码如下:

    hdfs dfs –ls /wen 
    

    1.4.查看 HDFS 下某个文件的内容

    通过「-cat 文件名」命令查看 HDFS 下某个文件的内容。命令格式如下:

    hdfs dfs -cat 文件名 
    

    例如,查看 HDFS 上 wen 目录下 test.txt 中的内容。代码如下:

     hdfs dfs -cat /wen/test.txt 
    

    1.5.将 HDFS 中的文件复制到本地系统中

    通过「-get 文件 1 文件 2」命令将 HDFS 中某目录下的文件复制到本地系统的某文件中,并对该文件重新命名。命令格式如下:

    hdfs dfs -get 文件名 新文件名 
    

    例如,将 HDFS 中的 in 文件复制到本地系统并重命名为 IN1。代码如下:

    hdfs dfs -get in IN1 
    

    -get 命令与-put 命令一样,既可以操作目录,也可以操作文件。

    1.6.删除 HDFS 下的文档

    通过「-rmr 文件」命令删除 HDFS 下的文件。命令格式如下:

     hdfs dfs -rmr 文件 
    

    例如,删除 HDFS 下的 out 文档。代码如下:

    hdfs dfs -rmr out -rmr 
    

    删除文档命令相当于 delete 的递归版本。

    1.7.格式化 HDFS

    通过-format 命令实现 HDFS 格式化。命令格式如下:

    hdfs namenode -format 
    

    1.8.启动 HDFS

    通过运行 start-dfs.sh,就可以启动 HDFS 了。命令格式如下:

    start-dfs.sh 
    

    1.9.关闭 HDFS

    当需要退出 HDFS 时,通过 stop-dfs.sh 就可以关闭 HDFS。命令格式如下:

    stop-dfs.sh 
    

    2.基于 Java API 的操作

    本节将介绍通过 Java API 来访问 HDFS,首先介绍 HDFS 中的文件操作主要涉及的几个类。 ·Configuration 类:该类的对象封装了客户端或者服务器的配置。

    ·FileSystem 类:该类的对象是一个文件系统对象,可以用该对象的一些方法对文件进行操作。FileSystem fs=FileSystem.get(conf);通过 FileSystem 的静态方法 get 获得该对象。

    ·FSDataInputStream 和 FSDataOutputStream:这两个类是 HDFS 中的输入/输出流,分别通过 FileSystem 的 open 方法和 create 方法获得。

    接下来通过实例介绍如何利用 Java API 进行文件夹的创建、文件列表显示、文件上传和文件下载操作,为了使读者对实例具有完整性的理解,我们把主函数也列了出来。实例代码如下:

    import java.io.IOException; 
    import org.apache.hadoop.conf.Configuration; 
    import org.apache.hadoop.fs.FileStatus; 
    import org.apache.hadoop.fs.FileSystem; 
    import org.apache.hadoop.fs.Path; 
    public class HdfsDemo {
     public static void main(String[] args) { 
    createFolder(); 
    //uploadFile();
     //downloadFile(); 
    //listFile(new Path("/")); 
    } 
    }
    

    在主函数中,分别调用了 createFolder()、uploadFile()、downloadFile()和 listFile(new Path(「/」)函数来实现文件夹的创建、文件上传、文件下载和递归显示文件夹功能。

    2.1 创建文件夹

    如果想要将文件放入不同的文件夹中,则可以有针对性地动态创建文件夹。关于文件夹的创建比较简单。代码如下:

    public static void createFolder() { 
    // 定义一个配置对象 
    Configuration conf = new Configuration();
     try {
         // 通过配置信息得到文件系统的对象
         FileSystem fs = FileSystem.get(conf); 
    //在指定的路径下创建文件夹 
    Path path = new Path(「/yunpan」); 
    fs.mkdirs(path); 
    } catch (IOException e) { 
    e.printStackTrace();
     }
     } 
    

    2.2 递归显示文件

    如果要显示文件夹中的文件,需要用到递归算法,因为文件夹中可能有文件,也可能有文件夹。代码如下:

    public static void listFile(Path path) {
        Configuration conf = new Configuration();
        try { 
            FileSystem fs = FileSystem.get(conf);
            //传入路径,表示显示某个路径下的文件夹列表
            //将给定路径下所有的文件元数据放到一个 FileStatus 的数组中
            //FileStatus 对象封装了文件和目录的元数据,包括文件长度、块大小、权限等信息
            FileStatus[] fileStatusArray = fs.listStatus(path);
            for (int i = 0; i < fileStatusArray.length; i++) {
                 FileStatus fileStatus = fileStatusArray[i];
            //首先检测当前是否是文件夹,如果「是」则进行递归
                 if (fileStatus.isDirectory()) {
                    System.out.println("「当前路径是:」" + fileStatus.getPath());
                    listFile(fileStatus.getPath());
                } else {
                    System.out.println("「当前路径是:」" + fileStatus.getPath()); 
                 }
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    }
    

    2.3 文件上传

    前面创建了文件夹及文件的递归显示,接着来看一下文件的上传。关于文件上传的代码如下:

    public static void uploadFile() {
     Configuration conf = new Configuration(); 
    try {
     FileSystem fs = FileSystem.get(conf); 
    //定义文件的路径和上传的路径 
    Path src = new Path(「e://upload.doc」); 
    Path dest = new Path(「/yunpan/upload.doc 」); 
    //从本地上传文件到服务器上 
    fs.copyFromLocalFile(src, dest);
     } catch (IOException e) { 
    // TODO Auto-generated catch block
     e.printStackTrace();
     } 
    }
    

    关于文件的上传,首先需要定义上传源 src,这里的 src 是指本地文件路径,即将要上传的目的地路径是 dest,也就是 HDFS 上的路径。一旦设定了文件上传的数据源和目的路径之后,就可以调用 FileSystem 的 copyFromLocalFile()方法来实现文件的上传了。

    2.4 文件下载

    与文件上传所对应的就是文件下载。文件下载代码和文件上传类似,只是函数略有区别。代码如下:

    public static void downloadFile() { 
    Configuration conf = new Configuration(); 
    try {
     FileSystem fs = FileSystem.get(conf); 
    //定义下载文件的路径和本地下载路径 
    Path src = new Path( 「/yunpan/download.doc」); 
    Path dest = new Path(「e://download.doc」); 
    //从服务器下载文件到本地 
    fs.copyToLocalFile(src, dest);
     } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
    

    关于文件的下载,首先需要定义下载源 src,这里的 src 是指 HDFS 上的路径,将要下载的目的地为 dest,也就是本地系统的路径。设定了文件下载的数据源和目的路径之后,就可以调用 FileSystem 的 copyToLocalFile()方法实现文件的下载了。


    版权声明:本站所有文章,如无特殊说明,均为本站原创。全部下载资源版权归原作者所有。任何个人或组织,若未征得本站同意,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系潘老师进行处理。
    喜欢 (0)
    请潘老师喝杯Coffee吧!】
    分享 (0)

    您必须 微信登录 才能发表评论!

    韩国毛茸茸的丰满妇女