NameNode(NN)
基本知识
1.基于内存存储 :不会和磁盘发生交换
2.只存在内存中
3.持久化
主要功能:
1.接受客户端的读写服务
2.收集DataNode汇报的Block列表信息
3.NameNode保存metadata信息包括文件owership和permissions文件大小,时间
(Block列表:Block偏移量),位置信息,Block每副本位置(由DataNode上报)
NameNode持久化
1.NameNode的metadate信息在启动后会加载到内存
2.metadata存储到磁盘文件名为”fsimage”
3.Block的位置信息不会保存到fsimage
4.edits记录对metadata的操作日志
5.fsImage:将内存的状态拍个快照
6.Edits:存放的是客户端对元数据增删改的操作
DataNode(DN)
基本知识
1.负责把HDFS数据块读写到本地文件系统
2.负责所在物理节点的存储管理
3.一次写入,多次读取 (不修改)
4.启动DN时会向NN汇报block信息
5.通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN
SecondaryNameNode(SNN)
1.它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
2.SNN执行合并时机
根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
Block的副本放置策略
Hadoop完全分布式
基本步骤
- 实现免密钥(node01充当服务管理节点,其他所有节点对它实现免密钥登录)
- 配置JDK(node01分发jdk文件给其他节点)
- 配置hadoop
1)配置NN:core-site.xml
2)配置DN:slaves
3)配置SNN:hdfs-site.xml
4)分发
5)格式化 hdfs namenode -format
6)启动
详细步骤
1.打开所有的虚拟机,在secure CRT中都连接一下
2.服务器任务分布
3.停掉伪分布方式:stop-dfs.sh
4.进行免密钥设置
(node02提前ssh localhost一下)
cd
cd .ssh/
将node01的公钥发给node02:scp id_rsa.pub root@node02:/root/.ssh
Node02附加到另一个文件中即可实现:cat node01.pub >> authorized_keys
在node01输入ssh node02就无需密码登录了node02,输入exit退出node02登录
5.分发JDK目录
因为node01已经配置好了JDK,无需配置node02等,只需将node01相应目录(-r)分发给node02等即可
先在node02等上创建相应目录:mkdir /opt/hpe
cd /opt/hpe
scp -r jdk1.8.0/ node02:/opt/hpe/
6.配置JDK
因为node01已经配置好了JDK,无需配置node02等,只需将node01相应配置文件分发给node02等覆盖即可
scp /etc/profile node02:/etc/
7.配置Hadoop
1)配置NN core-site.xml
cp -r hadoop/ hadoop-local进行备份
vi core-site.xml将hadoop.tmp.dir的value值改为/var/hpe/hadoop/full保存
2)配置DN slaves
内容改为独立的三行:
node02
node03
node04
3)配置SNN hdfs-site.xml
vi hdfs-site.xml
副本数量改为2
将secondary对应的value值改为node02
4)只配置一台然后分发,因为搭建了一个新的文件系统,需要格式化hdfs namenode -format
分发:scp -r hadoop-2.7.5/ node02:/opt/hpe/
hdfs dfs namenode -format
5)启动
start-dfs.sh
jps
6)创建目录
hdfs dfs -mkdir -p /user/root
7)上传文件查看(和伪分布式类似)
8)停掉某个进程
hadoop-daemon.sh stop namenode
9)开启某个进程
hadoop-daemon.sh start namenode