目录

  • 访问
  • 1 通过命令行使用HDFS
  • 2 应用编程接口
  • Native JAVA API:
  • C API for HDFS:
  • WebHDFS REST API:
  • 3 HDFS NFS Gateway
  • 4 其他
  • Apache Flume
  • Apache Sqoop
  • 应用


访问

1 通过命令行使用HDFS

通过bin/hdfs调用
user命令(移动数据、获取文件信息等)

  • 查看指定目录下内容
hdfs dfs –ls [文件目录]
hdfs dfs -ls -R   /                   //显式目录结构  
hdfs dfs -ls / 
//查看根目录所有文件夹,注意ls后面和/之间有空格
hdfs dfs –lsr                    //循环列出目录、子目录及文件信息 

eg: hdfs dfs –ls /user/wangkai.pt
  • 创建文件夹
hdfs dfs -mkdir /user/test   //dir指的是directory,文件夹
  • 创建随机数据文件
dd if=/dev/urandom of=sample.txt bs=64M count=16
//block size是64M,一共16个块
//if:输入文件名;of:输出文件名

其他参数说明见Linux dd 命令 | 菜鸟教程 (runoob.com)

  • 将本地文件存储至hadoop**
hdfs dfs –put \[本地地址] \[hadoop目录]
hdfs dfs –put /home/t/file.txt  /user/t 
hdfs dfs –copyFromLocal test.txt /user/sunlightcs/test.txt  //从本地文件系统复制文件到HDFS文件系统,等同于put命令
  • 查看文件状态
hdfs fsck /user/test/sample.txt
  • 打开某个已存在文件
hdfs dfs –cat [file_path]  
eg:hdfs dfs -cat /user/wangkai.pt/data.txt
  • 将hadoop上某个文件down至本地已有目录下
hadoop dfs -get [文件目录] [本地目录]  
hadoop dfs –get /user/t/ok.txt /home/t 
hdfs dfs –copyToLocal /user/sunlightcs/test.txt test.txt  //从HDFS文件系统复制文件到本地文件系统,等同于get命令
  • 查看最后1KB的内容
hdfs dfs –tail /user/sunlightcs/test.txt
  • 修改权限/拥有者
hdfs dfs –chmod [-R] MODE /user/sunlightcs  
//修改HDFS系统中/user/sunlightcs目录权限,MODE可以为相应权限的3位数或+/-{rwx},选项-R递归执行
hdfs dfs –chown [-R] /user/sunlightcs  
//修改HDFS系统中/user/sunlightcs目录拥有者,选项-R递归执行
  • 查看文件大小
hdfs dfs –du PATH  //显示该目录中每个文件或目录的大小(disk usage)     
hdfs dfs –dus PATH  //类似于du,PATH为目录时,会显示该目录的总大小(disk usage summary)
  • 复制
hdfs dfs –cp SRC [SRC …] DST   //将文件从SRC复制到DST,如果指定了多个SRC,则DST必须为一个目录
  • 删除
hdfs  dfs –rm [文件地址]  //删除hadoop上指定文件或空文件夹
hdfs dfs –rm /user/t/ok.txt  
hdfs dfs –rmr /user/t  //删除hadoop上指定文件夹(包含子目录等)
  • 将hadoop上某个文件重命名或移动
hdfs dfs –mv  /user/test.txt  /user/ok.txt   //将test.txt重命名为ok.txt
hdfs dfs -mv src dest //在HDFS内移动文件
  • 查看帮助
hdfs dfs -help
hdfs dfs –help ls  //查看某个[ls]命令的帮助文档

Administrator命令

  • 查看报告
hdfs dfsadmin -report

debug命令
查看更多Commands:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html

2 应用编程接口

Native JAVA API:

Base class:org.apache.hadoop.fs.FileSystem
JAVA API: http://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/FileSystem.html

  • Base class
    org.apache.hadoop.fs.FileSystem
  • 重要class
    FSDaraInputStream
    方法:
    read:从给定位置读取bytes
    readFully:读取流数据到缓冲区
    seek:寻找offset(偏移量)
    getPos:获取当前stream中的position
    FSDataOutputStream
    方法:
    getPos:获取当前stream中的position
    hflush:清空缓冲区数据
    close:关闭输出流
  • 举例
    使用API从HDFS中读取
//创建实例
FileSystem fs = FileSystem.get(URL.create(uri),conf);
//打开输入流
in = fs.open(new Path(uri));
//使用IO工具将数据从输入流中copy
IOUtils.copyBytes(in,System.out,4096,false)
//关闭流
IOUtils.closeStream(in);

使用API向HDFS中写入

//创建实例
FileSystem fs = FileSystem.get(URL.create(outuri),conf);
//创建文件
out = fs.create(new Path(outuri));
//写入输出流
out.write(buffer,0,nbytes);
//关闭文件
out.close();

C API for HDFS:

hdfs.h(header file)
C/libhdfs: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/LibHdfs.html

WebHDFS REST API:

HTTP的get,put,post,delete
WebHDFS API:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

3 HDFS NFS Gateway

NFS Gateway支持NFSv3,允许HDFS作为客户端本地文件系统的一部分挂载在本地文件系统。目前,NFS Gateway支持和启用了下面的使用模式:

  • 用户可以在基于NFSv3客户端兼容的操作系统上的本地文件系统上浏览HDFS文件系统。
  • 用户可以从挂载到本地文件系统的HDFS文件系统上下载文件。
  • 用户可以从本地文件系统直接上传文件到HDFS文件系统。
  • 用户可以通过挂载点直接将数据流写入HDFS。目前支持文件append,随机写还不支持。
  • 将HDFS mount(挂载)到client端(作为文件系统)
  • 可以通过regular的fs命令来浏览文件
  • 也可以向HDFS上传或下载文件
  • 不常用

4 其他

Apache Flume

收集聚合流数据并放进HDFS(like日志数据)

Apache Sqoop

在hadoop和数据仓库(关系型数据库)之间的主要传输工具

应用

HBase可以在HDFS上运行并且提供了很好的聚合性
Spark可以直接在HDFS上运行(不需要其他hadoop组件)