一、概述
HDFS(Hadoop Distributed File System)是分布式文件存储系统,主要用来解决海量数据的存储问题。HDFS比较适合一次写入,多次读出的场景。
- NameNode(NN)
- 管理HDFS的namespace
- 维护副本策略
- 管理Block的映射信息
- 处理客户端的读写请求
- DataNode
- 数据实际存储
- 执行数据的读写操作
- Client
- 对文件进行切分成Block,再上传到HDFS
- 与NameNode,获取文件的位置信息
- 与DataNode,数据的读写操作
- Second NameNode(2NN)
- 辅助NameNode,定期合并Fsimage和Edits,分担NN压力
二、优缺点
- 优点
- 通过多个副本保证可靠性,增加容错性
- 能够处理数据规模大的场景,GB、TB甚至PB
- 缺点
- 无法做到毫秒级别的存储数据
- 无法高效处理大量小文件的场景
- 不支持并发写入,文件随机修改
三、常用命令行
# 在hdfs的默认目录下面新建文件夹,默认在/user/{用户名}下面
hdfs dfs -mkdir -p input
# 往hadoop推送本地文件
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
# 上传文件并指定为新的文件名
hdfs dfs -put ./core-site.xml input/core-site2.xml
# 从hdfs上面下载文件到本地
hdfs dfs -copyToLocal input/core-site.xml ./
# 将本地的core-site.xml文件追加到目标文件最后面
hdfs dfs -appendToFile core-site.xml input/core-site.xml
# 将input文件夹里面含有dfs的字符串筛选出来
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep input output 'dfs[a-z.]+'
# 读取计算后的结果
hdfs dfs -cat output/*
# 删除计算后的结果文件
hdfs dfs -rm -r output
# 查看hdfs里面input目录的全部文件的大小总和
hdfs dfs -du -s -h input
# 查看hdfs里面input目录下面每个文件的大小
hdfs dfs -du -h input
tips: 更多命令行官方查询入口