学习Hadoop(一)了解Haddop及搭建伪分布式Hadoop1.0

ps.惰性太大,四天没写,一定会补齐Nginx及Keepalived部分,哦还有之前的Linux的部分。一定要坚持下来!

单提Hadoop一般分为四部分(其他生态系统中的后续单独再写):

1、分布式存储系统HDFS:分布式存储系统、提供了高可靠性、高扩展性、高吞吐率的数据存储服务。

2、分布式计算框架MR(MapReduce):分布式计算框架(计算向数据移动)、易于编程 高容错 高扩展

3、分布式资源管理框架YARN:负责集群资源的管理与调度。

4、Hadoop Common :一些工具。

存储模型:

1、文件会线性切割成块(Block),偏移量至按照多大将文件切割(既Block块的大小),offset(下标)从0开始。

2、Block分散存储在集群节点之中。

3、单一Block大小一致、文件与文件可以不一直。(因为偏移量相同所以一致,因为可能不是整除所以不一致)

4、可以设置副本数,无序散列不同节点中。(副本数不能超过节点数量)

5、文件上传可以设置Block大小与副本数。

6、已上传的Block数量可以调整(场景:多个资源访问已有副本,导致无法再开启新进程),大小不变。

7、只支持一次写入多次读取(不可以修改),且同一时刻只能有一个写入者

8、可以append追加数据。

架构模型:

1、数据:数据本身及元数据

2、 NameNode(主节点)保存文件元数据:单节点。

3、DataNode(从节点)保存文件的Block数据。多节点

4、NameNode与DataNode之间保持心跳,DataNode主动向NameNode提交Block location(块的位置信息)。所以说NameNode掌握的信息分两类1、静态的:Block块的大小、ID等等 2、动态的:每个DataName提交的每个DataNode掌握的块的位置信息(Block location)。通过这两部分,NameNode掌握了所有的文件信息。如果心跳不通了(如DataNode节点挂掉),NameNode会删除该DataNode的掌握的信息。

5、HdfsClient为HDFS的客户端,HDFS文件的存与取由HdfsClient 和节点交互完成。HdfsClient与NameNode交互元数据信息,了解文件的块(Block)的位置信息,再与DataNode交互具体Block信息。

6、DataNode利用服务器的本地文件系统来存储数据块(Block).就是以文件的形式存储。

一下为Hadoop1.x的HDFS架构图,2.x,3.x后面再提

注意:SecondaryNameNode在2.X以后就没有了,这个不能与NameNode进行故障转移。他的作用:

HDFS设计思想:

各部分作用:

一、NameNode

1:基于内存存储,不会和磁盘发生交换(双向),持久化(单向)。

2、接受客户端的读写服务、收集DataNode收集的Block列表信息

3、保存的MetaData(元数据)信息:1、文件的owership和permissions(权限)。2、文件大小、时间。3、Block列表:Block偏 移量,位置信息(不会持久化)。4、Block每副本位置(由DataNode上报)。

4、NameNode持久化:

在持久化过程中会在磁盘中产生一个fsimage文件(fsimage文件是在Hadoop格式化(第一次启动Hadoop前进行的format操作,同时会产生custerid)时产生,会定时进行持久化)。Block位置信息不会存储到fsimage中。在fsimage没有进行定时持久化时通过edits.log辅助完成持久化。edits.log中记录了对MetaData的操作日志。当edits.log达到一定极限时(达到配置文件fs.checkpoint.period配置的时间间隔,默认3600S。或者fs.checkpoint.size设置的最大值,默认64M),由SecondaryNameNode节点将edits.log与fsimage进行合并成为fsimage.ckpt.然后将其返回给NameNode中替换fsimage.

所以,在项目启动时将fsimage加载到内存,展开恢复成MetaData,然后再在Edits.log中的执行,从而将上次启动的数据还原。

二、DataNode

1、DataNode是具体计算的角色,且维护自己所在的文件信息(以文件形式存储的Block数据)。

2、启动DataNode后会主动向NameNode会报Block信息。

3、同时存储Block的元数据信息(MD5验证文件,保证当前的Block文件在传输时的完整性)。在Block存入DataNode时同时有个MD5验证,在Block取出时通过验证保证文件完整性。如果不完整则向其他节点取该Block的副本。

