HDFS设计思想

HDFS设计思想

DataNode:用来在磁盘上存储数据

HDFS  数据存储单元( block )

1 文件被切分成固定大小的数据block块 

•默认数据块大小为 64MB(hadoop1.x版本64M,2.x为128M) ,可配置 

•若文件大小不到 64MB  ,则单独存成一个block

  比如:一个120M的文件会分成64M+56M两个block块,虽然第二个分割不到64M,依然作为单独的block。

 

2 一个文件存储方式 

•上传时按文件大小被切分成若干个 block ,存储到不同节点上。每一个block都有唯一的编号。 

•默认情况下每个 block 都有三个副本,存储到三个不同的节点上,这三个副本是同级的,比如第一次访问和第二次访问可能因为副本所在节点的资源空闲而被访问,因此副本和备份作用不同。比如某个文件被分成了三个block,block1+block2+block3,而对于每个block都有三个副本,如三个block1副本分别存储server1、server2、server3三个节点上。如果集群中DataNode节点数量不够三个,存储就会报错。也就是DataNode节点的数量不小于block数量。

 

 

Block 大小和副本数通过 Client 端上传文件时设置,文件已经上传服务器成功后,文件block的副本数可以变更,比如文件被append追加修改(因为文件修改仅仅支持追加)生成新的block。Block Size 不可变更,所以虽然block数量增加了,但是block数据块64M大小依然不变。 

 

NameNode:保存metadate元数据,接受客户端读写。

1 NameNode保存metadata元数据,包括:

•   文件 owership(属组和属主)和 permissions(权限)

• 文件包含哪些block块及这些block块ID 

• Block 保存在哪个DataNode (由 DataNode 启动时上报),即block块的位置信息。

 

 

2  metadate 元数据会在启动时从磁盘加载到内存

也就是说启动后,内存和磁盘中都有一份metadata元数据信息。

•   metadata 存储到磁盘文件名为”fsimage” ,在NameNode启动时加载到内存,

而DataNode启动时会上报block的位置信息给NameNode,然后NameNode把block的位置信息保存到内存中。也就是说磁盘上的fsimage文件中此时就少了block的位置信息了。

•  Block 的位置信息不会保存到fsimage

•  edits 记录对 metadata 的操作日志

那么,metadata元数据的操作日志是什么情况下产生的呢?

答:比如上传新文件时,元数据进行内存操作之后记录edits日志,记录了元数据信息。

那么问题来了:

1为什么比如上传文件时,对元数据内存操作后,要记录edits日志,而不直接操作fsimage日志呢?

因为对于大数据系统来说,大量的文件上传时会操作内存中的元数据,然后如果直接操作fsimage元数据文件,就会造成IO瞬间爆发,造成阻塞。所以记录的只是操作记录edits日志。

2 随着时间增加,fsimage文件并没有跟内存元数据保持同步,而落后了很多。怎么办?

SecondaryNameNode的作用就提现出来。

 

SecondaryNameNode:不是主也不是从节点。主要用来辅助NameNode完成fsimage文件的同步的更新的,这个过程叫做合并edits日志。因为同步更新时根据edits日志来更新的,也就是fsimage日志和edits日志的合并。

1 SNN 执行合并时机 

•  根据配置文件设置的时间间隔fs.checkpoint.period   默认 3600 秒 

•  根据配置文件设置edits log 大小  fs.checkpoint.size  规定 edits 文件的最大值默

认是 64MB

 

 

2 SNN合并流程

•   首先,NameNode生成一个新的edits日志文件为元数据操作做准备。

•   接着,SecondrayNameNode从NameNode读取edits和fsimage文件到自己节点。

•   进行合并,生成一个新的fsimage文件。

•   SecondrayNameNode把新fsimage文件传输给NameNode,NameNode更新fsimage。

•   当下一个合并时机到来时依次类推。

 

DataNode ( DN ) 

 – 存储数据( Block ) 

–启动 DN 线程的时候会向 NN 汇报 block 信息 

–通过向 NN 发送心跳保持与其联系( 3 秒一次),如果 NN 10 分钟没有收

