目录
访问
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中的positionFSDataOutputStream
方法:
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组件)

本文详细介绍了如何通过命令行和编程接口访问HDFS。包括使用HDFS命令行进行文件操作如ls、mkdir、put、cat、rm等,以及通过Java API和C API进行读写操作。此外,还提到了HDFS与NFS的集成以及Flume和Sqoop在数据传输中的应用。
3936

被折叠的 条评论
为什么被折叠?



