hadoop 的hdfs 相关操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop 的hdfs 相关操作相关的知识,希望对你有一定的参考价值。

  • hadoop 的hdfs 的管理操作

一: hadoop的相关管理命令

1.1 fsimage 的查看命令

cd /soft/hadoop/data/dfs/name/current

hdfs oiv -i fsimage_0000000000000000170 -o f.xml -p XML

查看镜像文件

cat f.xml 

技术分享图片


1.2 edits 编辑日志的查看

hdfs oev -i edits_0000000000000000126-0000000000000000127 -o e.txt -p XML
cat e.txt
edits_inprogress_0000000000000000171  inprogress 表示正在使用的edits 

技术分享图片

1.3 手动对编辑日志滚动

hdfs dfsadmin -rollEdits 
edits_inprogress_0000000000000000179
当前滚动的是的179

技术分享图片

1.4 hdfs 的 安全模式

1.1:安全模式下,集群属于只读状态。但是严格来说,只是保证HDFS元数据信息的访问,而不保证文件的访问,因为文件的组成Block信息此时NameNode还不一定已经知道了。所以只有NameNode已了解了Block信息的文件才能独到。而安全模式下任何对HDFS有更新的操作都会失败。

1.2 : 对于全新创建的HDFS集群,NameNode启动后不会进入安全模式,因为没有Block信息。
hadoop安全模式
在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结 束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入 安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。 SafeModeException 异常

运行hadoop程序时,有时候会报以下错误:

org.apache.hadoop.dfs.SafeModeException: Cannot delete/user/hadoop/input. Name node is in safe mode.

那我们来分析下这个错误,从字面上来理解:“Name node is in safe mode.”

现在就清楚了,那现在要解决这个问题,我想让Hadoop不处在safe mode 模式下,能不能不用等,直接解决呢?答案是可以的,

只要在Hadoop的目录下输入:

$bin/hadoop dfsadmin -safemode leave

也就是关闭Hadoop的安全模式,这样问题就解决了。

safemode模式

NameNode在启动的时候首先进入安全模式,如果datanode丢失的block达到一定的比例(1- dfs.safemode.threshold.pct),则系统会一直处于安全模式状态即只读状态。 dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了 元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。

下面这行摘录自NameNode启动时的日志(block上报比例1达到了阀值0.9990)

The ratio of reported blocks 1.0000 has reached the threshold0.9990. Safe mode will be turned off automatically in 18seconds.

1.修改dfs.safemode.threshold.pct为一个比较小的值,缺省是0.999。

2. hadoop dfsadmin -safemode leave命令强制离开

hadoop dfsadmin-safemode 命令

格式:Usage: java DFSAdmin [-safemode enter | leave | get |wait]

用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:

enter - 进入安全模式

leave - 强制NameNode离开安全模式

get   - 返回安全模式是否开启的信息

wait  - 等待,一直到安全模式结束。

----
hdfs dfsadmin -safemode enter  // 进入安全模式

当hdfs 处于 安全模式下只可以查看不可以删除hdfs 上面的数据

1.5 hdfs 的命名空间保存

hdfs 保存命名空间节点:
hdfs dfsadmin -safemode enter  
hdfs dfsadmin saveNamespace
默认存放在最新的fsimage 文件里面

技术分享图片

1.6 hdfs的快照

1. 描述
迅速对hdfs 上的 文件夹进行备份,不产生新文件,使用差值存储, 默认是禁用快照

2. 命令:

hdfs dfsadmin -allowSnapShot dir1 // 在dir1 上面启用快照

hdfs dfsamdin -disabllowSnapShot dir2 // 在dir2 禁用快照

----

hdfs dfsadmin -allowSnapshot ./data  # 启动可以快照的目录

hdfs dfsadmin -createSnapshot ./data snap1 # 创建快照

hdfs dfs -lsr /user/root/data/.snapshot  # 查看快照

hdfs dfsadmin -removeSnapshot ./data snap2 # 移动快照

hdfs dfsadmin -deleteSnapshot ./data snap2 # 删除快照

技术分享图片
技术分享图片
技术分享图片


1.7 hdfs 节点的服役与退役

[添加新节点]
白名单:  dfs.hosts 
黑名单:  dfs.hosts.exclude

