HDFS- 数据复制

数据复制(Data Replication)

HDFS 旨在跨大型集群中的计算机可靠地存储非常大的文件。它将每个文件存储为一系列块,除最后一个块之外的文件中的所有块都具有相同的大小,HDFS 使用的默认块大小为 128MB。复制文件的块以实现容错,且一般复制出的文件块会存储到不同的 DataNode 中。每个文件的Block大小和Replication因子都是可配置的。。

Replication因子在文件创建的时候会默认读取客户端的HDFS配置,然后创建(可改变)

HDFS中的文件是write-one,并且严格要求在任何时候只有一个writer

HDFS数据冗余复制如图所示。
图
从图可以看到,文件/user/nuoline/data/part-1的复制因子Replication值是2,块的ID列表包括{1,3},可以看到块1和块3分别被冗余备份了两份数据块;
文件/user/nuoline/data/part-2的复制因子Replication值是3,块的ID列表包括2、4、5,可以看到块{2,4,5}分别被冗余复制了三份。

HDFS中,NameNode 做着有关块复制的所有决定,它定期从群集中的每个 DataNode 接收 HeartbeatBlockreport。心跳包(Heartbeat)的接收表示该DataNode节点正常工作,而Blockreport包括了该DataNode上所有的Block组成的列表

数据复制流水线

当客户端将数据写入复制因子为 r = 3HDFS 文件时,NameNode 使用 replication target choosing algorithm 检索 DataNode 列表。此列表包含将承载该块副本的 DataNode

然后客户端向第一个 DataNode 写入,第一个 DataNode 开始分批接收数据,将每个部分写入其本地存储,并将该部分传输到列表中的第二个 DataNode。第二个 DataNode 又开始接收数据块的每个部分,将该部分写入其存储,然后将该部分刷新到第三个 DataNode。最后,第三个 DataNode 将数据写入其本地存储。

可见,DataNode 是从流水线中的前一个接收数据,同时将数据转发到流水线中的下一个,数据是从一个 DataNode 流水线到下一个 DataNode

操作命名

应用可以以多种方式操控 HDFS 上的文件,其中通过 FS Shell 可以像操控 Linux 文件系统一般,常用命令有:

hdfs dfs -cp /user/merge /user/search

上面的命令将merge文件下面的所有文件(包括merge文件夹)复制到search目录下。

ActionCommand
创建 foodir 文件夹bin/hadoop fs -mkdir /foodir
删除文件夹bin/hadoop fs -rm -R /foodir
查看文件内容bin/hdfs dfs -cat /foodir/myfile.txt
上传文件bin/hdfs dfs -copyFromLocal ~/a.txt /foodir/
…………

会发现这里有两种命令前缀,一个是 hadoop fs,一个是 hdfs dfs
区别是:hadoop fs 可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广;而 hdfs dfs 专门针对hdfs分布式文件系统。
还有一个前缀为 hadoop dfs,这个已经过时,建议不要使用。

参考文献

Hadoop:HDFS的数据复制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piepis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值