到 DN 的心跳,则认为其已经 lost ,并 copy 其上的 block 到其它 DN。

 

问题:dataNode已经挂掉了,是怎么保持block副本为3个呢?

答:NameNode其实会进行checkSize检查每个block的副本数,如果不足则进行复制,所以也不需要知道挂掉的那个节点任何信息。如果复制时发现DataNode节点数小于配置副本数,报错!

 

Block 的副本放置策略 

 

 

–第一个副本:放置在上传文件的 DataNode ;

如果是集群外提交,则随机挑选一台,磁盘不太满, CPU 不太忙的节点。 

–第二个副本:放置在于第一个副本不同的机架的节点上。 

–第三个副本:与第二个副本相同机架的节点。 

–更多副本:随机节点 

 

 

HDFS写流程:

其实就是上传为件,通过hdfs API.

1 客户端请求NameNode,传递参数文件大小、文件名、文件“客户端”用户

2 NameNode收到文件后,比如1G,NameNode服务端配置的有默认block大小,在客户端没有指定block大小时使用。会返回告诉客户端block大小、空闲DataNode机器(DataNode跟NameNode保持三秒一次的心跳)

3 客户端通过输出流,把数据按照字节流方式写到DataNode上去,边写边切成block,就是写够64M后就生成了第一个block,然后继续写第二个block到当前DataNode或者其他的DataNode上。写完后,文件就上传成功了。

注意:副本和客户端无关,当第一个block写完后就会复制副本给其他的DataNode节点。

 

 

HDFS读流程:

1 客户端请求NameNode,NameNode接收到文件路径,返回此文件的元数据(文件哪些block及编号、block位置信息)给客户端。

2 客户端通过字节输入流到DataNode上读取依次block。每个block有是3个以上副本,到哪里读?会找到副本所在dataNode空闲的节点读取。

3 读取完成,告诉NameNode汇报。

 

 

搭建HDFS集群环境:

准备:

1 准备机器192.168.98.95(node1)、192.168.98.96(node2)、192.168.98.97(node3)、192.168.98.98(node4)四台机器

2  各节点时间相同,差几秒没事

  3 设置免登录、检查jdk1.7

 

配置Hosts:

scp –p /etc/hosts  root@node2:/etc

 

 

 

设置免登录:

#这个命令会产生一个公钥(~/.ssh/id_rsa.pub)和密钥(~/.ssh/id_rsa)

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

 

# 将自己的公钥导入认证文件中,就直接可以ssh本机ip,进行登陆,不需要输入密码

cat ~/pub_key >> ~/.ssh/authorized_keys

 

所以,将其他机器的pub_key导入到本机认证文件中就可以实现免登录。

比如使用192.168.98.95(node1)访问192.168.98.96(node2),免登录:

  1. # ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  2. #scp -p ~/.ssh/id_dsa.pub  root@node2:/opt

复制到了192.168.98.96(node2),然后在192.168.98.96(node2)执行以下命令:

  1. #cat /opt/id_dsa.pub >> ~/.ssh/authorized_keys
  2. Ok!
  1. #cd /root/hadoop-2.5.1/etc/hadoop
  2. # vi hadoop-env.sh

修改JAVA_HOME

  1. #vi core-site.xml
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://node1:9000</value>
  5. </property>
  6. <property>
  7. <name>hadoop.tmp.dir</name>
  8. <value>/opt/hadoop-2.5</value>
  9. </property>

 

#vi hdfs-site.xml

  1. <property>
  2. <name>dfs.www.trgj888.com namenode.secondary.http-address</name>
  3. <value>hdfs://www.thq666.com/ node2:50090</value>
  4. </property>
  5. <property>
  6. <name>dfs.namenode.secondary.https-address</name>
  7. <value>hdfs://www.yigou521.com/ node2:50091</value>
  8. </property>
  9. <property>
  10. <name>dfs.namenode.datanode.registration.ip-hostname-check</name>                   
  11. <value>false<www.yongshiyule178.com /value>
  12. </property>

 

