码迷,mamicode.com
首页 > 其他好文 > 详细

大数据技术之_04_Hadoop学习_02_HDFS_DataNode(面试开发重点)+HDFS 2.X新特性

时间:2019-02-09 18:00:13      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:https   pre   touch   off   die   http   步骤   white   moved   

第6章 DataNode(面试开发重点)6.1 DataNode工作机制6.2 数据完整性6.3 掉线时限参数设置6.4 服役新数据节点6.5 退役旧数据节点6.5.1 添加白名单6.5.2 黑名单退役6.6 Datanode多目录配置第7章 HDFS 2.X新特性7.1 集群间数据拷贝7.2 小文件存档7.3 回收站7.4 快照管理


第6章 DataNode(面试开发重点)

6.1 DataNode工作机制

DataNode工作机制,如下图所示。

技术图片
  • 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度块数据的校验和,以及时间戳
  • 2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
  • 3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  • 4)集群运行中可以安全加入和退出一些机器。

6.2 数据完整性

  思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否很危险?同理DataNode节点上的数据损坏了,却没有发现,是否也很危险,那么如何解决呢?
  如下是DataNode节点保证数据完整性的方法。

  • 1)当DataNode读取Block的时候,它会计算CheckSum。
  • 2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。
  • 3)Client读取其他DataNode上的Block。
  • 4)DataNode在其文件创建后周期验证CheckSum,如下图所示。
    技术图片

6.3 掉线时限参数设置

技术图片
需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为
<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>
<property>
    <name>dfs.heartbeat.interval</name>
    <value>3</value>
</property>

6.4 服役新数据节点

0、需求
  随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。
1、环境准备
(1)在hadoop104主机上再克隆一台hadoop105主机
(2)修改IP地址、修改主机名称、修改主机名称和ip地址映射、永久关闭防火墙、重启系统

技术图片
(3)删除原来HDFS文件系统留存的文件(/opt/module/hadoop-2.7.2/data和/logs目录)
(4)source一下配置文件
[atguigu@hadoop105 hadoop-2.7.2]$ source /etc/profile

(5)先启动集群

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

2、服役新节点具体步骤
(1)直接单独启动hadoop105的DataNode,即可关联到集群

