一、hosts文件
前言:
无论linux系统还是windows系统,都有hosts文件:
1、Linux:局域网、内网机器或VM:只有一个内网ip。
配置内网ip:
内网ip | hostname |
---|---|
10.0.0.135 | hadoop004 |
2、云服务器:内网ip+外网ip(ssh链接、打开服务web界面、对外提供服务)
内网ip + hostname
不建议配置外网ip
3、windows下hosts文件路径:
-
C:\Windows\System32\drivers\etc
-
假如hadoop001是VM、内网机器,直接内网ip;
-
假如是云主机,直接就是外网ip,eg,云主机在美国,家里电脑上的secureCRT软件首先需要先通过外网ip访问,外网会自动映射到内网。
扩展:关于hbase 开发
hosts文件,都要配置hbase集群的节点的ip+hostname.
二、web界面解读(一)
hostname+50070:
hostname+8088
YARN上默认8G,8core;(实际生产比如说是128G内存)需要进行修改
三、web界面解读(二)
http://blog.itpub.net/30089851/viewspace-2127850/
http://blog.itpub.net/30089851/viewspace-2127851/
四、BLOCK块剖析
block:块
块的大小:128M
块的副本数:3
在hdfs-default.xml中寻找参数:
<property>
<name>dfs.blocksize</name>
<value>134217728</value> //134217728字节=128MB
</property>
cat hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value> //假设集群至少3台节点
</property>
面试题:
例如有一个260M的文件,块的副本数为3(一个块复制几份)(生产上hdfs不适合存储小文件,为什么不适合存储小文件,如果真的有,小文件该怎么合并处理)
将文件以块的方式去分割去存储
块种类 | 实际存储 | 规格 |
---|---|---|
块A | 128M | 128M A0 A1 A2 |
块B | 128M | 128M B0 B1 B2 |
块C | 4M | 128M C0 C1 C2 |
EG:每个瓶子容量128ml,一碗水260ml
A瓶 128ml
B瓶 128ml
C瓶 4ml
意思是260ml一定要使用3个瓶子来装。
面试题:一个文件160M,副本数为2,块大小128M
问:几个块,实际存储多少
答:4个块 160/128=1....32(进1得2),实际存储320M
五、HDFS架构设计
- namenode nn 名称节点
- secondarynamenode snn 第二名称节点
- datanode dn 数据节点
主从架构 Rack 机架 可以放多个主机
重要指数5颗星*****
nn 文件系统的命名空间
存储a:文件名称
b.文件目录结构
c.文件属性 创建时间 权限 副本数
d.文件对应哪些数据块 --> 数据块对应哪些datanode节点上
比如说一个文件A,A块有三个副本,三个副本在三台机器上的DataNode节点上。
==》文件对应哪些数据块,数据块对应哪些DataNode节点上。
这个叫blockmap(块的映射),nn节点不会持久化存储这种映射关系(比如A块损坏了,NameNode就会在Hadoop003机器上进行复制一份,把损坏的块补上)
dn定期发送blockreport 给nn(DataNode定期告诉老大NameNode我上面有几个块,老大NameNode会定期在memory中维护这些映射关系),一次nn在内存中动态维护这种映射关系。
把NameNode节点撑爆!!
假设生产上给 nn【内存】 8g,假设都是小文件:10个小文件,每个小文件250字节
1亿:1亿*250字节
假如真的有小文件? 进行合并的动作
100个小文件合并成一个大文件 nn节点需要300字节
1亿/100 * 300字节 小
怎么理解:Hadoop中的每个目录、文件和block都会以对象的形式保存在NameNode的内存中。根据经验每个对象在内存中大概占用150个字节。如果HDFS中保存2000万个文件,每个文件都在同一个文件夹中,而且每个文件都只有一个block,则NameNode需要6GB内存。如果只有这么点文件,这当然也没有什么问题,但是随着数据量的增长集群的扩容,最终会达到单台NameNode可以处理的文件(block)数量的上限。基于同样的假设,如果HDFS中保存的数据文件增长到10亿个,则NameNode需要300GB内存。
https://blog.csdn.net/czy_6837/article/details/87863473
hdfs合并小文件方法
建议:合并为一个文件尽量在块大小 120M 合并时小于等于块大小
> nn节点的作用:nn维护文件系统
维护文件系统树,以两种文件永久保存在磁盘上
命名空间、镜像文件 fsimage
编辑日志editlog //记录读写请求,持久化存储的
SecondaryNameNode就在如下图目录下备份这两个文件,万一NameNode挂了,它就可以恢复。
2.2、datanode:
存储:数据块 和 数据块的校验和
与nn节点通信:两件事情
a.每隔三秒发送一个心跳告诉老大nn(我还活着)
b.每10次心跳发送一次当前节点的blockreport
作用:读写文件的数据块
我人在上海,上海、北京、杭州各有一个块,上海的块损坏了,就近原则访问杭州的块
六、SNN剖析
存储:fsimage+editlog
作用:定期合并fsimage+editlog文件为新的fsimage文件,还负责推送给nn节点,简称为检查点(checkpoint)
参数:dfs.namenode.checkpoint.period 每隔一小时进行备份
举例snn每隔一小时进行备份nn节点的内容;11:00~12:00,12:00 snn备份了nn的数据,但是12:30nn节点挂了,此时snn未进行数据备份,所以这半个小时的数据就丢失了。
SNN只能恢复到备份时间点的数据
上面只是Hadoop1.X中存在的。
高级班中HA,有热备份,一个节点挂了另一个节点就起来了standby.
三、snn剖析
整理:第一步:1 roll edits 一个新的回滚
第二部:copy相当于是retrieve fsimage and edits from nn
第三步:merge:合并
第四步:transfer:传输 checkpoint to nn
说白了每一个小时对nn进行一个备份:备份指的是全部数据进行备份