因为原来的节点只有一个名称节点和三个数据节点,现在为了学习辅助名称节点和进行机架感知,对节点进行扩充,添加了一个辅助名称节点和一个数据节点,顺便把namenode和datanode的dir添加一下,添加两个目录是为了防止一个目录中文件损坏另一个目录能继续使用,两个目录中的数据是一样的。在namenode的hdfs-site.xml
中添加,并且分发。
<property>
<name>dfs.namenode.fs-limits.min-block-size</name>
<value>1024</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/hadoop/dfs/name1,file:///home/hadoop/hadoop/dfs/name2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/hadoop/dfs/data1,file:///home/hadoop/hadoop/dfs/data2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>2nn1:9868</value>
</property>
新添加节点需要修改的东西
- 克隆虚拟机以后需要把hostname,
ifcfg-ens33
中的静态ip,yarn-site.xml
中的主机名修改 - 在名称几点中修改hosts文件,把新添加的节点添加进去,修改Hadoop下面的workers文件,然后分发到其他节点
- 对于xcall.sh 、xsync.sh的文件修改分发的主机名
- 修改完以后清理log,重新格式化文件系统
hdfs namenode -format
使用oiv命令来查看fsimage镜像文件
通过
hdfs oiv -i ./name2/current/fsimage_0000000000000000017 -o a.xml -p XML
命令来将镜像文件转化为xml文件来进行查看
-i 后面跟的是你的镜像文件 -o后面跟的是你要输出的文件 -p 后面跟的是你要输出的文件类型
将镜像文件解析为xml文件以后就会看到你的目录在文件中都有显示,你文件存放的块的id,大小,类型。可以看到只有文件在系统中才有三个副本数,而目录结构是没有副本的。
上面这个结构中则展示了你系统中的目录结构,其中的数字对应上面的id。
hdfs dfsadmin //管理命令
- hdfs dfsadmin //查看帮助
- hdfs dfsadmin -help rollEdits //查看滚动编辑日志的帮助
- hdfs dfsadmin -rollEdits //滚动编辑日志
使用oev命令来解析edits日志为XML文件
hdfs oev -i ./namesecondary/current/edits_0000000000000000001-0000000000000000017 -o b.xml -p XML
日志中这段是进行了创建目录的操作,有创建目录的用户
日志中这段是添加操作,添加了test.txt
日志中的这段是指即使你什么都不做也会有一个段的记录
看日志中有一个正在使用的编辑日志,现在把这个日志进行滚动,
目前日志中只有启动的一个段的信息。执行hdfs dfsadmin -rollEdits
查看日志,发现日志解析的结果为添加了一个end记录。
在执行stop-dfs.sh
关闭的时候编辑日志不会进行滚动,在调用start-dfs.sh
的时候,镜像文件会与编辑日志进行融合,产生新的镜像文件,并且编辑日志会进行滚动。
图中镜像文件是21,编辑日志是22
在停掉服务后查看,镜像文件是21,编辑日志是22
重新启动服务以后前面的日志合并为新的镜像文件
保存名字空间(手动融合镜像文件和编辑日志)
执行命令hdfs dfsadmin -saveNamespace
执行报错,没有进入安全模式
执行进入安全模式的命令
hdfs dfsadmin -savemode enter //进入安全模式
hdfs dfsadmin -savemode leave //退出安全模式
hdfs dfsadmin -savemode get //查看安全模式
hdfs dfsadmin -savemode wait //等待
等待用于在要修改名称空间里面的东西的时候,因为正处于安全模式,添加这一命令以后会在安全模式退出的时候执行你的命令(sh脚本)。