[atguigu@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[atguigu@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager

如下图所示:

技术图片

(2)测试:在hadoop105上传文件

[atguigu@hadoop105 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /

(3)如果数据不均衡,可以用命令实现集群的再平衡

[atguigu@hadoop102 sbin]$ ./start-balancer.sh
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop102.out
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

6.5 退役旧数据节点

6.5.1 添加白名单

  添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被退出。
配置白名单的具体步骤如下:
(1)在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts文件

[atguigu@hadoop102 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[atguigu@hadoop102 hadoop]$ touch dfs.hosts
[atguigu@hadoop102 hadoop]$ vim dfs.hosts

添加如下主机名称(不添加hadoop105)

hadoop102
hadoop103
hadoop104

(2)在NameNode的hdfs-site.xml配置文件中增加dfs.hosts属性

<!-- 白名单信息 -->
<property>
    <name>dfs.hosts</name>
    <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
</property>

(3)配置文件分发

[atguigu@hadoop102 hadoop]$ xsync hdfs-site.xml

(4)刷新NameNode

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful

(5)更新ResourceManager节点

[atguigu@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
19/02/07 11:25:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.25.103:8033

(6)在web浏览器上查看

技术图片
(7)如果数据不均衡,可以用命令实现集群的再平衡
[atguigu@hadoop102 sbin]$ ./start-balancer.sh
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop102.out
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

6.5.2 黑名单退役

  在黑名单上面的主机都会被强制退出。
0、先恢复现场
(1)注释掉hdfs-site.xml配置文件中dfs.hosts属性
(2)配置文件分发

[atguigu@hadoop102 hadoop]$ xsync hdfs-site.xml

(3)单独关闭hadoop105的DataNode

[atguigu@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[atguigu@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager

(4)刷新NameNode、刷新ResourceManager

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[atguigu@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.25.103:8033

(5)检查Web浏览器,发现105节点的状态为Dead,说明数据节点105没有启动,如下图所示:

技术图片
(6)然后我们启动105节点,恢复现场
[atguigu@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-datanode-hadoop105.out

现场恢复后如下图所示:

技术图片

1、在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts.exclude文件

[atguigu@hadoop102 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[atguigu@hadoop102 hadoop]$ touch dfs.hosts.exclude
[atguigu@hadoop102 hadoop]$ vim dfs.hosts.exclude

添加如下主机名称(要退役的节点)

hadoop105

2、在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性

<!-- 黑名单信息 -->
<property>
    <name>dfs.hosts.exclude</name>
    <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
</property>

注释掉【白名单信息】,添加上【黑名单信息】

技术图片

3、配置文件分发

[atguigu@hadoop102 hadoop]$ xsync hdfs-site.xml

4、刷新NameNode、刷新ResourceManager

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[atguigu@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
19/02/07 20:29:54 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.25.103:8033

5、检查Web浏览器
退役节点的状态为Decommission in Progress(退役中),说明数据节点正在复制块到其他节点,如下图所示:

技术图片

6、等待退役节点状态为Decommissioned(所有块已经复制完成),停止该节点及节点资源管理器
注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役,如下图所示:

技术图片
停止该节点及节点资源管理器(单节点退出):
[atguigu@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
stopping datanode
[atguigu@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager

检查Web浏览器,查看【Last contact(上次连接时间)】

技术图片

7、如果数据不均衡,可以用命令实现集群的再平衡

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh 
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop102.out
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

注意:不允许白名单和黑名单中同时出现同一个主机名称。

6.6 Datanode多目录配置

1、DataNode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本。
2、具体配置如下:
hdfs-site.xml

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>

3、配置文件分发

[atguigu@hadoop102 hadoop]$ xsync hdfs-site.xml

4、关闭集群

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/stop-dfs.sh 
Stopping namenodes on [hadoop102]
hadoop102: stopping namenode
hadoop102: stopping datanode
hadoop104: stopping datanode
hadoop103: stopping datanode
Stopping secondary namenodes [hadoop104]
hadoop104: stopping secondarynamenode

[atguigu@hadoop103 hadoop-2.7.2]$ sbin/stop-yarn.sh 
stopping yarn daemons
stopping resourcemanager
hadoop103: stopping nodemanager
hadoop102: stopping nodemanager
hadoop104: stopping nodemanager
no proxyserver to stop

5、删除HDFS文件系统留存的文件(/opt/module/hadoop-2.7.2/data和/logs目录)

[atguigu@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/
[atguigu@hadoop103 hadoop-2.7.2]$ rm -rf data/ logs/
[atguigu@hadoop104 hadoop-2.7.2]$ rm -rf data/ logs/

6、格式化NameNode

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format

7、启动集群

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh 
Starting namenodes on [hadoop102]
hadoop102: starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-namenode-hadoop102.out
hadoop102: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-datanode-hadoop102.out
hadoop104: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-datanode-hadoop104.out
hadoop103: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-datanode-hadoop103.out
Starting secondary namenodes [hadoop104]
hadoop104: starting secondarynamenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-secondarynamenode-hadoop104.out

[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh 
starting yarn daemons
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-atguigu-resourcemanager-hadoop103.out
hadoop104: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-atguigu-nodemanager-hadoop104.out
hadoop102: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-atguigu-nodemanager-hadoop102.out
hadoop103: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-atguigu-nodemanager-hadoop103.out

8、上传数据测试

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/kongming.txt /
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/README.txt /

9、查看目录内容

[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data1/current/BP-455082023-192.168.25.102-1549543741292/current/finalized/subdir0/subdir0
[atguigu@hadoop102 subdir0]$ ll
总用量 8
-rw-rw-r--. 1 atguigu atguigu 31 2月   7 20:56 blk_1073741825
-rw-rw-r--. 1 atguigu atguigu 11 2月   7 20:56 blk_1073741825_1001.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741825
wo shi kong ming 
我是孔明

------------------------------

[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data2/current/BP-455082023-192.168.25.102-1549543741292/current/finalized/subdir0/subdir0
[atguigu@hadoop102 subdir0]$ ll
总用量 8
-rw-rw-r--. 1 atguigu atguigu 1366 2月   7 20:57 blk_1073741826
-rw-rw-r--. 1 atguigu atguigu   19 2月   7 20:57 blk_1073741826_1002.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741826
For the latest information about Hadoop, please visit our website at:

   http://hadoop.apache.org/core/

and our wiki, at:

   http://wiki.apache.org/hadoop/
......
......
[atguigu@hadoop102 subdir0]$ 

第7章 HDFS 2.X新特性

7.1 集群间数据拷贝

1、scp实现两个远程主机之间的文件复制

scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt        // 推 push
scp -r root@hadoop103:/user/atguigu/hello.txt hello.txt    // 拉 pull
scp -r root@hadoop103:/user/atguigu/hello.txt root@hadoop104:/user/atguigu      // 是通过本地主机中转实现两个远程主机的文件复制;如果在两个远程主机之间ssh没有配置的情况下可以使用该方式。

2、采用distcp命令实现两个Hadoop集群之间的递归数据复制

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop distcp hdfs://haoop102:9000/user/atguigu/hello.txt hdfs://hadoop103:9000/user/atguigu/hello.txt

7.2 小文件存档

技术图片
案例实操
(1)需要启动YARN进程
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-yarn.sh

(2)归档文件
把/user/atguigu/input/目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/user/atguigu/output/路径下。

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop archive -archiveName input.har -p /user/atguigu/input/ /user/atguigu/output/

(3)查看归档

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr /user/atguigu/output/input.har
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr har:///user/atguigu/output/input.har

(4)解归档文件

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -cp har:///user/atguigu/output/input.har/* /user/atguigu/

7.3 回收站

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。
1、回收站参数设置及工作机制

技术图片
2、启用回收站
技术图片
修改core-site.xml,配置垃圾回收时间为1分钟。
<property>
    <name>fs.trash.interval</name>
    <value>1</value>
</property>

3、查看回收站
回收站在集群中的路径:/user/atguigu/.Trash/…
4、修改访问垃圾回收站用户名称
进入垃圾回收站用户名称,默认是dr.who,修改为atguigu用户
core-site.xml

<property>
    <name>hadoop.http.staticuser.user</name>
    <value>atguigu</value>
</property>

5、配置文件分发

[atguigu@hadoop102 hadoop]$ xsync core-site.xml

6、启动集群

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh 

7、通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站

Trash trash = New Trash(conf);
trash.moveToTrash(path);

8、恢复回收站数据

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -mv /user/atguigu/.Trash/Current/user/atguigu/input/ /user/atguigu/input/

9、清空回收站

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -expunge

7.4 快照管理

技术图片
案例实操
(1)开启/禁用指定目录的快照功能
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -allowSnapshot /user/atguigu/input/
Allowing snaphot on /user/atguigu/input/ succeeded

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -disallowSnapshot /user/atguigu/input/

(2)对目录创建快照

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -createSnapshot /user/atguigu/input/
Created snapshot /user/atguigu/input/.snapshot/s20190207-221706.618

通过web访问:http://hadoop102:50070/explorer.html#/user/atguigu/input/.snapshot/s20190207-221706.618 // 快照和源文件使用相同数据

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -lsr /user/atguigu/input/.snapshot/

(3)指定名称创建快照

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -createSnapshot /user/atguigu/input miao190209

(4)重命名快照

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -renameSnapshot /user/atguigu/input/ miao190209 atguigu190209

(5)列出当前用户所有可快照目录

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs lsSnapshottableDir

(6)比较两个快照目录的不同之处

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs snapshotDiff /user/atguigu/input/ . .snapshot/atguigu190209

(7)恢复快照

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -cp /user/atguigu/input/.snapshot/s20190207-221706.618 /user/

大数据技术之_04_Hadoop学习_02_HDFS_DataNode(面试开发重点)+HDFS 2.X新特性

标签:https   pre   touch   off   die   http   步骤   white   moved   

原文地址:https://www.cnblogs.com/chenmingjun/p/10357692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!