HDFS写入数据
HDFS副本摆放策略
不同的版本副本摆放策略可能并不一致,HDFS主要采用一种机架感知(rack-ware)的机制来实现摆放策略。
由于不同的机架上节点间通信要通过交换机(switches),同一机架上的通信带宽要优于不同机架。
HDFS默认采用3副本策略(参考2.9.1 & 3.2.1):
1.若操作的机器(writer)为一个DataNode,则将一个副本放在该机器上,否则任选一个DataNode;
2.将第二个副本放在与第一个不同的机架上;
3.第三个副本放置在与第二个同一机架但不同的节点上。
机架故障的可能性远小于节点故障的可能性。
如果复制因子大于3,则在确定每个机架的副本数量低于上限(基本上是(副本-1)/机架+ 2)的同时,随机确定第4个及以下副本的位置。
由于NameNode并不允许同一DataNode存放多于一个副本,因此副本数不能超过DataNode数。
HDFS写数据流程

1. client发起文件上传请求,通过RPC与NameNode建立通信连接;
2. NameNode检查目标文件是否已存在等,是否可以上传;
2. client向NameNode请求写入第一个block位置;
4. NameNode根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataNode的地址告知client如:DN1,DN2,DN3;
5. client请求3台DataNode中的一台DN1上传数据(本质上是一个RPC调用,建立pipeline),DN1收到请求会继续调用DN2,然后DN2调用DN3,将整个pipeline建立完成,后逐级返回client;
6. client开始往DN1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(默认64K),DN1收到一个packet就会传给DN2,DN2传给DN3;N1每传一个packet会放入一个应答队列等待应答。
7. 数据被分割成一个个packet数据包在pipeline上依次传输,在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点DN1将pipelineack发送给client;
8. 当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器。
HDFS元数据(metadata)
元数据即数据的数据,是维护HDFS中的文件和目录所需要的信息。用于描述和组织具体的文件内容。元数据的可用性直接决定了HDFS的可用性。
形式上分为内存元数据和元数据文件两类,其中NameNode在内存中维护整个文件系统的元数据镜像,用于HDFS的管理;元数据文件则用于持久化存储。
元数据上保存信息分为以下三类:
- 文件与目录自身的属性信息,如文件名、目录名、文件大小、创建时间等;
- 文件内容存储的相关信息,如分块情况、副本个数、副本存放位置等;
- HDFS所有DataNodes的信息,用于DataNodes管理。
从来源上讲,元数据主要来源于NameNode磁盘上的元数据文件(它包括元数据镜像fsimage和元数据操作日志edits两个文件)以及各个DataNode的上报信息
参考来源:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
https://www.cnblogs.com/mediocreWorld/p/10946647.html
http://blog.sina.com.cn/s/blog_a94476040101cco2.html
HDFS写入数据的更多相关文章
- sqoop往远程hdfs写入数据时出现Permission denied 的问题
猜测出现该问题的原因是sqoop工具用的是执行sqoop工具所用的本地用户名. 如果远程hdfs用的用户是hdfs,那么我本地还需要建一个名为hdfs的用户? 其实不需要,只要为用户增加一个环境变量就 ...
- Hadoop源码分析之客户端向HDFS写数据
转自:http://www.tuicool.com/articles/neUrmu 在上一篇博文中分析了客户端从HDFS读取数据的过程,下面来看看客户端是怎么样向HDFS写数据的,下面的代码将本地文件 ...
- spark读取hdfs上的文件和写入数据到hdfs上面
def main(args: Array[String]): Unit = { val conf = new SparkConf() conf.set("spark.master" ...
- 大数据学习笔记——HDFS写入过程源码分析(2)
HDFS写入过程注释解读 & 源码分析 此篇博客承接上一篇未讲完的内容,将会着重分析一下在Namenode获取到元数据后,具体是如何向datanode节点写入真实的数据的 1. 框架图展示 在 ...
- 大数据学习笔记——HDFS写入过程源码分析(1)
HDFS写入过程方法调用逻辑 & 源码注释解读 前一篇介绍HDFS模块的博客中,我们重点从实践角度介绍了各种API如何使用以及IDEA的基本安装和配置步骤,而从这一篇开始,将会正式整理HDFS ...
- Hadoop源代码分析:HDFS读取和写入数据流控制(DataTransferThrottler类别)
DataTransferThrottler类别Datanode读取和写入数据时控制传输数据速率.这个类是线程安全的,它可以由多个线程共享. 用途是构建DataTransferThrottler对象,并 ...
- HDFS读写数据块--${dfs.data.dir}选择策略
最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...
- HDFS写入和读取流程
HDFS写入和读取流程 一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而 ...
- 使用Hadoop的MapReduce与HDFS处理数据
hadoop是一个分布式的基础架构,利用分布式实现高效的计算与储存,最核心的设计在于HDFS与MapReduce,HDFS提供了大量数据的存储,mapReduce提供了大量数据计算的实现,通过Java ...
随机推荐
- codewars--js--Roman Numerals Encode
问题描述:(将阿拉伯数字转换成罗马数字) Create a function taking a positive integer as its parameter and returning a st ...
- 复制表结构创建分表 再设置自增ID
CREATE TABLE table_name1 LIKE table_name ALTER TABLE test AUTO_INCREMENT=x
- djinn:1 Vulnhub Walkthrough
靶机下载链接: https://download.vulnhub.com/djinn/djinn.ova 主机端口扫描: FTP发现一些文件提示 1337端口是一个游戏,去看下 哈哈有点难,暂时放弃, ...
- Bellman-ford算法 无向图
// 单源最短路问题 // Bellman-Ford算法 // 复杂度O(V*E) //! 可以判断负圈 #include <cstdio> #include <iostream&g ...
- mysql必知必会--MySQL简介
什么是MySQL MySQL已经存在很久了,它在世界范围内得到了广泛的安装和使用. 为什么有那么多的公司和开发人员使用MySQL?以下列出其原因. 成本--MySQL是开放源代码的,一般可以免费使用( ...
- ubuntu18.04误删apt-get命令恢复总结
1.背景 由于使用aptitude命令替换了apt-get命令后感到后悔,想要恢复apt-get命令,特此总结以下踩过的坑 aptitude和apt-get的区别:https://www.cnblog ...
- MySQL 8 复制
MySQL 8.0 支持的复制方法: 传统方法(基于二进制日志文件位置) 新方法(基于GTID) MySQL 8.0 支持的同步类型: 异步复制(内置) 同步复制(NDB集群) 半同步复制(半同步复制 ...
- springboot 报错 org.springframework.beans.factory.NoSuchBeanDefinitionException:No qualifying bean of type 'com.example.service.HrService' available: 有没有大佬出个主意,我找了一天,刚入门springboot
话不多说先上图,这是启动类的配置,这里配置了@ComponentScan("我的mapper的接口") 接下来是我的项目结构截图 然后是service 的截图,我在这里加了注解@S ...
- antd-design
1. 有mock 时候进度条展示不正常
- Codeforces Round #599 (Div. 2) D. 0-1 MST(bfs+set)
Codeforces Round #599 (Div. 2) D. 0-1 MST Description Ujan has a lot of useless stuff in his drawers ...