HDFS
优缺点
优点
- 高容错性
- 适合处理大数据
- 可构建在廉价机器上
缺点
- 不适合低延时数据访问
- 无法高效的对大量小文件进行存储
- 存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。
- 小文件存储的寻址时间会超过读取时间
- 不支持并发写入、文件随机修改
- 一个文件只能有一个写,不允许多个线程同时写
- 仅支持数据追加(append),不支持文件的随机修改
组成架构
- NameNode:它是主管理者
- 管理HDFS的名称空间
- 配置副本策略
- 管理数据块映射信息
- 处理客户端读写请求
- DataNode:slave。NameNode下达命令,DataNode执行实际的操作
- 存储实际的数据块
- 执行数据块的I/O操作
- Client:客户端
- 文件切分
- 与NameNode交互,获取文件的位置信息
- 与DataNode交互,IO
- Client提供一些命令来管理HDFS
- Client可以通过一些命令来访问HDFS
- Secondary NameNode:并非NameNode的备份。他并不能替换NameNode。
- 辅助NameNode,分担工作量,比如定期合并Fsimage和Edits,推送给NameNode。
- 紧急情况下可辅助恢复NameNode
文件块大小
- HDFS中文件在物理上是分块存储的,块的大小可以通过配置参数来规定,默认大小在Hadoop2.x版本中是128M
- 如果寻址时间约10ms,查找到目标block的时间为10ms
- 寻址时间为传输时间的1%时,则为最佳状态。
- 目前的传输速率普遍为100MB/S
HDFS块太小会增加寻址时间
HDFS块太大从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间
PS:HDFS块的大小设置主要取决于磁盘的传输速度
HDFS 的 Shell操作
- 基本语法
bin/hadoop fs 具体命令
或者bin/hdfs dfs
- 常用命令
- 启动hadoop 集群
sbin/start-dfs.sh
sbin/start-yarn.sh
-help
:输出这个命令的参数-ls
:显示目录信息-mkdir -P
:在HDFS上创建目录-moveFromLocal
:从本地剪切到HDFS上-appendToFile
:追加一个文件到已存在的文件末尾。注意:HDFS只支持文件追加-cat
:显示文件内容-chgrp、-chmod、-chown
:修改文件所有者,用法于与Linux上一样
-
-copyFromLocal
:从本地文件系统中拷贝到HDFS路径去
-cp
:从HDFS的一个路径拷贝到HDFS 的另一个路径-mv
:从HDFS的一个路径移动到HDFS 的另一个路径-get
:等同于-copyToLocal
从HDFS下载到本地-getmerge
:合并下载多个文件,比如HDFS的目录-put
:等同于-copyFromLocal
-tail
:显示一个文件末尾-rm
:删除文件或文件夹-rmdir
:删除空目录-du -h [-s]
:统计文件夹的大小信息
客户端操作
- 根据自己电脑的操作系统拷贝对应的编译后的hadoop jar包到非中文路径
- 配置HADOOP_HOME 环境变量