重要组成
Hdfs是分布式文件存储系统,是用来存储文件的
- NameNode:管理元数据信息,给子节点分配任务(FSImage是主节点启动时对整个文件系统的快照(元数据镜像文件),Edits是修改记录(操作日志文件))
- DataNode:负责数据存储,实时上报心跳给主节点
- SecondaryNameNode:
1.首先,它定时到NameNode去获取edit logs,并更新到fsimage上。一旦它有了新的fsimage文件,它将其拷贝回 NameNode中。
2.NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。
Yarn是一个资源管理系统
- ResourceManager 监控 NodeManager,负责集群的资源调度
- nodemanager 管理节点资源,处理ResourceManager 命令(启动mrappmaster,maptask ,reducetask)
端口
dfs.namenode.http-address:50070
dfs.datanode.http-address:50075
SecondaryNameNode辅助名称节点端口号:50090
dfs.datanode.address:50010
fs.defaultFS:8020 或者9000
yarn.resourcemanager.webapp.address:8088
历史服务器web访问端口:19888
fsck 工具
用来确认hadoop的健康情况的
sudo -u hdfs hdfs fsck /
但是fsck工具只会列出有问题的文件和block,但是它并不会对它们进行修复
Hdfs
HDFS的优缺点
优点:
- 机器便宜
- 分布式存储大文件
- 高扩展性:可以随意加机器
- 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
- 高可靠性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
缺点:
- 高延迟,haddop牺牲了数据的延迟,对高数据吞吐量做了优化
- 大量的小文件会导致naenode元数据信息占用内存很大,影响集群运行效率
- hdfs的文件只能一次写入,不支持写入和修改
- 没有事务
hdfs常用命令
start-all.sh
hadoop-daemon.sh start
yarn-daemon.sh start
hadoop fs -ls /
hdfs dfs -ls /
hdfs dfs -put
hdfs dfs -get
hdfs dfs -cat
hdfs dfs -text
hdfs dfs -tail
hdfs dfs -cp
hdfs dfs -mv
hdfs dfs -copyFromLocal
hdfs dfs -copyToLocal
hdfs dfs -rmdir
hdfs dfs -rmr
hdfs dfs -touchz
hdfs dfs -getmerge
Hdfs小文件问题
namenode将元数据存储在内存中,每个文件,目录,数据块的存储信息大约占了150个字节,大量的小文件会占用很多的内存空间,使集群运行变慢
小文件解决方案,目前来讲没有找到有效的解决方案,这个问题也调研过一段时间,发现大数据圈目前没有有效的途径解决这个问题
- 在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。
- 在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。
- 在MapReduce处理时,可采用CombineTextInputFormat提高效率
block
默认一个block是128M,但是hdfs存储有溢出比,实际测试过可以存储135M的文件
小于一个块的文件,并不会占用一整个块的空间
HDFS读写性能测试
在hadoop的share文件夹下自带了性能测试jar包
hadoop-mapreduce-client-jobclient-2.7.3.2.5.3.0-37-tests.jarTestDFSIO