Hadoop学习视频心得(二)HDFS的引入

一、日志问题

1、发现问题:

看运行日志(框架目录的logs文件夹,/var/log/框架名称)

2、分析原因:

日志是一行一行的,每行都有日志级别

INFO、WARN、ERROR、FATAL

命令行:tail -n 1000日志文件名

3、解决:根据原因解决问题

①、搭建完集群,格式化成功,启动失败,重新格式化,

启动又失败,关闭集群,三台机器都要删除数据;

②、xsync同步,启动集群,host unreachable,can’t resovle hostname,unknown host exception ,一般是/etc/hosts文件配置有问题

③、Permission denied,权限拒绝,操作的时候,权限不足

1)在不属于你的文件夹进行操作(在该地没有写权限)

2)进行系统级别操作

以上的两种操作加sudo是正常的

如果module文件夹出了权限问题,解决方案如下:

sudo chown 用户名:用户组 /opt/module

如果日志内容太多不好看怎么办?加个过滤就可以显示错误,如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9rU9B2t-1609056001647)(C:\Users\xiaoyoupei\AppData\Roaming\Typora\typora-user-images\image-20201226100636212.png)]

④、用xsync发送过整个hadoop目录,会导致datanodes页面只看到一个节点,处理方法:同①

二、常用命令

ps -ef 查看父进程子进程id

netstat -nltp 查看端口

free -t 查看剩余内存

df -h 查看分区大小

du -h /usr/local/soft/hadoop-2.6.0/ 查看整个文件占了多少磁盘空间

三、HDFS组织架构

1、NameNode(nn):

就是Master,他就是一个主管、管理者。

1)、管理HDFS的命名空间----------文件系统的分区(比如windows分C、D盘这样)

2)、配置副本策略-----------配置副本的存放位置,但是存几份是由客户端(client)负责,如果有一份副本挂掉,也是nn负责备份

3)、管理数据块的(Block)映射信息----------拆分数据,将1块块的数据存在datanode里面,datanode里面存的不是文件,而是一个个的数据块,而这些数据块分配在那些datanode上是由nn管的,文件到块的映射信息也是由nn管的(我们在读取文件的时候,文件由很多数据块组成,但我们并看不出,这就有一个文件到块的映射关系)

4)、处理客户端的读写请求---------读写请求要经过nn

2、DataNode(dn):

就是slave。NameNode下达命令,DataNode执行实际的操作

1)、存储实际的数据块

2)、执行数据块的读/写操作

3、Client:客户端

1)、文件切分:文件上传HDFS的时候,client将文件切分成一个个的Block,然后进行上传

2)、与NameNode交互,获取文件的位置信息

3)、与Datanode交互,读取或者写入数据(注意client直连dn)

4)、Client提供一些命令来管理HDFS,比如:NameNode格式化

5)、Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作

4、Secondary NameNode(NN助手):

并非NameNode的热备。当NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务

1)、辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode

2)、在紧急情况下,可辅助换恢复NameNode

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxD3WWlM-1609056001651)(file:///C:\Users\XIAOYO~1\AppData\Local\Temp\ksohtml19188\wps1.png)]

四、Hadoop fs 命令分类

1、HDFS—>HDFS:

cp、mv、chown(改用户名和组)、chgrp(改组)、chmod、du、df、cat、rm

2、本地—>HDFS:

put:上传文件

copyFromLocal(copy):相当于复制上传文件到HDFS

moveFromLocal(move):上传的HDFS时候本地文件就删除了

appendToFile:追加文件的内容

setrep:设置HDFS中文件的副本数量(举例:hadoop fs -setrep 10 /sanguo/shuguo/kongming.txt(修改副本数目为10个))

注意!!!:HDFS内部副本数量不能超过节点数量

3、HDFS—>本地:

get:下载文件

copyToLocal:同get

getmerge:合并下载,(举例:hadoop fs -getmerge /*.txt /home/xiaoyoupei/jdk/hadoop-2.6.0/test/demo1.txt(将hdfs根目录下txt文件下载到指定的文件内,会在这个文件里按照顺序排列))

错误笔记:

1、端口号写错:

hadoop2.x的客户端访问集群端口是9000、访问HDFS端口是50070;hadoop3.x的客户端访问集群端口是8020、访问HDFS端口是9870;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-37dcT57m-1609056001652)(C:\Users\xiaoyoupei\AppData\Roaming\Typora\typora-user-images\image-20201227093609407.png)]

2、控制台输出错误

1)、Class path contains multiple SLF4J bindings.:大概意思就是冲突,解决方案如下所示:之后我们项目引入的第三方的工具包中都需要加入这个排除错误;

代码为:

<!--排除这个slf4j-log4j12-->
<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions>

2)、由于log4j日志信息打印模块的配置信息没有给出造成的,简单的说,就是人家要有个地方来存放日志的打印信息,可是没有,所以就报错了。解决方案:

将该方法插入到main函数中,可以自行打印日志信息了

BasicConfigurator.configure(); //自动快速地使用缺省Log4j环境。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9Q5qIeU-1609056001653)(C:\Users\xiaoyoupei\AppData\Roaming\Typora\typora-user-images\image-20201227101845328.png)]

五、API书写的基本套路:

//1、新建HDFS对象
FileSystem fileSystem = FileSystem.get(URI.create("hdfs://192.168.18.128:9000"), new Configuration(), "root");

//2、操作集群
fileSystem.copyFromLocalFile(new Path("D:\\DATA\\尚硅谷\\04.Hadoop\\Day02\\12_HDFS API.mp4"),new Path("/"));

//3、关闭资源
fileSystem.close();

六、HDFS的写数据流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ooIKsZ5o-1609056001654)(file:///C:\Users\XIAOYO~1\AppData\Local\Temp\ksohtml8952\wps1.png)]

1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

2)NameNode返回是否可以上传。

3)客户端请求第一个 Block上传到哪几个DataNode服务器上。

4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6)dn1、dn2、dn3逐级应答客户端。

7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

七、网络拓扑-节点距离计算

提问:在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。那么这个最近距离怎么计算呢?

先看一下官网的解释:

在这里插入图片描述

大致意思就是说:

对于常见情况,当复制因子为 3 时,HDFS的放置策略是将一个副本放在本地机架中的一个节点上,另一个副本放在本地机架中的不同节点上,最后一个副本放在不同机架中的不同节点上。

例如下图,如果选择了R1机架下的N1作为发送的节点,那将有可能会选择R1下的N2作为第二个节点,R2下的N1作为第三个节点

在这里插入图片描述

八、HDFS的读数据流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iLsGseLW-1609056001656)(file:///C:\Users\XIAOYO~1\AppData\Local\Temp\ksohtml8952\wps2.png)]

1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

注意:本人使用的是Hadoop2.6.0,但是看的视频是Hadoop3.1.6,有些地方有点出入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友培

数据皆开源!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值