#vi slavers

  1. node2
  2. node3
  3. node4

#vi master

node2

 

加入hadoop环境变量到/etc/profile

 

 

 

#hdfs namenode  -format    --只能在namenode下敲

帮我们创建了/opt/hadoop-2.5/dfs/name/current

及其下的fsimage文件

启动hadoop

#start-dfs.sh

关闭防火墙

#systemctl stop www.taohuayuan178.com/ firewalld.service

http://192.168.98.95:50070/

 

 

 

http://192.168.98.96:50090

 

 

 

 

问题:不知什么情况datanode只有node4,没有node2和node3呢?-www.tygj178.com-namdeNode和dataNode的clusterID不一致!

 

Hadoop日志也没有看出错误:/root/hadoop-2.5.1/logs

tail -fhadoop-root-namenode-localhost.localdomain.log

转载于:https://www.cnblogs.com/qwangxiao/p/9655024.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【剑指offer】面试题25:合并两个排序的链表(Java)

输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1&#xff1a; 输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 代码&#xff…

被认为是世界史上50个最伟大的发明有哪些?

来源&#xff1a;数学中国根据美国《大西洋月刊》杂志邀请了世界上12位科学家、技术史专家、工程师、企业高管组成的专家团为世界遴选自车轮&#xff08;车轮的广泛使用一般被认为始于6000年前&#xff09;问世后的50个最伟大的发明。其中&#xff0c;中国的四大发明均在其中。…

numpy中的tile函数

在阅读《机器学习实战》一书中&#xff0c;第一次碰见tile函数一脸懵逼&#xff0c;试验了几次之后&#xff0c;明白了怎么回事&#xff0c;记录如下&#xff1a; >>> import numpy >>> numpy.tile([0,0],5)#在列方向上重复[0,0]5次&#xff0c;默认行1次 ar…

js几种常见排序的实现

1. 冒泡排序 定义&#xff1a; 比较相邻的前后二个数据&#xff0c;如果前面数据大于后面的数据&#xff0c;就将二个 数据交换。 这样对数组的第0个数据到N-1个数据进行一次遍历后&#xff0c;最大的一个数据就“沉”到数组第N-1个位置。 NN-1&#xff0c;如果N不为0就重复前…

Leetcode--695. 岛屿的最大面积

给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿&#xff0c;则返回面积为0。) 示例 1: [[0,0,1,0,0,0…

“NP问题是可计算的吗?” - 从“可计算性”的角度审视NP

来源&#xff1a;图灵人工智能转自 http://blog.sciencenet.cn/u/liuyu2205P vs NP世纪难题显示出在现有的计算机理论中存在着令人不安的困惑&#xff1a;一方面&#xff0c;书本中的NP问题理论部份无论是学习或教学都感到困难&#xff0c;以至于人们不得不一次又一次回头去重新…

日志模块-logging模块

日志模块 -logging(非常重要) 记录用户行为程序运行过程程序错误记录logging.debug()通常调试时用到的日志信息logging.info() #证明事情按照预期的那样工作longging.warning() #表明发生了意外&#xff0c;或者不就得将来发生的问题&#xff08;如&#xff1a;磁盘满了&#x…

Leetcode--字符串压缩

字符串压缩。利用字符重复出现的次数&#xff0c;编写一种方法&#xff0c;实现基本的字符串压缩功能。比如&#xff0c;字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短&#xff0c;则返回原先的字符串。你可以假设字符串中只包含大小写英文字母&#xff08;a…

GPT-3和AlphaFold 2震撼2020,2021年AI最大看点在哪儿?

来源&#xff1a;机器学习研究组订阅2020年并不缺重磅新闻&#xff0c;但人工智能依然够杀出重围&#xff0c;走进主流视野。尤其是GPT-3&#xff0c;它展示了人工智能即将以全新的方式深入我们的日常生活。这些进步赋予了未来很多可能&#xff0c;预测未来变得并不容易&#x…

SpringBoot RequestBody ajax提交对象

