1 HDFS机制
namenode
负责元数据的管理
处理client的读写的请求
datanode
数据块本身
数据块的元数据(数据块的长度,块数据的校验和,以及时间戳)
心跳
namenode启动后,datanode向namenode进行注册,然后周期性的发送心跳信号;
心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令;比如删除块,复制块等;
如果超过10分钟没有收到某个DataNode 的心跳,NameNode则认为该节点不可用
块报告
并且datanode周期性的向namenode进行块报告。
DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息
块损坏
当DataNode读取block的时候,重新计算checksum,和创建时的对比
DataNode 在其文件创建后三周验证其checksum
2 HDFS启动流程及元数据的同步
HDFS启动流程
NameNode启动,加载元数据,并等待datanode注册,同时进入安全模式; datanode注册后,向namenode发送心跳和和Block Report。
加载元数据:加载fsimage和edits文件,合并生成新的fsimage,并生成edits文件
元数据同步
fsimage 是元数据的镜像文件
edits 是记录元数据操作的文件
元数据的同步触发的阈值(hdfs-default.xml)
dfs.namenode.checkpoint.period 3600
dfs.namenode.checkpoint.txns 1百万个事务
3 安全模式
在安全模式下,文件系统不允许修改
进入安全模式的三种方式
1) 手动进入
$ bin/hdfs dfsadmin -safemode enter
$ bin/hdfs dfsadmin -safemode leave
2) namenode启动会自动进入
3) 正常块的个数/总的块个数<0.999 也会进入安全模式
<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>0.999f</value>
</property>
4 HDFS特点
- 优点
- 处理超大文件
- 一次写入,多次读取
- 运行廉价服务器
- 缺点:
- 高延迟,不适合接入前台业务,一般用于离线分析
- 不支持任意的修改
5 window下mapreduce开发环境搭建
5.1 Windows安装hadoop
1. 解压hadoop-2.x.tar.gz到windows磁盘
2. 配置hadoop的环境变量
添加环境变量 HADOOP_HOME=hadoop解压目录
在PATH环境变量中追加 %HADOOP_HOME%/bin;
3. cmd测试
hadoop -h
5.2 在windows添加
拷贝winutils.exe 和hadoop.dll到${hadoop_HOME}/bin
单独拷贝hadoop.dll到C:\Windows\System32
5.3 关闭HDFS权限
配置hadoop集群的权限
在linux中的hadoop安装目录下的etc/hadoop/hdfs-site.xml添加如下配置,重启HDFS的进程
<!--关闭hdfs的文件权限控制-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
5.4 创建maven工程,通过pom.xml导包
创建maven工程
将lo4j.perperties文件拷贝到src/main/resources
6 HDFS Java API