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 文件中删除退役节点

原文地址:http://blog.51cto.com/flyfish225/2096390

时间: 2024-07-29 15:25:12

hadoop 的hdfs 相关操作的相关文章

Hadoop之HDFS文件操作

摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件    命令行     Java API HDFS是一种分布式文件系统,为MapReduce这种框架下的海量数据分布式处理而设计. Hadoop之HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具:另一种是JavaAPI,即利用Hadoop的Java库,采用编程的方式操作HDFS的文件.

Hadoop之HDFS客户端操作

1. HDFS 客户端环境准备 1.1 windows 平台搭建 hadoop 2.8.5 2. 创建Maven工程 # pom.xml <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> <dep

Hadoop之HDFS(客户端操作) 1.环境准备

HDFS客户端操作 1.HDFS客户端环境准备 1.根据自己电脑的操作系统拷贝对应的编译后的hadoop jar包到非中文路径(例如:D:\Develop\hadoop-2.7.2),如图所示. 图 编译后的hadoop jar包 2.配置HADOOP_HOME环境变量,如图所示. 图  配置HADOOP_HOME环境变量 3. 配置Path环境变量,如图所示. 图  配置Path环境变量 4.创建一个Maven工程HdfsClientDemo 5.导入相应的依赖坐标+日志添加 <depende

Hadoop之HDFS(客户端操作) 2 HDFS的API操作 3 HDFS的I/O流操作

2 HDFS的API操作 2.1 HDFS文件上传(测试参数优先级) 1.编写源代码 // 文件上传 @Test public void testPut() throws Exception { Configuration conf = new Configuration(); conf.set("dfs.replication", "2"); // 1.获取fs对象 FileSystem fs = FileSystem.get(new URI("hdfs

Hadoop学习笔记0002——HDFS文件操作

  说明:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式. 方式一:命令行方式 Hadoop文件操作命令形式为:hadoop fs -cmd <args> 说明:cmd是具体的文件操作命令,<args>是一组数目可变的参数. Hadoop最常用的文件操作命令,包括添加文件和目录.获取文件.删除文件等. 1 添加文件和目录 HDFS有一个默认工作目录/usr/$USER,其中$USER是你的登录用户名,作者的用户名是root.该目录不能自动创建,需要执行m

hadoop hdfs API操作

hadoop的hdfs API的基本操作 简单的介绍 hadoop为我们提供了hdfs非常方便的shell命令(类似于Linux文件操作的命令),再者.hadoop还为我们提供hdfsAPI,使我们开发人员可以对hfds进行一些操作.如:copy文件(从本地到hdfs,从hdfs到本地).删除文件或者目录.读取文件的内容.看文件的相关信息.列出文件的所有子目录,在文件后面追加内容.(注意:hdfs不支持文件中某一行的修改,只允许追加内容到文件的后面). 首先我初始化hdfs,最后将hdfs关闭:

从零自学Hadoop(21):HBase数据模型相关操作下

阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们讲述了HBase的数据模型相关操作的上部分.   下面我们开始介绍HBase的数据模型相关操作的下部分. 变量 一:定义变量 这样我们就可以使用t这个变量来代替table1了. t=get_table 'table1' 二:使用 t.put 'row1','cf1:a','v1' t.g

Hadoop学习笔记_5_分布式文件系统HDFS --shell操作

分布式文件系统HDFS --shell操作 分布式文件系统[Distributed File System]概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 . 分布式文件系统特点: 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. 通透性.让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般

hadoop学习;hdfs操作;运行抛出权限异常: Permission denied;api查看源码方法;源码不停的向里循环;抽象类通过debug查找源码

eclipse快捷键alt+shift+m将选中的代码封装成方法:alt+shift+l将选中的代码添加对应类型放回参数 当调用一个陌生方法时,进入源码不停的向里循环,当找不到return类似方法的时候,可以看到最原始的方法 package com.kane.hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org