CSDN■不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码( 二 )


用户操作的时候 , 也应该是先和主节点打交道 ,查询数据在那些从节点上 ,然后再从从节点读取数据 。 有的时候为了加快用户的访问速度 , 会把整个命名空间信息都放在内存当中、当存储文件越多时 , 我们主节点就需要越多的内存空间 。
打开一个文件是先加载到哪里?
答:内存
我们为什么用笔记本打不开一个2T大小的文件?
答:内存太小
2、Block
在从节点存储数据时 , 有的原始数据文件可能很大 , 有的可能很小 , 大小不一的文件不容易管理 , 那么可以抽象出一个独立的存储文件单位 , 称为块(block) 。
问题:如果我的硬盘有500G , 现在还剩200G, 但是我创建文件的时候提示我硬盘空间不足?
答:一般情况是因为inode号不足
3、容灾
数据存放在集群中 , 可能因为网络原因或者服务器硬件原因造成访问失败 , 最好采用副本(replication)机制 , 把数据同时备份到多台服务器中 , 这样数据就安全了 , 数据丢失或者访问失败的概率就小了 。
4、异地容灾?
答:不同的地域 , 构建一套或者多套相同的应用或者数据库 , 起到灾难后立刻接管的作用 。
在 hadoop 中 , 分布式存储系统称为 HDFS(hadoop distributed file system) 。 其中 , 主节点称为名字节点(namenode) , 从节点称为数据节点(datanode) 。
流程:
CSDN■不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码
本文插图
1:首先 , 客户端请求查看数据 , 请求先访问namenode
2:nomenode根据你的需求 , 告诉你数据存储在那些datanode上
3:客户端直接和从节点联系 , 获取数据
分布式计算
对数据进行处理时 , 我们会把数据读取到内存中进行处理 。 如果我们对海量数据进行处理 , 比如数据大小是 100GB , 我们要统计文件中一共有多少个单词 。 要想把数据都加载到内存中几乎是不可能的 , 称为移动数据 。
那么是否可以把程序代码放到存放数据的服务器上呢?因为程序代码与原始数据相比 , 一般很小 , 几乎可以忽略的 , 所以省下了原始数据传输的时间了 。 现在 , 数据是存放在分布式文件系统中 , 100GB 的数据可能存放在很多的服务器上 , 那么就可以把程序代码分发到这些服务器上 , 在这些服务器上同时执行 , 也就是并行计算 , 也是分布式计算 。 这就大大缩短了程序的执行时间 。 我们把程序代码移动数据节点的机器上执行的计算方式称为移动计算 。
分布式计算需要的是最终的结果 , 程序代码在很多机器上并行执行后会产生很多的结果 , 因此需要有一段代码对这些中间结果进行汇总 。 Hadoop中的分布式计算一般是由两阶段完成的 。
第一阶段负责读取各数据节点中的原始数据 , 进行初步处理 , 对各个节点中的数据求单词数 。 然后把处理结果传输到第二个阶段 , 对个节点结果进行汇总 , 产生最终结果 。
在hadoop中 , 分布式计算部分称为MapReduce 。
MapReduce 是一种编程模型 , 用于大规模数据集(大于1TB)的并行运算 。 概念"Map(映射)“和"Reduce(归约)” , 和它们的主要思想 , 都是从函数式编程语言里借来的 , 还有从矢量编程语言里借来的特性 。 它极大地方便了编程人员在不会分布式并行编程的情况下 , 将自己的程序运行在分布式系统上 。
分布式计算角色
主节点:作业节点(jobtracker)
从节点:任务节点(tasktracker)
在任务节点当中 , 运行第一阶段的代码称为map任务(map task ), 运行第二阶段代码称为 reduce任务(reduce task)
名词解释:
1)hadoop : apache 开源的分布式框架
2)HDFS:hadoop的分布式文件系统
3)NameNode: Hadoop HDFS 元数据主节点服务器 , 负责保存datenode文件存储元数据信息 , 这个服务器时单点的 。


推荐阅读