前端实现&#xff1a; var student {"name":1,"age":2,"score":3 }; $.ajax({ url:"student/test/delStudentByPrimaryKey.action",contentType:"application/json;charsetUTF-8",type:POS…

Leetcode--1160.拼写单词(Java)

给你一份『词汇表』&#xff08;字符串数组&#xff09; words 和一张『字母表』&#xff08;字符串&#xff09; chars。 假如你可以用 chars 中的『字母』&#xff08;字符&#xff09;拼写出 words 中的某个『单词』&#xff08;字符串&#xff09;&#xff0c;那么我们就认…

宇宙与无限之谜

文&#xff1a;Alan Lightman译&#xff1a;Sue校对&#xff1a;Rachel在博尔赫斯&#xff08;Jorge Luis Borges&#xff09;的《沙之书》&#xff08;The Book of Sand&#xff09;中&#xff0c;一个神秘的传教者敲开了故事主人公的门&#xff0c;想要卖给他一本圣书。这本书…

BZOJ 2124 等差子序列 线段树维护哈希

$ \Rightarrow $ 戳我进BZOJ原题 等差子序列Time Limit: 3 Sec $ \quad $ Memory Limit: 259 MBDescription 给一个 $ 1 $ 到 $ N $ 的排列 $ (A_i) $ &#xff0c;询问是否存在 $ 1 \le p_1<p_2<p_3<p_4<p_5<…<p_ \le N (Len \ge 3) $ &#xff0c; 使得 $…

Leetcode:892. 三维形体的表面积(Java)

在 N * N 的网格上&#xff0c;我们放置一些 1 * 1 * 1 的立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 示例 1&#xff1a; 输入&#xff1a;[[2]] 输出&#xff1a;10 示例 2&#xff1a; 输入&#xff1a;[…

微软、IBM们的中国研究院是怎样一步步“躺平”的?

来源&#xff1a; 脑极体IBM中国研究院关闭的消息&#xff0c;又让大家想起了曾经甲骨文、微软、Adobe等外企研究机构离华的新闻。从上世纪末本世纪初来华&#xff0c;十多年情缘突然宣告分手&#xff0c;固然是遗憾的&#xff0c;也更令人好奇背后的原因。公司业绩表现不佳、研…

P1110 [ZJOI2007]报表统计

题目描述 Q的妈妈是一个出纳&#xff0c;经常需要做一些统计报表的工作。今天是妈妈的生日&#xff0c;小Q希望可以帮妈妈分担一些工作&#xff0c;作为她的生日礼物之一。 经过仔细观察&#xff0c;小Q发现统计一张报表实际上是维护一个非负整数数列&#xff0c;并且进行一些查…

斯坦福 AI 课程 10 年发展史

作者&#xff1a;Rachel Oh 、Peter Maldonado转自&#xff1a;机器之心编辑&#xff1a;杜伟、小舟在人工智能领域&#xff0c;斯坦福大学的很多课程都颇受欢迎&#xff0c;如 CS 224N 深度学习自然语言处理和 CS 229 机器学习。这些课程如何一步步发展成为今天的热门课程&…

Leetcode--820:单词的压缩编码(java)

给定一个单词列表&#xff0c;我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如&#xff0c;如果这个列表是 ["time", "me", "bell"]&#xff0c;我们就可以将其表示为 S "time#bell#" 和 indexes [0, 2, 5]。 对于…

Leetcode--130. 被围绕的区域(java)

给定一个二维的矩阵&#xff0c;包含 X 和 O&#xff08;字母 O&#xff09;。 找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例: X X X X X O O X X X O X X O X X 运行你的函数后&#xff0c;矩阵变为&#xff1a; X X X X X X X X X X X X…

6G技术长啥样?5大趋势,13个核心技术2030年落地

来源&#xff1a;智东西5G已经展开了全面商用&#xff0c;随着5G在垂直行业的不断渗透&#xff0c;人们对于6G的设想也逐步提上日程。面向2030, 6G将在5G基础上全面支持整个世界的数字化&#xff0c;并结合人工智能等技术的发展&#xff0c;实现智慧的泛在可取、全面赋能万事万…