1. dfs.hosts包含新的节点IP 地址,该文件在NN节点的本地目录下面
  【白名单】
   在NN节点的下面的 /soft/hadoop/etc/dfs.include.txt 里面
   ---
   xuegod01
   xuegod02
   xuegod03
   .....
   xuegod0n 
   ---
2. 在hdfs-site.xml中 增加
<property>
<name>dfs.hosts</name>
<value>/soft/hadoop/etc/hadoop/dfs.include.txt</value>
</property>
3.NN 节点上刷新节点
 hdfs dfsadmin -refreshNodes

4. 在slaves 文件中增加要添加的节点的ip地址

然后同步所有节点
5. 单独启动新的节点上的datanode
hadoop-daemon.sh start datanode 

1.8 hdfs 节点的退役

-------------
白名单       黑名单         结果
 NO            NO         不能连接
 NO            YES        不能连接
 YES           NO         可以连接
YES            YES        将要退役节点
----------------
1. 添加退役节点IP地址到黑名单当中
/soft/hadoop/etc/dfs.hosts.exclude 文件中
<property>
<name>dfs.hosts.exclude</name>
<value>/soft/hadoop/etc/dfs.hosts.exclude.txt</value>
</property>

2. 刷新NN节点:
hdfs dfsadmin -refreshNodes

3.查看webUi 退役节点是不是 decommisstion in process

4. 当所有的退役节点的状态为 Decommisstioned 表示数据已经拷贝完成

5. 从白名单删除节点,并刷新节点
白名单:/soft/hadoop/etc/dfs.include.txt
 在删除节点的上面执行: hdfs dfsadmin -refreshNodes

 6.在 slaves 删除 退役节点
列如: 退役节点:xuegod04

在NN 节点上面配置文件黑名
vim /soft/hadoop/etc/dfs.hosts.exclude.txt 
---
xuegod04 
---
配置hdfs-site.xml 增加:

/soft/hadoop/etc/dfs.hosts.exclude 文件中
<property>
<name>dfs.hosts.exclude</name>
<value>/soft/hadoop/etc/dfs.hosts.exclude.txt</value>
</property>
刷新NN节点:
hdfs dfsadmin -refreshNodes

技术分享图片

技术分享图片

然后停掉下降节点的上的 服务器(datanode/nodemanager) 停掉
hadoop-daemon.sh stop datanode 
yarn-daemon.sh stop nodemanager

之后重启 整个hadoop 集群

stop-dfs.sh 

然后起来hdfs上面的服务
start-dfs.sh 

1.9 yarn 节点的增加与退役

参数:
白名单: yarn.resourcemanger.nodes.include-path
黑名单:yarn.resourcemanager.nodes.exclude-path
[增加节点]
1. 在yarn.include文件中包含新节点的名称,该文件在NN 的 本地目录
[白名单文件]
NN 节点上: /soft/hadoop/etc/yarn.include.txt 

2. 在yarn-site.xml 文件中添加属性。

<property>
<name>yarn.resourcemanger.nodes.include-path</name>
<value>/soft/hadoop/etc/yarn.hosts.include.txt</value>
</property>

3. 在NN节点上刷新节点:
yarn rmadmin -refreshNodes

4. 在slaves 文件中添加新节点IP(主机名)

5. 在单独启动的节点上启动nodemanager 
yarn-daemon.sh start modemanager
[退役]
1. 添加退役节点的IP 地址到黑名单,不要更新白名单
/soft/hadoop/etc/yarn.hosts.exclude.txt
2. 配置yarn-site.xml

<property>
<name>yarn.resourcemanger.nodes.exclude-path</name>
<value>/soft/hadoop/etc/yarn.hosts.exclude.txt</value>
</property>

3. 刷新NN节点

yarn rmadmin -refreshNodes

4. 查看webUI,节点状态在decommisstion in progress . 

5. 当所有的要退役节点都报告为Decommissioned,数据转移工作完成。

6. 从白名单删除节点,并刷新新节点。
  yarn rmadmin -refreshNodes

7.从slaves 文件中删除退役节点

以上是关于hadoop 的hdfs 相关操作的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop 核心编程之 HDFS 的文件操作

Hadoop 核心编程之 HDFS 的文件操作

Hadoop 核心编程之 HDFS 的文件操作

hadoop离线day03--Hadoop HDFS

读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

Hadoop之hadoop fs和hdfs dfshdfs fs三者区别