HDFS
集群搭建
ssh免密登录
ssh创建rsa对称加密的公钥和私钥,将公钥给其他节点(写入其他节点的.ssh/authorized_keys中),其他节点就可以登录这个主机了
rsa非对称加密,签名(私钥签名后的消息和未加密消息一起发送,接收方用公钥解密签名消息验证是否被篡改)
使用配置文件最好一样,不一样可能不知道会出啥问题。
- core-site.xml配置hdfs的url???
- hadoop-env.xml 配置JDK
- yarn-env.xml 配置JDK
- hdfs-site.xml配置nameNode、dataNode的dir
- mapred-site.xml配置MapReduce运行方式local或yarn
- yarn.site配置管理节点jobtracker和tasktracker
- slaves配置集群
- hadoop放到各个主机(配置路径一致配置文件才会生效!!!)
HDFS原理
优点:
- 高容错性,一个数据会根据分片数进行备份
- 适合批处理,移动计算而非移动数据,只需要知道数据的存储位置,移动计算代码对数据操作
- 适合海量数据
- 一次写入,可多次读取
- 集群服务器配置不需要太高要求
缺点:不支持小数据量存取,不支持低延迟数据,不适合并发写入只能在文件后面追加
基本组成(jps可查看):
NameNode:管理数据元信息(fsimage,大小、修改时间等)、记录操作日志(edits文件防止数据丢失)、block平衡(维持数量数量)、接受用户对文件的请求
客户端所有的写操作都会记录到edit log中
DataNode
数据块:一般为磁盘块的整数倍,hadoop2.x的大小默认为128M,存储文件会被分为大小相同的数据块并进行冗余
作用:
- 存储数据
- 响应客户IO操作(客户端向nameNode请求元信息,拿到元信息再去向DataNode进行IO操作)
- 执行DataNode之间的数据块复制
- 与nameNode通信,保持心跳
机架感知
在运行客户端的节点上放第一个副本(如果客户端运行在集群外,会随机选择第一个节点,系统会自动规避储存太满或者事务太忙的节点)。
第二个复本存放的节点选择一个与第一个节点不同且随机的机架上的随机节点上(离架,也是自动规避储存太慢或者太忙的节点)
第三个放在与第二个节点相同机架上的随机节点上
SecondaryNameNode
作用:将edits操作合并到fsimage,防止edits太大,减少hdfs启动时间
合并过程
合并时机(checkpoint)
- 每隔60分钟(dfs.namenode.checkpoint.period)
- 达到100w条事务
满足其一即可触发
nameNode web 端口:50070
shell操作
hdfs dfs 操作命令(读、写等于Linux文件命令相似)
hdfs dfsadmin 管理命令
Java API操作
hdfs上传文件原理
-
客户端发送请求上传文件
-
nameNode响应可以上传
-
rpc请求上传第一个block
-
nameNode返回各节点DataNode信息
-
客户端请求建立通道chanl
-
各DataNode按照通道链路原路返回响应
-
传输block(DataNode)
-
传输完成后客户端需要告诉nameNode
hdfs文件下载原理
- 请求nameNode
- nameNode查询文件的块元信息(存储地址)
- 返回元信息
- 去DataNode获取block
hdfs容错
名称节点出错,通过secondarynamenode备份的fsimage恢复(HA多个nameNode节点)
数据节点出错,DataNode与nameNode心跳通信,宕机就会将副本数再复制
数据出错,客户端写入数据时会为每个文件块同路径下生成一个隐藏文件(保存文件块的摘要信息)
客户端读取时会先获取摘要信息文件,根据摘要信息文件对数据块校验,校验出错就会向其他节点获取数据
高级功能
安全模式
nameNode启动时,hdfs会首先进入安全模式,DataNode会将自己所有数据块信息给nameNode,nameNode统计每一个文件的数据块的份数检测是否达到配置的值,达到就退出安全模式。
作用:只允许读取数据,不允许写入
#查看当前状态:
hdfs dfsadmin -safemode get
#进入安全模式:
hdfs dfsadmin -safemode enter
#强制离开安全模式:
hdfs dfsadmin -safemode leave
#一直等待直到安全模式结束:
hdfs dfsadmin -safemode wait
回收站
会对用户删除的文件保存到/user/用户名/.trash目录下,按配置时间定时删除
快照
允许按目录对文件保存快照(存储当前文件的内容为一个版本)
#开启或关闭快照
hdfs dfsadmin -allowSnapshot 允许快照的目录
hdfs dfsadmin -disallowSnapshot 不允许快照的目录
#创建、删除、重命名快照
hdfs dfsadmin -createSnapshot 快照的目录 [快照名(可选)]
hdfs dfsadmin -deleteSnapshot 快照的目录 快照名
hdfs dfsadmin -renameSnapshot 快照的目录 旧快照名 新快照名
配额
设置配额的命令
setQuota :对HDFS中某个目录设置文件和目录数量之和的最大值
hdfs dfsadmin -setQuota 5 /user/hadoop/quota
setSpaceQuota :设置HDFS中某个目录可用存储空间大小,单位是byte
hdfs dfsadmin -setSpaceQuota 134217728 /user/hadoop/spaceQuota
清除配额的命令
hdfs dfsadmin -cIrQuota /user/hadoop/quota
hdfs dfsadmin -cIrSpaceQuota /user/hadoop/spaceQuota
联邦与高可用
联邦就是使用多个nameNode代替一个nameNode,减小服务器压力
高可用是对一个nameNode进行备份(一活5备),分active和standby。
这个图原理目前还没懂