初识hadoop

关于hadoop的写入(存入)

nn里面维护了一份元数据。

客户端在存入的数据的时候先经过nn,查要存入的数据是否存在(通过元数据查询),如果存在就返回拒绝写入,若不存在,就开始返回可以往集群里面写入,而且还分配存入那些dn。客户端程序就开始找相应的nn,将相应的block块存进去(切分是由客户端切分的)。

关于副本

客户端在存入数据的时候只是将数据块block0存入相应的机器,然后由被存入的机器(nn)开始复制副本1,副本1复制给副本2,block0是这一连串的复制的发起者,block0必须收到副本1的正确的响应才能算成功,同理,副本1要收到副本2的正确响应才算复制成功。

成功的响应流程,副本2复制成功,响应副本1节点,副本1节点收到响应然后响应block0节点,然后整个写入数据成功。

 

关于元数据的存储

nn存放元数据,磁盘肯定是由一份数据,是由sn处理合并edits 和fsimage

 

元数据存储位置

/home/hadoop/tmp/dfs/data/current

元数据的存储格式:

/test/a.log, 3 ,{blk_1,blk_2},[{blk_1:[h0,h1,h3]},{blk_2:[h0,h2,h4]}]

解释:a.log这个文件有3个副本,两个文件块blk_1,blk_2,每个文件块的副本在h0,h1,h3和h0,h2,h4这几台机器上的datanode上

DN

配置文件块的大小,在hdfs-site.xml的dfs.block.size的数据项,副本数量dfs.replication

 

文件块的存储位置:

/home/hadoop/tmp/dfs/data/current/BP-1492359729-192.168.2.100-1528065072236/current/finalized

 

奇异组合:

拿到block的文件位置,取出文件块,将其追加组合,解压后就可编程原来的文件,说明hadoop并没有对文件进行重新编码,单纯的将文件进行了切割。

关于hadoop启动时,报ssh: Could not resolve hostname xxx: Name or service not known

很恶心,解决方法:  

    /etc/profile文件中添加:  

    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native  

 export HADOOP_OPTS=-Djava.library.path=$HADOOP_HOME/lib  

1.            

2.      注意:是export HADOOP_OPTS=-Djava.library.path=$HADOOP_HOME/lib,而不是export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" 

 

关于nn的工作特点:

1、Namenode始终在内存中保存metedata,用于处理“读请求”

2、到有“写请求”到来时,namenode会首先写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回

3、Hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metedata保持一致,而是每隔一段时间通过合并edits文件来更新内容。Secondarynamenode就是用来合并fsimage和edits文件来更新NameNode的metedata的。

 

secondary namenode的工作流程

secondary通知namenode切换edits文件

secondary从namenode获得fsimage和edits(通过http)

secondary将fsimage载入内存,然后开始合并edits

secondary将新的fsimage发回给namenode

namenode用新的fsimage替换旧的fsimage

 

什么时候checkpiont

fs.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。

 

fs.checkpoint.size    规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。

你可能感兴趣的:(hadoop,hadoop)