• HDFS文件系统基本文件命令、编程读写HDFS


    基本文件命令:

    格式为:hadoop fs -cmd <args>

    cmd的命名通常与unix对应的命令名相同。例如,文件列表命令: hadoop fs -ls

    1、添加目录和文件

    HDFS有一个默认的工作目录 /user/$USER,其中$USER是你的登录用户名。不过目录不会自动建立,我们现在用mkdir建立它,我使用的是chen作为用户名。

    hadoop fs -mkdir /user/chen

    (hadoop的mkdir命令会自动创建父目录,类似于带-p的unix命令)

    我们现在放本地文件系统的一个文件进去。

    hadoop fs -put example.txt .

    最后一个参数是句点,相当于放入了默认的工作目录,等价于 hadoop fs -put example.txt /user/chen

    当你把文件放入HDFS上后,你就可以运行Hadoop程序来处理它。

    2、检索文件

    get命令与put命令相反,它从HDFS复制文件回到本地文件系统。

    hadoop fs -get example.txt .

    复制到本地的当前工作目录中。

    另一种是显示数据,用cat

    hadoop fs -cat example.txt

    3、删除文件

    rm命令

    hadoop fs -rm example.txt

    也可以用来删除空目录

    编程读写HDFS

    利用HDFS给我们提供的API,我们同样可以访问它。

    在Hadoop中用作文件操作的主类位于org.apache.hadoop.fs软件包中。包括常见的open、read、write、close。Hadoop文件的API起点是FileSystem类,这是一个与文件系统交互的抽象类,我们通过调用factory的方法FileSystem.get(Configuration conf)来取得所需的FileSystem实例,如下我们可以获得与HDFS接口的FileSystem对象:

    Configuration conf = new Configuration();

    FileSystem hdfs = FileSystem.get(conf);//获得HDFS的FileSystem对象

    如果我们要实现HDFS与本地文件系统的交互,我们还需要获取本地文件系统的FileSystem对象

    FileSystem local = FileSystem.getLocal(conf);//获得本地文件系统的FileSystem对象

    以下代码讲解了一个例子,我们开发一个PutMerge程序,用于合并本地文件后放入HDFS,因为大文件HDFS处理起来比较容易,所以这个程序经常会在以后的开发中用到

    import java.io.IOException;   
    import org.apache.hadoop.conf.Configuration;   
    import org.apache.hadoop.fs.FSDataInputStream;   
    import org.apache.hadoop.fs.FSDataOutputStream;   
    import org.apache.hadoop.fs.FileStatus;   
    import org.apache.hadoop.fs.FileSystem;   
    import org.apache.hadoop.fs.Path;   
    public class PutMerge {   
        public static void main(String[] args) throws IOException {   
        Configuration conf = new Configuration();   
        FileSystem hdfs =FileSystem.get(conf); //获得HDFS文件系统的对象   
        FileSystem local = FileSystem.getLocal(conf);//获得本地文件系统的对象   
        Path inputDir = new Path(args[0]);//设定输入目录   
        Path hdfsFile = new Path(args[1]);//设定输出目录   
       try{   
           FileStatus[] inputFiles = local.listStatus(inputDir);//FileStatus的listStatus()方法获得一个目录中的文件列表   
          FSDataOutputStream out = hdfs.create(hdfsFile);//生成HDFS输出流   
          for(int i = 0; i < inputFiles.length; i ++){   
                System.out.println(inputFiles[i].getPath().getName());   
                FSDataInputStream in = local.open(inputFiles[i].getPath());//打开本地输入流   
              byte[] buffer = new byte[256];   
                int bytesRead = 0;   
                while((bytesRead = in.read(buffer))>0){   
                out.write(buffer,0,bytesRead);//通过一个循环来写入   
              }   
                in.close();   
             }   
             out.close();   
         }catch (IOException e) {   
               e.printStackTrace();   
         }   
     }

    Hadoop:第一个程序操作HDFS

    http://www.cnblogs.com/fora/archive/2011/07/20/2111870.html

  • 相关阅读:
    要求两个条件都为假时,执行某些操作
    Celery + RabbitMq 示意图
    关于消息队列的好文章
    django related_name, on_delete
    Celery 图,[转]
    django model 中 meta子类详解
    django 自定义app
    python __dict__
    Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)【转】
    scala private
  • 原文地址:https://www.cnblogs.com/a7345678/p/3270463.html
Copyright © 2020-2023  润新知