一、HDFS设计基础与目标:
1、 数据冗余
2、 流式数据访问,即数据批量读取而非随机读取,hadoop擅长做的是数据分析而不是事务处理
3、 大规模数据集
4、 简单一致模型;为了降低系统的复杂度,对文件采用一次性写多次读的逻辑设计,即是文件一经写入,关闭,就再也不能修改
程序采用“数据就近”原则分配节点执行
二、HDFS设计原则:
1、文件以block的方式存储
2、每个block一般64M
3、通过副本提高可靠度和吞吐量
4、每个block至少分到3个DataNode上(默认)
5、单一master(NameNode)来协调存储单元数据(metadata)
6、客户端对文件没有缓存机制(No data caching)
三、HDFS的可靠性
1、 冗余副本策略:在hdfs-site.xml设置复制因子指定副本数量,所有数据块都有副本,datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系表(blockreport)汇报给namenode
2、 机架策略:集群一般放在不同机架上,HDFS的“机架感知”,在本机架存放一个副本,其他机架存放别的副本,这样可以防止机架失效时丢失数据,也可以提供带宽利用率
3、 心跳机制:namenode周期性从datanode接收心跳信号和块报告,根据块报告验证元数据,预先设置副本数量的阈值,namenode检测出低于阈值的数据块,并在合适的时机进行复制
4、 安全模式:namenode启动时先经过“安全模式”阶段,安全模式阶段不会产生数据写,当数据块大达到最小副本以上时,被认为是“安全”的,在一定比例(可设置)的数据块被确定为“安全”后,在过若干时间,安全模式结束,当检测副本数不足的数据块时,该块会被复制直到最小副本数
5、 校验和:文件创立时,每个数据块都产生检验和,检验和作为一个单独的隐藏文件保存在命名空间,客户端获取数据时检查检验和是否相同,从而发现数据是否损坏,如果损坏,继续读取其他副本
6、 回收站:删除文件时,放入回收站,文件可以快速恢复,可以设置时间阈值,当存放时间超过阈值,彻底删除
7、 元数据保护:映像文件和事务日志是namenode的核心数据,可以配置多个副本,降低namenode的处理速度,但增加安全性
快照机制:支持存储某个时间点的映像,可以使数据返回到某个时间点的状态四、HDFS组成模块
HDFS主要由nameNode、dataNode和secondaryNameNode组成,另外MapReduce执行时用到的JobTracker和TaskTracker分别对应nameNode和dataNode,其中TaskTracker必须与dataNode在同一个物理节点,但是JobTracker和nameNode可以不在同一节点。
NameNode:
1、 管理文件系统的命名空间,是HDFS守护程序,提供名称查询服务,是一个jetty服务器
2、 Namenode使用事务日志记录HDFS元数据的变化,使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等;NameNode保存的metadata信息:文件的ownership、permissions;文件包含哪些块;block保存在哪个DataNode(由DataNode启动时上报)
3、 协调客户端对文件的访问
4、 NameNode的metadata信息在启动后会加载到内存中
Metadata存储到磁盘文件名为“fsimage”(block的位置信息不会存储到fsimage)DataNode:
1、 负责所在屋里节点的存储管理,文件有数据块组成,典型块大小是64MB
2、 一次写入,多次读取
3、 数据块尽量散步到各个节点
4、 启动时向NN汇报block信息
向NN发送心跳检测保持联系(3秒一次),如果NN 10分钟没有收到DN心跳,则认为已经lost,并copy其上的block到其他DNSecondaryNameNode(SNN)
1、 它不是NN的热备份
2、 监控HDFS状态的辅助后台程序
3、 它可以作为冷备份:将本地的fsimage导入;修改cluster所有DN的NameNode地址;修改所有client端的NameNode地址or 修改SNN IP为原NN IP
它的工作是帮助NN合并edits log,减少NN启动时间JobTracker:
1、 用于处理作业(用户提交代码)
2、 决定哪些文件参与处理,然后切割task分配节点
3、 监控task,重启失败的task(于不同的节点)
4、 每一个集群只有唯一的jobTracker,位于master节点
TaskTracker:
1、 位于slave节点,与datanode结合
2、 管理各节点上的task
3、 每个节点只有一个taskTracker,但是一个taskTracker可以启动多个JVM
与JobTracker交互五、HDFS常用命令
创建文件夹hadoop fs –mkdir /user/….
上传文件:hadoop fs –put /home/admin/newFile /user/….
下载文件:hadoop fs –get /user/… /home/admin/newFile
删除文件和文件夹:hadoop fs –rm filename hadoopfs –rmr dirname
查看文件夹里面的文件:hadoop fs –ls dir
查看文件内容:Hadoop fs –cat/text/tail filename
六、Hadoop管理员常用命令
hadoop job –list #列出正在运行的jobs
Hadoop job –kill <job_id> #kill job
Hadoop fsck / #检查HDFS块状态是否损坏
Hadoop fsck / -delete #检查HDFS块状态,删除坏块
Hadoop dfsadmin –report #检查HDFS状态,包括DN信息
Hadoop dfsadmin –safemode enter|leave #安全模式
Hadoop distcp hdfs://a:9000/xxxhdfs://b:9000/xxx #并行拷贝
./bin/start-balancer.sh#平衡集群文件