4、发送心跳向NN(3秒一次),如果NN10分钟没有收到DN的心跳,则认为该节点的DN已经lost,并copy其上的Block到其他的DN,当然是从其他含有Block副本的节点上拷贝。

三、SecondaryNameNode

当edits.log达到一定极限时(达到配置文件fs.checkpoint.period配置的时间间隔,默认3600S。或者fs.checkpoint.size设置的最大值,默认64M),由SecondaryNameNode节点将edits.log与fsimage进行合并成为fsimage.ckpt.然后将其返回给NameNode中替换fsimage.

HDFS优点:

1、高容错:数据自动保存多个副本。副本丢失后自动恢复

2、适合批处理:移动计算而非数据。数据位置暴露给计算框架(Block偏移量)

3、适合大数据处理:GNTBPB及数据。百万规模以上的文件数量。数据大小限制>10K+节点

4、可构建在廉价的机器上:通过多副本提高可靠性,提供容错和恢复机制。

HDFS缺点:

1、低延迟数据访问(比如毫秒级,低延迟与高吞吐率)

2、小文件存取。占用NameNode大量内存。寻道时间超过读取时间。

3、不支持修改,只支持上传。且一个文件只能有一个写入者。仅支持append方式追加。

Block副本防止策略(下面与官网说法不一致,与源码内容一致):

第一个副本,如果客户端在集群内,则放置在上传文件的DataNode上,如果不在则随机挑选一台磁盘、cpu都有可用资源的DataNode.

第二个副本放置在与第一个副本不同的机架的另一台服务器上。第三个放在与第二个副本同机架的不同服务器上。

更多副本。随机节点。

HDFS文件写入流程:

切分文件Block.按Block线性和NN获取DN列表(副本数)。验证DN列表后以更小的单位流式传输数据(各节点两两通信确定可用)。Block传输结束后:1、DN向NN汇报Block信息。2、DN向Client汇报完成。3、Client向NN汇报完成。

获取下一个Block存放的DN列表。…最终Client汇报完成。NN会在写流程更新文件状态。

HDFS读文件流程:

1、和NN获取一部分Block位置列表(既block location,一部分是指会找到最近的副本)

2、线性和DN获取Block,最终合并为一个文件。

3、Block副本列表按距离择优选取

4、MD5验证数据完整性

HDFS文件权限

遵循POSIX标准(可移植操作系统接口)

1、与Linux文件权限类似。rw读写 x对于文件忽略,对于文件夹表示是否允许访问其内容

2、Linux系统用户A使用Hadoop命令创建一个文件,那么这个文件在HDFS中的ower就是A

3、HDFS权限不足:HDFS相信你告诉他是谁,他就认为你是谁。(3.x以后改变了an)

安全模式:

–namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。

–一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。

–此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败,尚未获取动态信息)。

–在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束

–当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。

所有角色及内容:

搭建伪分布式Hadoop1.0:

先检查防火墙,selinux配置,hosts文件映射、hostname设置。

1、本机免秘钥登录:ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa 执行后

2、将公钥追加到验证文件:cat id_dsa.pub >> authorized_keys,(可能多个秘钥)

3、本地免秘钥完成

4、解压文件:tar xf hadoop-2.6.5.tar.gz -C /opt/soft/

5、在/etc/profile中追加环境变量

注意:hadoop启动会加载hadoop项目下etc下的配置文件:

6、将这三个文件中的Java_home重新设置一下。

7、修改core-site.xml:意思为添加主节点信息。注意不要写IP,一定要用别名。

8、修改hdfs-site.xml:添加副本数。以为是伪分布式只有一个节点所以只能是1.

9、处理DataNode节点。Hadoop2.X中DataNode节点在slave中。将内容改为别名

10、core-site.xml中:添加配置此处配置的是fsimage文件、clusterid文件、DataNode数据文件的存储位置,默认在/tmp下 所以需要修改

11、hdfs-site.xml:添加SecondaryNamenode地址。

12、hdfs namenode -format 初次开启时格式化

13、start-dfs.sh启动hadoop.后正常访问。

14、客户端命令 :hdfs dfs -mkdir -p /user/root创建目录

hdfs dfs -D dfs.blocksize=1048576 -put test.txt /user/root 上传文件。

关闭Hadoop:stop-dfs.sh

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值